Skip to main content

The Opportunity Object

Opportunities cover both club roles (internships, mentorship, member teams) and external job postings imported in bulk. The website shows only the subset flagged with website_viewable.

THE OPPORTUNITY OBJECT
{
"id": "7a3d9c21-88bf-4a10-b0c9-6d2e5f1a4e77",
"title": "Intern",
"description": "Gain hands-on experience by working under a director, with the opportunity to grow into an officer role.",
"link_url": "https://forms.gle/DZ5kgJWWuPsxHFBs8",
"category": "Club Role",
"icon_url": "/assets/opportunities/intern.svg",
"term": "Spring 2026",
"opens_on": "2026-01-05",
"closes_on": "2026-02-01",
"expires_at": null,
"display_order": 1,
"website_viewable": true,
"is_active": true,
"created_at": "2026-09-03T18:24:11Z",
"created_by": "c4e11505-5555-42f9-9f48-678a0abf55c6",
"updated_at": "2026-09-03T18:24:11Z",
"updated_by": "c4e11505-5555-42f9-9f48-678a0abf55c6"
}

Attributes


id string

A UUID for the object.


title string

The opportunity's title.


description string nullable

The opportunity's description.


link_url string nullable

The external URL applicants use to apply. Exactly one of link_url or linked_form_id is set.


linked_form_id string nullable

A UUID referencing an internal form to route applicants to, instead of an external link_url.


category string nullable

The card type. One of Internship, Club Role, Project, Sponsor, Job, or Other.


icon_url string nullable

A URL to the icon shown alongside the opportunity.


term string nullable

The application window as shown on the website card (e.g. Spring 2026).


opens_on string nullable

The date applications open.


closes_on string nullable

The date applications close.


expires_at string nullable

Internal auto-hide date. Rows past this timestamp drop out of the active_opportunities view.


display_order integer

Controls the order opportunities are returned in. Lower values come first.


website_viewable boolean

Whether the opportunity may be shown on the public website. Defaults to false, so nothing becomes public by accident.


is_active boolean

Whether the opportunity is live in the admin app at all. Distinct from website_viewable.


created_at string

When the opportunity was created.


created_by string nullable

A UUID that references the User who created the opportunity.


updated_at string

When the opportunity was last updated.


updated_by string nullable

A UUID that references the User who last updated the opportunity.

Job posting attributes

Bulk-imported job postings carry additional columns that this API returns and accepts, but which are normally maintained by the admin app's CSV importer: company_name, location, employment_type, salary, field, source, and external_id.

employment_type is constrained to Full-time, Part-time, Internship, or Contract. source is constrained to manual or csv_import and defaults to manual. external_id is a unique dedup key for re-imports.

The notify_members and notified_at columns are deliberately not exposed by this API. They drive member notification dispatch, so they are managed by the admin app rather than through general CRUD.