For organisations

STEMBridge API

Send your opportunities to STEMBridge automatically, straight from where you already announce them.

1. Get an API key

Register your organisation (or join it), then an owner opens the organisation dashboard → API & integrations → Create key. Keys start with sb_live_, are shown once, and can be revoked at any time.

Send it on every request: Authorization: Bearer sb_live_…

2. Create or update an opportunity

POST https://stembridge.app/api/v1/opportunities with a JSON body. New listings from untrusted organisations go to review first; trusted organisations publish immediately.

curl -X POST https://stembridge.app/api/v1/opportunities \
  -H "Authorization: Bearer $STEMBRIDGE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "externalId": "news-2026-114",
    "title": "Summer research school in AI",
    "type": "Summer school",
    "link": "https://www.your-university.edu/news/114",
    "description": "Two weeks of lectures and lab work on applied machine learning.",
    "levels": ["Bachelor", "Master"],
    "fields": ["Data Science / AI", "Computer Science"],
    "deadline": "2027-03-01",
    "funding": "Fully funded",
    "eligibility": "Bachelor's and Master's students in STEM."
  }'

Response (201 created, 200 updated):

{ "id": "api_uop-gr_…", "externalId": "news-2026-114", "status": "pending",
  "created": true, "url": "https://stembridge.app/opportunity/api_uop-gr_…",
  "note": "Submitted for review by the STEMBridge team." }

Fields

FieldDetails
externalIdrequiredYour own id for this announcement (e.g. your news post id). Sending the same id again updates the listing.
titlerequiredUp to 200 characters.
typerequiredScholarship / grant · Exchange / mobility · Research internship · Summer school · Internship / job · Event / conference · Competition · PhD position
linkrequiredThe official page where students apply (http/https).
descriptionrequiredUp to 5,000 characters.
levelsrequiredArray, any of: Bachelor, Master, PhD, Graduate, Postdoc
fieldsoptionalArray, any of: Computer Science, Engineering, Mathematics, Physics, Chemistry, Biology / Life sciences, Data Science / AI, Environmental science, Any STEM. Default: ["Any STEM"]
deadlineoptionalYYYY-MM-DD. Leave out if not announced yet.
eligibilityoptionalWho can apply, in plain language (up to 3,000 characters).
fundingoptionalFully funded · Partially funded · Unpaid / self-funded. Default: Partially funded
languagesoptionalArray of languages required. Default: ["English"]
country / cityoptionalDefaults to your organisation's country.
nationalityoptionalNationality or residency restrictions, if any.
startDate / endDateoptionalYYYY-MM-DD
womenFocusedoptionaltrue for programmes aimed at women in STEM.
visibilityoptional"public" (default) or "internal": only students with a verified email at your domain see it.

The organisation name and domain are filled in from your account. Invalid data returns 422 with a list of what to fix.

List and delete

# Your organisation's listings (any source)
curl https://stembridge.app/api/v1/opportunities -H "Authorization: Bearer $STEMBRIDGE_KEY"

# Remove a listing you sent, by your externalId
curl -X DELETE https://stembridge.app/api/v1/opportunities/news-2026-114 -H "Authorization: Bearer $STEMBRIDGE_KEY"

3. Connect your announcements

Your website or CMS

When an announcement is published, call POST /opportunities from your backend with the post id as externalId. Call it again on edits, DELETE on removal.

WordPress

Use a webhook plugin (for example "WP Webhooks") on post publish/update: method POST, the URL above, the Authorization header, and map your fields to the JSON body.

Zapier / Make

Trigger: new item in your RSS feed, Google Sheet or CMS. Action: "Webhooks by Zapier" (or Make's HTTP module) → POST, JSON, with the Authorization header.

Power Automate

Trigger on your SharePoint/news list, then an HTTP action (POST) with the JSON body and the Authorization header.

From JavaScript:

await fetch("https://stembridge.app/api/v1/opportunities", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.STEMBRIDGE_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ externalId: post.id, title: post.title, type: "Scholarship / grant",
    link: post.url, description: post.summary, levels: ["Master"], deadline: post.deadline }),
});

Good to know

Errors: 401 missing/unknown key · 403 organisation not approved yet · 422 invalid data (see details) · 429 more than 120 requests per minute · 501 API not enabled on this server.

Security: keep your key on your server or in your automation tool's secret settings, never in a public web page. Revoke it from the dashboard if it leaks.