Alumni ConnectAlumniConnect
Developer API

Alumni Connect Partner API

The Alumni Connect Partner API lets your systems manage a university's alumni, events, jobs and announcements programmatically. Every request authenticates with two things that must resolve to the same tenant: an API key and your university slug. Create and manage API keys in your dashboard on the API keys page (admin.alumniconnect.io/u/<your-slug>/api-keys). Faculty, degree-level and degree-major IDs come from Settings → Branding → Academics — and are the SAME for every university, so you can reuse them across tenants.

Authentication

Base URL
https://api.alumniconnect.io

All endpoints live under the /v1 prefix — e.g. https://api.alumniconnect.io/v1/alumni.

Authentication

Every request needs two matching things — an API key and your university slug. Both must belong to the same tenant. Create keys on your dashboard's API keys page (admin.alumniconnect.io/u/<your-slug>/api-keys).

Authorization: Bearer YOUR_API_KEY
x-university-slug: your-university-slug

Rate limit & pagination

API operationalThe figures below are the platform's current live settings.

Rate limit

Each API key may make up to 30 requests per minute. Requests beyond this limit receive 429 Too Many Requests with the number of seconds to wait before retrying.

During maintenance, all requests receive 503 Service Unavailable.

Pagination

Every list endpoint returns a fixed 250 records per page. Request a specific page with the x-page header (1-indexed). Page size is set by the platform and is not adjustable per request.

{
  "rows": [ … ],
  "total": 1421,
  "page": 1,
  "pageSize": 250,
  "timestamp": "2026-07-23T09:21:08.000Z",
  "timezone": "UTC"
}
Common errors

These status codes can be returned by any endpoint. Endpoint-specific errors (403, 409, business-rule failures) are listed individually below.

  • 400
    Bad Request
    The request body or query parameters are malformed.
  • 401
    Unauthorized
    Missing or invalid bearer token.
  • 404
    Not Found
    The requested resource doesn't exist (or isn't visible to your tenant).
  • 422
    Unprocessable Entity
    Validation failed on one or more fields. The response includes the offending paths.

Account

Your university, business details and subscription

1 endpoint

GET/meGet your university & subscription

Returns the university the API key belongs to — business/contact details, address, platform timezone, and the subscription (trial vs paid).

Example request

GET /me
curl https://api.alumniconnect.io/v1/me \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug"

Example response200Your university, account and subscription details.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "Your university, account and subscription details.",
  "event": "account.fetched",
  "action": "read",
  "data": {
    "university": {
      "id": "8f0a3c2e-91b4-4a7d-9d2e-1c5b6a0f7e33",
      "slug": "seri-mutiara-university",
      "name": "Seri Mutiara University",
      "status": "active",
      "contactEmail": "registrar@serimutiara.edu.my",
      "contactName": "Nurul Huda",
      "contactPhone": "+60 3-8765 4321",
      "address": {
        "line1": "88 Jalan Bukit Bintang",
        "line2": "Menara Seri Mutiara",
        "city": "Kuala Lumpur",
        "state": "Wilayah Persekutuan",
        "postalCode": "50450",
        "countryCode": "MY",
        "country": "Malaysia"
      }
    },
    "subscription": {
      "status": "active",
      "period": "paid",
      "isTrial": false,
      "trialEnd": "2026-07-30T00:00:00.000Z",
      "currentPeriodEnd": "2026-08-14T00:00:00.000Z"
    },
    "timezone": "UTC",
    "dateFormat": "DD MMM YYYY",
    "timestamp": "2026-07-23T09:21:08.000Z"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • account.fetched

Alumni

Alumni records — list, fetch, create, update, delete

5 endpoints

GET/alumniList / search alumni

Paginated list of alumni in your tenant. Returns an empty list (not a 404) when nothing matches. Page with the x-page header; page size is the platform setting. Optional filters are passed as query parameters and AND-ed together — e.g. ?rollNo=ENG-2019&batch=2015-2019&faculty=<facultyId>.

Query parameters

NameTypeDescription
qOptionalstringFree-text search across name, email, roll number, batch, degree.Example: aisyah

Example request

GET /alumni
curl https://api.alumniconnect.io/v1/alumni \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug"

Example response200A page of alumni (common list envelope).

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "A page of alumni (common list envelope).",
  "event": "alumni.listed",
  "action": "read",
  "data": {
    "rows": [
      {
        "id": "8f0a3c2e-91b4-4a7d-9d2e-1c5b6a0f7e33",
        "firstName": "Aisyah",
        "lastName": "Ibrahim",
        "email": "aisyah.ibrahim@example.edu",
        "phone": "+60 12-345 6789",
        "rollNo": "ENG-2019-0142",
        "batch": "2015-2019",
        "graduationYear": 2019,
        "faculty": "Faculty of Engineering",
        "degreeLevel": "Bachelor's",
        "degree": "Software Engineering",
        "city": "Kuala Lumpur",
        "country": "Malaysia",
        "graduationCity": "Petaling Jaya",
        "graduationCountry": "Malaysia",
        "workCity": "Johor Bahru",
        "workCountry": "Malaysia",
        "workStatus": "working",
        "currentCompany": "Maybank",
        "headline": "Senior Engineer at Maybank",
        "linkedinUrl": "https://linkedin.com/in/aisyah",
        "jobType": "full_time_employee",
        "gender": "female",
        "dateOfBirth": "1997-03-14",
        "graduationDate": "2019-07-31",
        "profileImageUrl": "https://cdn.example.com/a.jpg",
        "notes": "Keynote speaker at 2025 homecoming.",
        "status": "active",
        "experience": [
          {
            "title": "Senior Software Engineer",
            "jobType": "full_time",
            "company": "Maybank",
            "city": "Johor Bahru",
            "country": "Malaysia",
            "startMonth": "01",
            "startYear": "2021",
            "endMonth": "12",
            "endYear": "2024",
            "description": "Led the payments reliability team."
          },
          {
            "title": "Software Engineer",
            "jobType": "full_time",
            "company": "AirAsia",
            "city": "Kuala Lumpur",
            "country": "Malaysia",
            "startMonth": "07",
            "startYear": "2019",
            "endMonth": "12",
            "endYear": "2020",
            "description": "Backend for the driver app."
          }
        ],
        "residenceAddress": {
          "line1": "12 Jalan Ampang",
          "line2": "Unit 4-A",
          "city": "Kuala Lumpur",
          "state": "Wilayah Persekutuan",
          "country": "Malaysia",
          "postalCode": "50450"
        },
        "permanentAddress": {
          "line1": "45 Jalan Merdeka",
          "line2": "Taman Melati",
          "city": "Johor Bahru",
          "state": "Johor",
          "country": "Malaysia",
          "postalCode": "80000"
        },
        "createdAt": "2026-05-14T09:21:08Z",
        "updatedAt": "2026-06-01T11:02:44Z"
      }
    ],
    "total": 1421,
    "page": 1,
    "pageSize": 250,
    "timestamp": "2026-07-23T09:21:08.000Z",
    "timezone": "UTC"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • alumni.listed
POST/alumniCreate an alumni record

Creates one alumnus. The eight required fields and their validation errors are identical to the dashboard's Add-alumni form. Counts against your plan's alumni limit.

Request bodyRequiredapplication/json

The alumnus to create.

FieldTypeDescription
firstNameRequiredstringGiven name (1–120 chars).
lastNameRequiredstringFamily name (1–120 chars).
rollNoRequiredstringRoll / matric number (1–80 chars).
batchRequiredstringFormat YYYY-YYYY, start year earlier than end year (e.g. 2015-2019).
graduationYearRequiredintegerGraduation year (1900–2100).
facultyIdRequiredstringFaculty catalog ID (from Academics).
degreeLevelIdRequiredstringDegree-level catalog ID (from Academics).
degreeMajorIdRequiredstringDegree-major catalog ID (from Academics).
emailOptionalstringMust be a valid email address.
phoneOptionalstringContact phone number.
cityOptionalstringCurrent city.
countryOptionalstringISO 3166-1 alpha-2 country CODE (e.g. MY). Stored as the country name.
graduationCityOptionalstringCity at graduation.
graduationCountryOptionalstringISO alpha-2 country CODE where they graduated.
workCityOptionalstringWork city.
workCountryOptionalstringISO alpha-2 country CODE where they work.
workStatusOptionalstringOne of the listed work statuses.
currentCompanyOptionalstringWhere they currently work.
headlineOptionalstringProfile headline.
linkedinUrlOptionalstringFull LinkedIn profile URL.
jobTypeOptionalstringOne of the listed job types.
genderOptionalstringOne of: female, male, non_binary, prefer_not_to_say.
dateOfBirthOptionalstringA real date in YYYY-MM-DD.
graduationDateOptionalstringA real date in YYYY-MM-DD.
profileImageUrlOptionalstringAvatar / profile photo URL.
notesOptionalstringFree-form admin note.
statusOptionalstringDirectory status.
experienceOptionalobject[]An ARRAY — one object per role. Each entry's `country` is an ISO alpha-2 CODE.
Show each item's fields
titlestring
jobTypestring
companystring
citystring
countrystringOn create/update: ISO 3166-1 alpha-2 CODE. In responses: the country name.
startMonthstring
startYearstring
endMonthstring
endYearstring
descriptionstring
residenceAddressOptionalobjectA single OBJECT (one home address). Its `country` is an ISO alpha-2 CODE.
Show fields
line1stringAddress line 1.
line2stringAddress line 2.
streetstringStreet.
citystringCity.
statestringState / region.
countrystringISO 3166-1 alpha-2 country CODE.
postalCodestringPostal / ZIP code.
permanentAddressOptionalobjectA single OBJECT (the permanent address). Its `country` is an ISO alpha-2 CODE.
Show fields
line1stringAddress line 1.
line2stringAddress line 2.
streetstringStreet.
citystringCity.
statestringState / region.
countrystringISO 3166-1 alpha-2 country CODE.
postalCodestringPostal / ZIP code.

Example request

POST /alumni
curl -X POST https://api.alumniconnect.io/v1/alumni \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug" \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "Aisyah",
    "lastName": "Ibrahim",
    "rollNo": "ENG-2019-0142",
    "batch": "2015-2019",
    "graduationYear": 2019,
    "facultyId": "b31d…-faculty-id",
    "degreeLevelId": "7a02…-level-id",
    "degreeMajorId": "c9f4…-major-id",
    "email": "aisyah.ibrahim@example.edu",
    "phone": "+60 12-345 6789",
    "city": "Kuala Lumpur",
    "country": "MY",
    "graduationCity": "Petaling Jaya",
    "graduationCountry": "MY",
    "workCity": "Johor Bahru",
    "workCountry": "MY",
    "workStatus": "working",
    "currentCompany": "Maybank",
    "headline": "Senior Engineer at Maybank",
    "linkedinUrl": "https://linkedin.com/in/aisyah",
    "jobType": "full_time_employee",
    "gender": "female",
    "dateOfBirth": "1997-03-14",
    "graduationDate": "2019-07-31",
    "profileImageUrl": "https://cdn.example.com/a.jpg",
    "notes": "Keynote speaker at 2025 homecoming.",
    "status": "active",
    "experience": [
      {
        "title": "Senior Software Engineer",
        "jobType": "full_time",
        "company": "Maybank",
        "city": "Johor Bahru",
        "country": "MY",
        "startMonth": "01",
        "startYear": "2021",
        "endMonth": "12",
        "endYear": "2024",
        "description": "Led the payments reliability team."
      },
      {
        "title": "Software Engineer",
        "jobType": "full_time",
        "company": "AirAsia",
        "city": "Kuala Lumpur",
        "country": "MY",
        "startMonth": "07",
        "startYear": "2019",
        "endMonth": "12",
        "endYear": "2020",
        "description": "Backend for the driver app."
      }
    ],
    "residenceAddress": {
      "line1": "12 Jalan Ampang",
      "line2": "Unit 4-A",
      "city": "Kuala Lumpur",
      "state": "Wilayah Persekutuan",
      "country": "MY",
      "postalCode": "50450"
    },
    "permanentAddress": {
      "line1": "45 Jalan Merdeka",
      "line2": "Taman Melati",
      "city": "Johor Bahru",
      "state": "Johor",
      "country": "MY",
      "postalCode": "80000"
    }
  }'

Example response201The newly-created alumni record.

Example response (201)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "The newly-created alumni record.",
  "event": "alumni.created",
  "action": "create",
  "data": {
    "id": "8f0a3c2e-91b4-4a7d-9d2e-1c5b6a0f7e33",
    "firstName": "Aisyah",
    "lastName": "Ibrahim",
    "email": "aisyah.ibrahim@example.edu",
    "phone": "+60 12-345 6789",
    "rollNo": "ENG-2019-0142",
    "batch": "2015-2019",
    "graduationYear": 2019,
    "faculty": "Faculty of Engineering",
    "degreeLevel": "Bachelor's",
    "degree": "Software Engineering",
    "city": "Kuala Lumpur",
    "country": "Malaysia",
    "graduationCity": "Petaling Jaya",
    "graduationCountry": "Malaysia",
    "workCity": "Johor Bahru",
    "workCountry": "Malaysia",
    "workStatus": "working",
    "currentCompany": "Maybank",
    "headline": "Senior Engineer at Maybank",
    "linkedinUrl": "https://linkedin.com/in/aisyah",
    "jobType": "full_time_employee",
    "gender": "female",
    "dateOfBirth": "1997-03-14",
    "graduationDate": "2019-07-31",
    "profileImageUrl": "https://cdn.example.com/a.jpg",
    "notes": "Keynote speaker at 2025 homecoming.",
    "status": "active",
    "experience": [
      {
        "title": "Senior Software Engineer",
        "jobType": "full_time",
        "company": "Maybank",
        "city": "Johor Bahru",
        "country": "Malaysia",
        "startMonth": "01",
        "startYear": "2021",
        "endMonth": "12",
        "endYear": "2024",
        "description": "Led the payments reliability team."
      },
      {
        "title": "Software Engineer",
        "jobType": "full_time",
        "company": "AirAsia",
        "city": "Kuala Lumpur",
        "country": "Malaysia",
        "startMonth": "07",
        "startYear": "2019",
        "endMonth": "12",
        "endYear": "2020",
        "description": "Backend for the driver app."
      }
    ],
    "residenceAddress": {
      "line1": "12 Jalan Ampang",
      "line2": "Unit 4-A",
      "city": "Kuala Lumpur",
      "state": "Wilayah Persekutuan",
      "country": "Malaysia",
      "postalCode": "50450"
    },
    "permanentAddress": {
      "line1": "45 Jalan Merdeka",
      "line2": "Taman Melati",
      "city": "Johor Bahru",
      "state": "Johor",
      "country": "Malaysia",
      "postalCode": "80000"
    },
    "createdAt": "2026-05-14T09:21:08Z",
    "updatedAt": "2026-06-01T11:02:44Z"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • alumni.created
GET/alumni/{id}Fetch one alumni record

Returns a single alumni record by its ID.

Path parameters

NameTypeDescription
idRequiredstringAlumni record ID.

Example request

GET /alumni/{id}
curl https://api.alumniconnect.io/v1/alumni/{id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug"

Example response200The matched alumni record.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "The matched alumni record.",
  "event": "alumni.fetched",
  "action": "read",
  "data": {
    "id": "8f0a3c2e-91b4-4a7d-9d2e-1c5b6a0f7e33",
    "firstName": "Aisyah",
    "lastName": "Ibrahim",
    "email": "aisyah.ibrahim@example.edu",
    "phone": "+60 12-345 6789",
    "rollNo": "ENG-2019-0142",
    "batch": "2015-2019",
    "graduationYear": 2019,
    "faculty": "Faculty of Engineering",
    "degreeLevel": "Bachelor's",
    "degree": "Software Engineering",
    "city": "Kuala Lumpur",
    "country": "Malaysia",
    "graduationCity": "Petaling Jaya",
    "graduationCountry": "Malaysia",
    "workCity": "Johor Bahru",
    "workCountry": "Malaysia",
    "workStatus": "working",
    "currentCompany": "Maybank",
    "headline": "Senior Engineer at Maybank",
    "linkedinUrl": "https://linkedin.com/in/aisyah",
    "jobType": "full_time_employee",
    "gender": "female",
    "dateOfBirth": "1997-03-14",
    "graduationDate": "2019-07-31",
    "profileImageUrl": "https://cdn.example.com/a.jpg",
    "notes": "Keynote speaker at 2025 homecoming.",
    "status": "active",
    "experience": [
      {
        "title": "Senior Software Engineer",
        "jobType": "full_time",
        "company": "Maybank",
        "city": "Johor Bahru",
        "country": "Malaysia",
        "startMonth": "01",
        "startYear": "2021",
        "endMonth": "12",
        "endYear": "2024",
        "description": "Led the payments reliability team."
      },
      {
        "title": "Software Engineer",
        "jobType": "full_time",
        "company": "AirAsia",
        "city": "Kuala Lumpur",
        "country": "Malaysia",
        "startMonth": "07",
        "startYear": "2019",
        "endMonth": "12",
        "endYear": "2020",
        "description": "Backend for the driver app."
      }
    ],
    "residenceAddress": {
      "line1": "12 Jalan Ampang",
      "line2": "Unit 4-A",
      "city": "Kuala Lumpur",
      "state": "Wilayah Persekutuan",
      "country": "Malaysia",
      "postalCode": "50450"
    },
    "permanentAddress": {
      "line1": "45 Jalan Merdeka",
      "line2": "Taman Melati",
      "city": "Johor Bahru",
      "state": "Johor",
      "country": "Malaysia",
      "postalCode": "80000"
    },
    "createdAt": "2026-05-14T09:21:08Z",
    "updatedAt": "2026-06-01T11:02:44Z"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • alumni.fetched
PUT/alumni/{id}Update an alumni record

Updates the editable profile fields. The 8 identity/academic fields (name, rollNo, batch, graduationYear, faculty/level/major) are NOT editable via the API. Any optional field you omit keeps its current value.

Path parameters

NameTypeDescription
idRequiredstringAlumni record ID.

Request bodyRequiredapplication/json

The profile fields to change.

FieldTypeDescription
emailOptionalstringMust be a valid email address.
phoneOptionalstringContact phone number.
cityOptionalstringCurrent city.
countryOptionalstringISO 3166-1 alpha-2 country CODE.
graduationCityOptionalstringCity where they graduated.
graduationCountryOptionalstringISO alpha-2 country CODE.
workCityOptionalstringCity where they currently work.
workCountryOptionalstringISO alpha-2 country CODE.
workStatusOptionalstringOne of the listed work statuses.
currentCompanyOptionalstringWhere they currently work.
headlineOptionalstringShort professional tagline.
linkedinUrlOptionalstringFull LinkedIn profile URL.
jobTypeOptionalstringOne of the listed job types.
genderOptionalstringOne of: female, male, non_binary, prefer_not_to_say.
dateOfBirthOptionalstringA real date in YYYY-MM-DD.
graduationDateOptionalstringA real date in YYYY-MM-DD.
profileImageUrlOptionalstringAvatar / profile photo URL.
notesOptionalstringFree-form admin note.
statusOptionalstringDirectory status.
experienceOptionalobject[]Replaces the experience array. Each entry's `country` is an ISO alpha-2 CODE.
Show each item's fields
titlestring
jobTypestring
companystring
citystring
countrystringOn create/update: ISO 3166-1 alpha-2 CODE. In responses: the country name.
startMonthstring
startYearstring
endMonthstring
endYearstring
descriptionstring
residenceAddressOptionalobjectA single OBJECT. Its `country` is an ISO alpha-2 CODE.
Show fields
line1stringAddress line 1.
line2stringAddress line 2.
streetstringStreet.
citystringCity.
statestringState / region.
countrystringISO 3166-1 alpha-2 country CODE.
postalCodestringPostal / ZIP code.
permanentAddressOptionalobjectA single OBJECT (the permanent address). Its `country` is an ISO alpha-2 CODE.
Show fields
line1stringAddress line 1.
line2stringAddress line 2.
streetstringStreet.
citystringCity.
statestringState / region.
countrystringISO 3166-1 alpha-2 country CODE.
postalCodestringPostal / ZIP code.

Example request

PUT /alumni/{id}
curl -X PUT https://api.alumniconnect.io/v1/alumni/{id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "aisyah.ibrahim@example.edu",
    "phone": "+60 12-345 6789",
    "city": "Kuala Lumpur",
    "country": "MY",
    "graduationCity": "Petaling Jaya",
    "graduationCountry": "MY",
    "workCity": "Johor Bahru",
    "workCountry": "MY",
    "workStatus": "working",
    "currentCompany": "Maybank",
    "headline": "Senior Engineer at Maybank",
    "linkedinUrl": "https://linkedin.com/in/aisyah",
    "jobType": "full_time_employee",
    "gender": "female",
    "dateOfBirth": "1997-03-14",
    "graduationDate": "2019-07-31",
    "profileImageUrl": "https://cdn.example.com/a.jpg",
    "notes": "Keynote speaker at 2025 homecoming.",
    "status": "active",
    "experience": [
      {
        "title": "Senior Software Engineer",
        "jobType": "full_time",
        "company": "Maybank",
        "city": "Johor Bahru",
        "country": "MY",
        "startMonth": "01",
        "startYear": "2021",
        "endMonth": "12",
        "endYear": "2024",
        "description": "Led the payments reliability team."
      }
    ],
    "residenceAddress": {
      "line1": "12 Jalan Ampang",
      "city": "Kuala Lumpur",
      "country": "MY",
      "postalCode": "50450"
    },
    "permanentAddress": {
      "line1": "45 Jalan Merdeka",
      "line2": "Taman Melati",
      "city": "Johor Bahru",
      "state": "Johor",
      "country": "MY",
      "postalCode": "80000"
    }
  }'

Example response200The updated alumni record.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "The updated alumni record.",
  "event": "alumni.updated",
  "action": "update",
  "data": {
    "id": "8f0a3c2e-91b4-4a7d-9d2e-1c5b6a0f7e33",
    "firstName": "Aisyah",
    "lastName": "Ibrahim",
    "email": "aisyah.ibrahim@example.edu",
    "phone": "+60 12-345 6789",
    "rollNo": "ENG-2019-0142",
    "batch": "2015-2019",
    "graduationYear": 2019,
    "faculty": "Faculty of Engineering",
    "degreeLevel": "Bachelor's",
    "degree": "Software Engineering",
    "city": "Kuala Lumpur",
    "country": "Malaysia",
    "graduationCity": "Petaling Jaya",
    "graduationCountry": "Malaysia",
    "workCity": "Johor Bahru",
    "workCountry": "Malaysia",
    "workStatus": "working",
    "currentCompany": "Maybank",
    "headline": "Senior Engineer at Maybank",
    "linkedinUrl": "https://linkedin.com/in/aisyah",
    "jobType": "full_time_employee",
    "gender": "female",
    "dateOfBirth": "1997-03-14",
    "graduationDate": "2019-07-31",
    "profileImageUrl": "https://cdn.example.com/a.jpg",
    "notes": "Keynote speaker at 2025 homecoming.",
    "status": "active",
    "experience": [
      {
        "title": "Senior Software Engineer",
        "jobType": "full_time",
        "company": "Maybank",
        "city": "Johor Bahru",
        "country": "Malaysia",
        "startMonth": "01",
        "startYear": "2021",
        "endMonth": "12",
        "endYear": "2024",
        "description": "Led the payments reliability team."
      },
      {
        "title": "Software Engineer",
        "jobType": "full_time",
        "company": "AirAsia",
        "city": "Kuala Lumpur",
        "country": "Malaysia",
        "startMonth": "07",
        "startYear": "2019",
        "endMonth": "12",
        "endYear": "2020",
        "description": "Backend for the driver app."
      }
    ],
    "residenceAddress": {
      "line1": "12 Jalan Ampang",
      "line2": "Unit 4-A",
      "city": "Kuala Lumpur",
      "state": "Wilayah Persekutuan",
      "country": "Malaysia",
      "postalCode": "50450"
    },
    "permanentAddress": {
      "line1": "45 Jalan Merdeka",
      "line2": "Taman Melati",
      "city": "Johor Bahru",
      "state": "Johor",
      "country": "Malaysia",
      "postalCode": "80000"
    },
    "createdAt": "2026-05-14T09:21:08Z",
    "updatedAt": "2026-06-01T11:02:44Z"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • alumni.updated
DELETE/alumni/{id}Delete an alumni record

Path parameters

NameTypeDescription
idRequiredstringAlumni record ID.

Example request

DELETE /alumni/{id}
curl -X DELETE https://api.alumniconnect.io/v1/alumni/{id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug"

Example response200Confirmation of deletion.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "Confirmation of deletion.",
  "event": "alumni.deleted",
  "action": "delete",
  "data": {
    "deleted": true,
    "id": "8f0a3c2e-…"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • alumni.deleted

Events

Events — list, fetch, create, update, delete

5 endpoints

GET/eventsList events

Paginated list of your events. Page with the x-page header; page size is the platform setting.

Example request

GET /events
curl https://api.alumniconnect.io/v1/events \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug"

Example response200A page of events.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "A page of events.",
  "event": "event.listed",
  "action": "read",
  "data": {
    "rows": [
      {
        "id": "3b1e77aa-4c2f-49d0-9a11-8e5c2d0b6f10",
        "title": "Batch of 2014 Reunion",
        "description": "An evening of reconnecting with the class of 2014.",
        "location": "Universiti Malaya, Main Hall",
        "startsAt": "2026-12-21T18:00:00Z",
        "endsAt": "2026-12-21T22:00:00Z",
        "status": "published",
        "capacity": 250,
        "isPaid": false,
        "priceCents": 0,
        "currency": "MYR",
        "venue": {
          "line1": "Main Hall",
          "city": "Kuala Lumpur",
          "state": "Wilayah Persekutuan",
          "country": "Malaysia"
        },
        "isPublic": true,
        "forWhom": "All alumni",
        "timezone": "Asia/Kuala_Lumpur",
        "createdAt": "2026-06-02T14:08:11Z"
      }
    ],
    "total": 128,
    "page": 1,
    "pageSize": 250,
    "timestamp": "2026-07-23T09:21:08.000Z",
    "timezone": "UTC"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • event.listed
POST/eventsCreate an event

Creates an event. Only `title` is required. Counts against your plan's events limit.

Request bodyRequiredapplication/json

The event to create.

FieldTypeDescription
titleRequiredstring1–200 chars.
descriptionRequiredstringUp to 5000 chars.
capacityRequiredintegerAttendee cap (0 = unlimited).
statusRequiredstringLifecycle status.
startsAtRequiredstringISO-8601 UTC start.
endsAtRequiredstringISO-8601 UTC end — must be after startsAt.
eventTypeRequiredstring"free" → price is 0; "paid" → price + currency required.
priceOptionalnumberRequired when eventType is "paid" (> 0). In major currency units (e.g. 25 = $25).
currencyOptionalstringThe event's currency — needed when eventType is "paid". One of the listed currency codes.
locationRequiredobjectVenue name + full address, all required. `country` is an ISO alpha-2 CODE.
Show fields
namestringVenue name.
line1stringAddress line 1.
line2stringAddress line 2.
citystringCity.
statestringState / region.
countrystringISO 3166-1 alpha-2 CODE.
visibilityRequiredstringWho can see it — public or private.
forWhomRequiredstringWho the event is for.
forWhomOtherOptionalstringRequired only when forWhom is "other".
timezoneRequiredstringThe event's display timezone (IANA name). startsAt/endsAt are still sent in UTC and stored in UTC — this is only the zone shown to viewers.

Example request

POST /events
curl -X POST https://api.alumniconnect.io/v1/events \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Batch of 2014 Reunion",
    "description": "An evening of reconnecting.",
    "capacity": 250,
    "status": "published",
    "startsAt": "2026-12-21T18:00:00Z",
    "endsAt": "2026-12-21T22:00:00Z",
    "eventType": "paid",
    "price": 25,
    "currency": "MYR",
    "location": {
      "name": "Dewan Tunku Canselor",
      "line1": "Universiti Malaya",
      "line2": "Jalan Universiti",
      "city": "Kuala Lumpur",
      "state": "Wilayah Persekutuan",
      "country": "MY"
    },
    "visibility": "public",
    "forWhom": "alumni",
    "forWhomOther": "Parents & guardians",
    "timezone": "Asia/Kuala_Lumpur"
  }'

Example response201The newly-created event.

Example response (201)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "The newly-created event.",
  "event": "event.created",
  "action": "create",
  "data": {
    "id": "3b1e77aa-4c2f-49d0-9a11-8e5c2d0b6f10",
    "title": "Batch of 2014 Reunion",
    "description": "An evening of reconnecting with the class of 2014.",
    "location": "Universiti Malaya, Main Hall",
    "startsAt": "2026-12-21T18:00:00Z",
    "endsAt": "2026-12-21T22:00:00Z",
    "status": "published",
    "capacity": 250,
    "isPaid": false,
    "priceCents": 0,
    "currency": "MYR",
    "venue": {
      "line1": "Main Hall",
      "city": "Kuala Lumpur",
      "state": "Wilayah Persekutuan",
      "country": "Malaysia"
    },
    "isPublic": true,
    "forWhom": "All alumni",
    "timezone": "Asia/Kuala_Lumpur",
    "createdAt": "2026-06-02T14:08:11Z"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • event.created
GET/events/{id}Fetch a single event

Returns a single event by its ID.

Path parameters

NameTypeDescription
idRequiredstringEvent ID.

Example request

GET /events/{id}
curl https://api.alumniconnect.io/v1/events/{id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug"

Example response200The matched event.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "The matched event.",
  "event": "event.fetched",
  "action": "read",
  "data": {
    "id": "3b1e77aa-4c2f-49d0-9a11-8e5c2d0b6f10",
    "title": "Batch of 2014 Reunion",
    "description": "An evening of reconnecting with the class of 2014.",
    "location": "Universiti Malaya, Main Hall",
    "startsAt": "2026-12-21T18:00:00Z",
    "endsAt": "2026-12-21T22:00:00Z",
    "status": "published",
    "capacity": 250,
    "isPaid": false,
    "priceCents": 0,
    "currency": "MYR",
    "venue": {
      "line1": "Main Hall",
      "city": "Kuala Lumpur",
      "state": "Wilayah Persekutuan",
      "country": "Malaysia"
    },
    "isPublic": true,
    "forWhom": "All alumni",
    "timezone": "Asia/Kuala_Lumpur",
    "createdAt": "2026-06-02T14:08:11Z"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • event.fetched
PUT/events/{id}Update an event

Path parameters

NameTypeDescription
idRequiredstringEvent ID.

Request bodyRequiredapplication/json

The event payload.

FieldTypeDescription
titleRequiredstring1–200 chars.
descriptionRequiredstringUp to 5000 chars.
capacityRequiredintegerAttendee cap (0 = unlimited).
statusRequiredstringLifecycle status.
startsAtRequiredstringISO-8601 UTC start.
endsAtRequiredstringISO-8601 UTC end — must be after startsAt.
eventTypeRequiredstring"free" → price is 0; "paid" → price + currency required.
priceOptionalnumberRequired when eventType is "paid" (> 0). In major currency units (e.g. 25 = $25).
currencyOptionalstringThe event's currency — needed when eventType is "paid". One of the listed currency codes.
locationRequiredobjectVenue name + full address, all required. `country` is an ISO alpha-2 CODE.
Show fields
namestringVenue name.
line1stringAddress line 1.
line2stringAddress line 2.
citystringCity.
statestringState / region.
countrystringISO 3166-1 alpha-2 CODE.
visibilityRequiredstringWho can see it — public or private.
forWhomRequiredstringWho the event is for.
forWhomOtherOptionalstringRequired only when forWhom is "other".
timezoneRequiredstringThe event's display timezone (IANA name). startsAt/endsAt are still sent in UTC and stored in UTC — this is only the zone shown to viewers.

Example request

PUT /events/{id}
curl -X PUT https://api.alumniconnect.io/v1/events/{id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Batch of 2014 Reunion",
    "description": "An evening of reconnecting.",
    "capacity": 250,
    "status": "published",
    "startsAt": "2026-12-21T18:00:00Z",
    "endsAt": "2026-12-21T22:00:00Z",
    "eventType": "paid",
    "price": 25,
    "currency": "MYR",
    "location": {
      "name": "Dewan Tunku Canselor",
      "line1": "Universiti Malaya",
      "line2": "Jalan Universiti",
      "city": "Kuala Lumpur",
      "state": "Wilayah Persekutuan",
      "country": "MY"
    },
    "visibility": "public",
    "forWhom": "alumni",
    "forWhomOther": "Parents & guardians",
    "timezone": "Asia/Kuala_Lumpur"
  }'

Example response200The updated event.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "The updated event.",
  "event": "event.updated",
  "action": "update",
  "data": {
    "id": "3b1e77aa-4c2f-49d0-9a11-8e5c2d0b6f10",
    "title": "Batch of 2014 Reunion",
    "description": "An evening of reconnecting with the class of 2014.",
    "location": "Universiti Malaya, Main Hall",
    "startsAt": "2026-12-21T18:00:00Z",
    "endsAt": "2026-12-21T22:00:00Z",
    "status": "published",
    "capacity": 250,
    "isPaid": false,
    "priceCents": 0,
    "currency": "MYR",
    "venue": {
      "line1": "Main Hall",
      "city": "Kuala Lumpur",
      "state": "Wilayah Persekutuan",
      "country": "Malaysia"
    },
    "isPublic": true,
    "forWhom": "All alumni",
    "timezone": "Asia/Kuala_Lumpur",
    "createdAt": "2026-06-02T14:08:11Z"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • event.updated
DELETE/events/{id}Delete an event

Path parameters

NameTypeDescription
idRequiredstringEvent ID.

Example request

DELETE /events/{id}
curl -X DELETE https://api.alumniconnect.io/v1/events/{id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug"

Example response200Confirmation of deletion.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "Confirmation of deletion.",
  "event": "event.deleted",
  "action": "delete",
  "data": {
    "deleted": true,
    "id": "8f0a3c2e-…"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • event.deleted

Jobs

Job board — list, fetch, create, update, delete

5 endpoints

GET/jobsList jobs

Paginated list of your job posts. Page with the x-page header; page size is the platform setting.

Example request

GET /jobs
curl https://api.alumniconnect.io/v1/jobs \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug"

Example response200A page of jobs.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "A page of jobs.",
  "event": "job.listed",
  "action": "read",
  "data": {
    "rows": [
      {
        "id": "9d4c1e02-7b8a-4f36-b0d2-6a1f9c3e5d84",
        "title": "Frontend Engineer",
        "company": "AirAsia",
        "location": "Kuala Lumpur",
        "jobType": "full_time",
        "jobTypes": [
          "full_time"
        ],
        "status": "open",
        "description": "Build alumni-facing React apps.",
        "applyUrl": "https://careers.airasia.com/123",
        "isRemote": false,
        "skills": [
          "React",
          "TypeScript"
        ],
        "forWhom": "junior",
        "isPaid": true,
        "salaryMinCents": 6000000,
        "salaryMaxCents": 12000000,
        "currency": "MYR",
        "salaryPeriod": "yearly",
        "deadline": "2026-09-30T23:59:59Z",
        "isPublic": true,
        "createdAt": "2026-06-02T14:08:11Z"
      }
    ],
    "total": 47,
    "page": 1,
    "pageSize": 250,
    "timestamp": "2026-07-23T09:21:08.000Z",
    "timezone": "UTC"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • job.listed
POST/jobsCreate a job

Creates a job posting. Only `title` is required. Counts against your plan's job-board limit.

Request bodyRequiredapplication/json

The job to create.

FieldTypeDescription
titleRequiredstring1–200 chars.
companyRequiredstringHiring company.
jobTypesRequiredstring[]MULTI-select employment types (≥ 1). First is the primary type.
statusRequiredstringLifecycle status.
cityRequiredstringCity.
stateOptionalstringState / region.
countryRequiredstringISO 3166-1 alpha-2 country CODE.
visibilityRequiredstringWho can see it — public or private.
forWhomRequiredstringWho the job is for.
forWhomOtherOptionalstringRequired only when forWhom is "other".
descriptionOptionalstringUp to 20000 chars.

Example request

POST /jobs
curl -X POST https://api.alumniconnect.io/v1/jobs \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Frontend Engineer",
    "company": "AirAsia",
    "jobTypes": [
      "full_time",
      "contract"
    ],
    "status": "open",
    "city": "Kuala Lumpur",
    "state": "Wilayah Persekutuan",
    "country": "MY",
    "visibility": "public",
    "forWhom": "junior",
    "forWhomOther": "Career switchers",
    "description": "Build alumni-facing React apps."
  }'

Example response201The newly-created job.

Example response (201)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "The newly-created job.",
  "event": "job.created",
  "action": "create",
  "data": {
    "id": "9d4c1e02-7b8a-4f36-b0d2-6a1f9c3e5d84",
    "title": "Frontend Engineer",
    "company": "AirAsia",
    "location": "Kuala Lumpur",
    "jobType": "full_time",
    "jobTypes": [
      "full_time"
    ],
    "status": "open",
    "description": "Build alumni-facing React apps.",
    "applyUrl": "https://careers.airasia.com/123",
    "isRemote": false,
    "skills": [
      "React",
      "TypeScript"
    ],
    "forWhom": "junior",
    "isPaid": true,
    "salaryMinCents": 6000000,
    "salaryMaxCents": 12000000,
    "currency": "MYR",
    "salaryPeriod": "yearly",
    "deadline": "2026-09-30T23:59:59Z",
    "isPublic": true,
    "createdAt": "2026-06-02T14:08:11Z"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • job.created
GET/jobs/{id}Fetch a single job

Returns a single job by its ID.

Path parameters

NameTypeDescription
idRequiredstringJob ID.

Example request

GET /jobs/{id}
curl https://api.alumniconnect.io/v1/jobs/{id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug"

Example response200The matched job.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "The matched job.",
  "event": "job.fetched",
  "action": "read",
  "data": {
    "id": "9d4c1e02-7b8a-4f36-b0d2-6a1f9c3e5d84",
    "title": "Frontend Engineer",
    "company": "AirAsia",
    "location": "Kuala Lumpur",
    "jobType": "full_time",
    "jobTypes": [
      "full_time"
    ],
    "status": "open",
    "description": "Build alumni-facing React apps.",
    "applyUrl": "https://careers.airasia.com/123",
    "isRemote": false,
    "skills": [
      "React",
      "TypeScript"
    ],
    "forWhom": "junior",
    "isPaid": true,
    "salaryMinCents": 6000000,
    "salaryMaxCents": 12000000,
    "currency": "MYR",
    "salaryPeriod": "yearly",
    "deadline": "2026-09-30T23:59:59Z",
    "isPublic": true,
    "createdAt": "2026-06-02T14:08:11Z"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • job.fetched
PUT/jobs/{id}Update a job

Path parameters

NameTypeDescription
idRequiredstringJob ID.

Request bodyRequiredapplication/json

The job payload.

FieldTypeDescription
titleRequiredstring1–200 chars.
companyRequiredstringHiring company.
jobTypesRequiredstring[]MULTI-select employment types (≥ 1). First is the primary type.
statusRequiredstringLifecycle status.
cityRequiredstringCity.
stateOptionalstringState / region.
countryRequiredstringISO 3166-1 alpha-2 country CODE.
visibilityRequiredstringWho can see it — public or private.
forWhomRequiredstringWho the job is for.
forWhomOtherOptionalstringRequired only when forWhom is "other".
descriptionOptionalstringUp to 20000 chars.

Example request

PUT /jobs/{id}
curl -X PUT https://api.alumniconnect.io/v1/jobs/{id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Frontend Engineer",
    "company": "AirAsia",
    "jobTypes": [
      "full_time",
      "contract"
    ],
    "status": "open",
    "city": "Kuala Lumpur",
    "state": "Wilayah Persekutuan",
    "country": "MY",
    "visibility": "public",
    "forWhom": "junior",
    "forWhomOther": "Career switchers",
    "description": "Build alumni-facing React apps."
  }'

Example response200The updated job.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "The updated job.",
  "event": "job.updated",
  "action": "update",
  "data": {
    "id": "9d4c1e02-7b8a-4f36-b0d2-6a1f9c3e5d84",
    "title": "Frontend Engineer",
    "company": "AirAsia",
    "location": "Kuala Lumpur",
    "jobType": "full_time",
    "jobTypes": [
      "full_time"
    ],
    "status": "open",
    "description": "Build alumni-facing React apps.",
    "applyUrl": "https://careers.airasia.com/123",
    "isRemote": false,
    "skills": [
      "React",
      "TypeScript"
    ],
    "forWhom": "junior",
    "isPaid": true,
    "salaryMinCents": 6000000,
    "salaryMaxCents": 12000000,
    "currency": "MYR",
    "salaryPeriod": "yearly",
    "deadline": "2026-09-30T23:59:59Z",
    "isPublic": true,
    "createdAt": "2026-06-02T14:08:11Z"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • job.updated
DELETE/jobs/{id}Delete a job

Path parameters

NameTypeDescription
idRequiredstringJob ID.

Example request

DELETE /jobs/{id}
curl -X DELETE https://api.alumniconnect.io/v1/jobs/{id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug"

Example response200Confirmation of deletion.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "Confirmation of deletion.",
  "event": "job.deleted",
  "action": "delete",
  "data": {
    "deleted": true,
    "id": "8f0a3c2e-…"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • job.deleted

Announcements

Announcements — list, fetch, create, update, delete

5 endpoints

GET/announcementsList announcements

Paginated list of your announcements. Page with the x-page header; page size is the platform setting.

Example request

GET /announcements
curl https://api.alumniconnect.io/v1/announcements \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug"

Example response200A page of announcements.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "A page of announcements.",
  "event": "announcement.listed",
  "action": "read",
  "data": {
    "rows": [
      {
        "id": "c7e2a1b9-3d64-4f80-a2c1-9b5e7d0f4a22",
        "subject": "Homecoming 2026 is live",
        "body": "Register now for the biggest reunion yet.",
        "status": "sent",
        "isPublic": true,
        "forWhom": "All alumni",
        "audienceMode": "all",
        "createdAt": "2026-06-02T14:08:11Z"
      }
    ],
    "total": 19,
    "page": 1,
    "pageSize": 250,
    "timestamp": "2026-07-23T09:21:08.000Z",
    "timezone": "UTC"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • announcement.listed
POST/announcementsCreate an announcement

Creates an announcement. Only `subject` is required.

Request bodyRequiredapplication/json

The announcement to create.

FieldTypeDescription
subjectRequiredstring1–200 chars.
statusRequiredstringLifecycle status.
messageOptionalstringThe body. Up to 20000 chars.
visibilityRequiredstringWho can see it — public or private.
forWhomRequiredstringWho the announcement is for.
forWhomOtherOptionalstringRequired only when forWhom is "other".

Example request

POST /announcements
curl -X POST https://api.alumniconnect.io/v1/announcements \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Homecoming 2026 is live",
    "status": "sent",
    "message": "Register now for the biggest reunion yet.",
    "visibility": "public",
    "forWhom": "alumni",
    "forWhomOther": "Parents & guardians"
  }'

Example response201The newly-created announcement.

Example response (201)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "The newly-created announcement.",
  "event": "announcement.created",
  "action": "create",
  "data": {
    "id": "c7e2a1b9-3d64-4f80-a2c1-9b5e7d0f4a22",
    "subject": "Homecoming 2026 is live",
    "body": "Register now for the biggest reunion yet.",
    "status": "sent",
    "isPublic": true,
    "forWhom": "All alumni",
    "audienceMode": "all",
    "createdAt": "2026-06-02T14:08:11Z"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • announcement.created
GET/announcements/{id}Fetch a single announcement

Returns a single announcement by its ID.

Path parameters

NameTypeDescription
idRequiredstringAnnouncement ID.

Example request

GET /announcements/{id}
curl https://api.alumniconnect.io/v1/announcements/{id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug"

Example response200The matched announcement.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "The matched announcement.",
  "event": "announcement.fetched",
  "action": "read",
  "data": {
    "id": "c7e2a1b9-3d64-4f80-a2c1-9b5e7d0f4a22",
    "subject": "Homecoming 2026 is live",
    "body": "Register now for the biggest reunion yet.",
    "status": "sent",
    "isPublic": true,
    "forWhom": "All alumni",
    "audienceMode": "all",
    "createdAt": "2026-06-02T14:08:11Z"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • announcement.fetched
PUT/announcements/{id}Update an announcement

Path parameters

NameTypeDescription
idRequiredstringAnnouncement ID.

Request bodyRequiredapplication/json

The announcement payload.

FieldTypeDescription
subjectRequiredstring1–200 chars.
statusRequiredstringLifecycle status.
messageOptionalstringThe body. Up to 20000 chars.
visibilityRequiredstringWho can see it — public or private.
forWhomRequiredstringWho the announcement is for.
forWhomOtherOptionalstringRequired only when forWhom is "other".

Example request

PUT /announcements/{id}
curl -X PUT https://api.alumniconnect.io/v1/announcements/{id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Homecoming 2026 is live",
    "status": "sent",
    "message": "Register now for the biggest reunion yet.",
    "visibility": "public",
    "forWhom": "alumni",
    "forWhomOther": "Parents & guardians"
  }'

Example response200The updated announcement.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "The updated announcement.",
  "event": "announcement.updated",
  "action": "update",
  "data": {
    "id": "c7e2a1b9-3d64-4f80-a2c1-9b5e7d0f4a22",
    "subject": "Homecoming 2026 is live",
    "body": "Register now for the biggest reunion yet.",
    "status": "sent",
    "isPublic": true,
    "forWhom": "All alumni",
    "audienceMode": "all",
    "createdAt": "2026-06-02T14:08:11Z"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • announcement.updated
DELETE/announcements/{id}Delete an announcement

Path parameters

NameTypeDescription
idRequiredstringAnnouncement ID.

Example request

DELETE /announcements/{id}
curl -X DELETE https://api.alumniconnect.io/v1/announcements/{id} \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "x-university-slug: your-university-slug"

Example response200Confirmation of deletion.

Example response (200)
{
  "timestamp": "2026-06-02T14:08:11Z",
  "dateTime": "Mon, 02 Jun 2026 14:08:11 GMT",
  "message": "Confirmation of deletion.",
  "event": "announcement.deleted",
  "action": "delete",
  "data": {
    "deleted": true,
    "id": "8f0a3c2e-…"
  }
}

Responses

  • 403Forbidden — your plan is inactive / in trial / expired, doesn't include this feature, or you've hit the plan limit.

Events emitted

  • announcement.deleted