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
| Field | Details | |
|---|---|---|
| externalId | required | Your own id for this announcement (e.g. your news post id). Sending the same id again updates the listing. |
| title | required | Up to 200 characters. |
| type | required | Scholarship / grant · Exchange / mobility · Research internship · Summer school · Internship / job · Event / conference · Competition · PhD position |
| link | required | The official page where students apply (http/https). |
| description | required | Up to 5,000 characters. |
| levels | required | Array, any of: Bachelor, Master, PhD, Graduate, Postdoc |
| fields | optional | Array, any of: Computer Science, Engineering, Mathematics, Physics, Chemistry, Biology / Life sciences, Data Science / AI, Environmental science, Any STEM. Default: ["Any STEM"] |
| deadline | optional | YYYY-MM-DD. Leave out if not announced yet. |
| eligibility | optional | Who can apply, in plain language (up to 3,000 characters). |
| funding | optional | Fully funded · Partially funded · Unpaid / self-funded. Default: Partially funded |
| languages | optional | Array of languages required. Default: ["English"] |
| country / city | optional | Defaults to your organisation's country. |
| nationality | optional | Nationality or residency restrictions, if any. |
| startDate / endDate | optional | YYYY-MM-DD |
| womenFocused | optional | true for programmes aimed at women in STEM. |
| visibility | optional | "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.