C
    Chance AI
    JobsBursariesTrainingTenders
    Sign in

    Integrate with Chance AI

    Developer portal

    • Getting started
    • API reference
    • MCP server
    • API keys

    Chance AI Public API

    v1.0.0

    Search and retrieve publicly listed opportunities.

    https://api.chance.africa
    View raw OpenAPI document
    Authentication

    Send your API key in the X-API-Key header:X-API-Key: ca_live_…

    Requests without a valid key are rejected with 401 Unauthorized.

    On this page

    • GET/api/v1/opportunities
    • GET/api/v1/jobs
    • GET/api/v1/search
    • GET/api/v1/stats
    • GET/api/v1/opportunities/{id}

    Endpoints

    GET
    /api/v1/opportunities
    Requires API key
    Search publicly listed opportunities.
    Returns a paginated page of approved opportunities.

    Parameters

    NameInTypeRequiredDescription
    queryquerystringmin length 1 · max length 200NoFree-text search phrase matched against title, description and tags.
    typequeryjob | study | training | tender | otherNoOpportunity category. Omit to search across every category.
    modequerykeyword | hybrid | enhancedNoSearch execution mode: 'keyword' for lexical matching, 'hybrid' for combined keyword and vector ranking, or 'enhanced' for multilingual and intent-enhanced matching. Defaults to 'hybrid'.
    categoryquerystringmin length 1 · max length 120NoSector or category label, for example 'Engineering' or 'Security Services'.
    locationquerystringmin length 1 · max length 120NoFree-text location filter matched against the opportunity location.
    provincequerystringmin length 1 · max length 120NoSouth African province filter, applied to tender listings.
    organOfStatequerystringmin length 1 · max length 120NoIssuing organ of state, applied to tender listings.
    postedFromquerystring (date-time)NoOnly include opportunities published on or after this instant.
    postedToquerystring (date-time)NoOnly include opportunities published on or before this instant.
    pagequeryintegermin 1 · max 200 · default 1NoOne-based page index.
    pageSizequeryintegermin 1 · max 100 · default 25NoNumber of records per page.

    Responses

    StatusBodyDescription
    200OpportunityListResponseA page of matching opportunities.
    401ApiErrorThe request carried no valid API key.
    422FastApiValidationErrorThe query string failed validation.
    429ApiErrorThe client exceeded the rate limit for this endpoint.
    500ApiErrorThe request could not be completed.
    GET
    /api/v1/jobs
    Requires API key
    Search publicly listed job opportunities.
    Returns a paginated page of approved job opportunities. Page size is requested with 'limit', not 'pageSize'.

    Parameters

    NameInTypeRequiredDescription
    queryquerystringmin length 1 · max length 200NoFree-text search phrase matched against title, description and tags.
    modequerykeyword | hybrid | enhancedNoSearch execution mode: 'keyword' for lexical matching, 'hybrid' for combined keyword and vector ranking, or 'enhanced' for multilingual and intent-enhanced matching. Defaults to 'hybrid'.
    categoryquerystringmin length 1 · max length 120NoSector or category label, for example 'Engineering' or 'Security Services'.
    locationquerystringmin length 1 · max length 120NoFree-text location filter matched against the opportunity location.
    provincequerystringmin length 1 · max length 120NoSouth African province filter, applied to tender listings.
    organOfStatequerystringmin length 1 · max length 120NoIssuing organ of state, applied to tender listings.
    postedFromquerystring (date-time)NoOnly include opportunities published on or after this instant.
    postedToquerystring (date-time)NoOnly include opportunities published on or before this instant.
    pagequeryintegermin 1 · max 200 · default 1NoOne-based page index.
    limitqueryintegermin 1 · max 100 · default 25NoNumber of job records per page.

    Responses

    StatusBodyDescription
    200OpportunityListResponseA page of matching job opportunities.
    401ApiErrorThe request carried no valid API key.
    422FastApiValidationErrorThe query string failed validation.
    429ApiErrorThe client exceeded the rate limit for this endpoint.
    500ApiErrorThe request could not be completed.
    GET
    /api/v1/search
    Requires API key
    Search publicly listed opportunities by relevance.
    Ranks approved opportunities against the search phrase using full-text and fuzzy title matching. Requires 'query'; use listOpportunities to browse without one.

    Parameters

    NameInTypeRequiredDescription
    typequeryjob | study | training | tender | otherNoOpportunity category. Omit to search across every category.
    categoryquerystringmin length 1 · max length 120NoSector or category label, for example 'Engineering' or 'Security Services'.
    locationquerystringmin length 1 · max length 120NoFree-text location filter matched against the opportunity location.
    provincequerystringmin length 1 · max length 120NoSouth African province filter, applied to tender listings.
    organOfStatequerystringmin length 1 · max length 120NoIssuing organ of state, applied to tender listings.
    postedFromquerystring (date-time)NoOnly include opportunities published on or after this instant.
    postedToquerystring (date-time)NoOnly include opportunities published on or before this instant.
    pagequeryintegermin 1 · max 200 · default 1NoOne-based page index.
    pageSizequeryintegermin 1 · max 100 · default 25NoNumber of records per page.
    queryquerystringmin length 1 · max length 200YesSearch phrase. Results are ordered by relevance against title and description rather than by publication date.

    Responses

    StatusBodyDescription
    200OpportunityListResponseA page of matching opportunities, most relevant first.
    401ApiErrorThe request carried no valid API key.
    422ApiError | FastApiValidationErrorThe query string failed validation.
    429ApiErrorThe client exceeded the rate limit for this endpoint.
    500ApiErrorThe request could not be completed.
    GET
    /api/v1/stats
    Requires API key
    Retrieve public opportunity catalogue statistics.
    Returns aggregate counts for approved public opportunities without exposing unpublished or suppressed records.

    Parameters

    This operation takes no parameters.

    Responses

    StatusBodyDescription
    200OpportunityStatsResponseA public opportunity catalogue statistics snapshot.
    401ApiErrorThe request carried no valid API key.
    429ApiErrorThe client exceeded the rate limit for this endpoint.
    500ApiErrorThe request could not be completed.
    GET
    /api/v1/opportunities/{id}
    Requires API key
    Retrieve a single publicly listed opportunity.

    Parameters

    NameInTypeRequiredDescription
    idpathstring (uuid)YesOpportunity identifier.

    Responses

    StatusBodyDescription
    200OpportunityResponseThe requested opportunity.
    400ApiErrorThe identifier is not a valid UUID.
    401ApiErrorThe request carried no valid API key.
    404ApiErrorNo publicly listed opportunity matches the identifier.
    429ApiErrorThe client exceeded the rate limit for this endpoint.
    500ApiErrorThe request could not be completed.

    Schemas

    PublicOpportunity
    Type: object
    FieldTypeRequiredDescription
    idstring (uuid)YesStable opportunity identifier.
    typejob | study | training | tender | otherYesOpportunity category.
    titlestringYesOpportunity title as published by the source.
    descriptionstringYesFull opportunity description.
    organisationNamestring | nullYesPublishing organisation name.
    locationstring | nullYesLocation as published by the source.
    deadlinestring (date-time) | nullYesApplication deadline. Null when the source published no deadline.
    statusstringYesPublication state. Only approved opportunities are returned by this API.
    tagsstring[]YesFree-form tags attached to the opportunity.
    salaryRangenumber[]YesLower and upper salary bounds in ZAR when the source published them.
    createdAtstring (date-time) | nullYesInstant the opportunity entered the catalogue.
    detailsJobOpportunityDetails | StudyOpportunityDetails | TrainingOpportunityDetails | TenderOpportunityDetails | nullYesCategory specific attributes. Null when the category carries no extra attributes.
    JobOpportunityDetails
    Type: object
    FieldTypeRequiredDescription
    salarynumber | nullYes—
    employmentTypestring | nullYes—
    experienceLevelstring | nullYes—
    skillsstring[]Yes—
    sectorstring | nullYes—
    categorystring | nullYes—
    StudyOpportunityDetails
    Type: object
    FieldTypeRequiredDescription
    institutionstring | nullYes—
    programmestring | nullYes—
    programmeLevelstring | nullYes—
    fundingAmountnumber | nullYes—
    requirementsstring | nullYes—
    TrainingOpportunityDetails
    Type: object
    FieldTypeRequiredDescription
    durationnumber | nullYes—
    formatstring | nullYes—
    prerequisitesstring | nullYes—
    pricenumber | nullYes—
    TenderOpportunityDetails
    Type: object
    FieldTypeRequiredDescription
    tenderNostring | nullYes—
    categorystring | nullYes—
    tenderTypestring | nullYes—
    organOfStatestring | nullYes—
    provincestring | nullYes—
    closingDatestring (date-time) | nullYes—
    listingUrlstring | nullYes—
    Pagination
    Type: object
    FieldTypeRequiredDescription
    pageintegerYesOne-based index of the returned page.
    pageSizeintegerYesNumber of records requested per page.
    totalintegerYesTotal number of matching opportunities.
    totalPagesintegerYesTotal number of pages available for this query.
    hasNextPagebooleanYesTrue when a further page of results exists.
    OpportunityListResponse
    Type: object
    FieldTypeRequiredDescription
    dataPublicOpportunity[]Yes—
    paginationPaginationYes—
    OpportunityResponse
    Type: object
    FieldTypeRequiredDescription
    dataPublicOpportunityYes—
    OpportunityStats
    Type: object
    FieldTypeRequiredDescription
    totalintegerYesTotal number of approved public opportunities.
    byTypeobjectYesApproved public opportunity counts keyed by opportunity category.
    nextDeadlinestring (date-time) | nullYesSoonest upcoming public opportunity deadline. Null when none is known.
    generatedAtstring (date-time)YesInstant the statistics snapshot was generated.
    OpportunityStatsResponse
    Type: object
    FieldTypeRequiredDescription
    dataOpportunityStatsYes—
    ApiErrorDetail
    Type: object
    FieldTypeRequiredDescription
    pathstringYesDotted path of the offending field.
    messagestringYesHuman readable explanation of the failure.
    ApiError
    Type: object
    FieldTypeRequiredDescription
    errorobjectYes—
    FastApiValidationIssue
    Type: object
    FieldTypeRequiredDescription
    typestringYes—
    locstring | number[]Yes—
    msgstringYes—
    inputunknownNo—
    ctxobjectNo—
    FastApiValidationError
    Type: object
    FieldTypeRequiredDescription
    detailFastApiValidationIssue[]Yes—
    Chance AI

    Your gateway to endless possibilities in Career, Education, and Business.

    Quick Links

    • Help Center
    • Developers
    • MCP Server
    • Privacy Policy
    • Terms of Service
    • Developers

    Categories

    • Jobs
    • Bursaries
    • Training
    • Tenders
    • Community

    Stay Updated

    © 2026 Chance AI by Chance.africa 🌍 . All rights reserved.