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. An [MCP server](/developers/mcp) exposes the same catalogue to AI agents.

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

    Send your API key as a bearer token: Authorization: Bearer ca_live_…

    Read endpoints also accept anonymous requests, but those are limited per IP address and do not draw down your monthly allowance.

    On this page

    • GET/api/v1/opportunities
    • POST/api/v1/opportunities
    • GET/api/v1/jobs
    • GET/api/v1/opportunities/{id}
    • GET/api/v1/openapi.json

    Endpoints

    GET
    /api/v1/opportunities
    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.
    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.
    400ApiErrorThe query string failed validation.
    429ApiErrorThe client exceeded the rate limit for this endpoint.
    500ApiErrorThe request could not be completed.
    POST
    /api/v1/opportunities
    Requires API key
    Submit an opportunity for review.
    Reserved for a future release. The endpoint currently responds with 501 Not Implemented.

    Parameters

    This operation takes no parameters.

    Request body

    application/json encoded as OpportunitySubmission

    Responses

    StatusBodyDescription
    202OpportunitySubmissionAcceptedThe submission was accepted and queued for review.
    400ApiErrorThe submission failed validation.
    401ApiErrorThe request carried no valid API credential.
    429ApiErrorThe client exceeded the rate limit for this endpoint.
    501ApiErrorSubmissions are not accepted yet.
    GET
    /api/v1/jobs
    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.
    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.
    400ApiErrorThe query string failed validation.
    429ApiErrorThe client exceeded the rate limit for this endpoint.
    500ApiErrorThe request could not be completed.
    GET
    /api/v1/opportunities/{id}
    Retrieve a single publicly listed opportunity.

    Parameters

    NameInTypeRequiredDescription
    idpathstring (uuid)YesOpportunity identifier.

    Responses

    StatusBodyDescription
    200OpportunityResponseThe requested opportunity.
    400ApiErrorThe identifier is not a valid UUID.
    404ApiErrorNo publicly listed opportunity matches the identifier.
    429ApiErrorThe client exceeded the rate limit for this endpoint.
    500ApiErrorThe request could not be completed.
    GET
    /api/v1/openapi.json
    Retrieve this OpenAPI document.

    Parameters

    This operation takes no parameters.

    Responses

    StatusBodyDescription
    200objectThe OpenAPI description of the public API.

    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—
    ApiErrorDetail
    Type: object
    FieldTypeRequiredDescription
    pathstringYesDotted path of the offending field.
    messagestringYesHuman readable explanation of the failure.
    ApiError
    Type: object
    FieldTypeRequiredDescription
    errorobjectYes—
    OpportunitySubmission
    Type: object
    FieldTypeRequiredDescription
    typejob | study | training | tender | otherYesOpportunity category.
    titlestringmin length 3 · max length 300YesOpportunity title.
    descriptionstringmin length 20 · max length 20000YesFull opportunity description.
    organisationNamestringmax length 200NoPublishing organisation name.
    locationstringmax length 200NoLocation for the opportunity.
    deadlinestring (date-time)NoApplication deadline.
    applicationUrlstring (uri)NoCanonical link to the original listing.
    tagsstring[]max items 20NoFree-form tags.
    OpportunitySubmissionAccepted
    Type: object
    FieldTypeRequiredDescription
    idstring (uuid)YesIdentifier assigned to the submitted opportunity.
    statusstringYesSubmissions are created as pending and stay private until a reviewer approves them.
    Chance AI

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

    Quick Links

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

    Categories

    • Jobs
    • Bursaries
    • Training
    • Tenders
    • Community

    Stay Updated

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