FOR DEVELOPERS

OiAir API

Bring activity search to your website, app or agent. Read the same public information that families find on OiAir.

Public dataRead onlyJSON over HTTPS
Base URLhttps://oiair.com.br/api/v1

Overview

Public queries do not require an API key. They return published organization and group information without parents’ or children’s personal data.

This documentation covers catalog reads. Organization management, enrollment lists and request decisions require authorization and are outside this public API.

First query

Search for an activity and limit the response. Use the returned IDs to read an organization or a specific publication.

Search drawing for age 6
curl --get 'https://oiair.com.br/api/v1/search' \
  --data-urlencode 'q=desenho' \
  --data-urlencode 'age=6' \
  --data-urlencode 'city=Florianópolis' \
  --data-urlencode 'limit=5' \
  --data-urlencode 'locale=en'

The contract describes this integration’s public endpoints. Use the fields and response codes it defines.

Endpoints

MethodPathReturns
GET/api/v1/searchOrdered search with filters and pagination.
GET/api/v1/catalogPublic organization catalog.
GET/api/v1/organizations/{organizationId}An organization’s public profile and published groups.
GET/api/v1/offeringsCurrent publications; accepts organizationId, age, city, text and after.
GET/api/v1/offerings/{publicationId}A current publication identified by publicationId.
GET/api/v1/openapi.jsonOpenAPI contract for public reads.

Search and filters

Age, days and time in a search must match the same published group. Days use numbers from 0 (Sunday) to 6 (Saturday); multiple days mean “any of”.

ParameterUsage
qFree text: activity, group name or organization.
ageAge from 0 to 18, within the group’s inclusive age range.
city / neighborhoodThe location’s city and neighborhood.
daysComma-separated days, such as 2,4.
periodmanha (morning), tarde (afternoon) or noite (evening).
after17true for times from 17:00 onward.
localept-BR, ru, en or es for interface text.
limit / cursorUp to 50 results; reuse the cursor with the same filters.

Using the data

  • Keep organizationId, publicationId and version. Do not silently replace a changed or withdrawn group with another one.
  • Show the location and the selected group’s conditions. Do not reuse a price or schedule from another address.
  • Respect freshness.checkedAt and freshness.validUntil on publications. Read the publication again before directing the family to the form.
  • A published group and a form link do not confirm availability. The organization must confirm the request.
  • Search returns a ranked shortlist, not the whole catalog. Preserve unresolvedConstraints and resultScope; follow nextCursor when present. Do not claim an exhaustive count.

The OiAir form sends a request to the organization. Submitting it does not reserve a place. This read connection does not submit requests or confirm enrollment.

Responses and errors

Handle unavailable data explicitly. Do not fill in unknown conditions or reuse a withdrawn group.

HTTPUsage
400Invalid parameter or filter: correct the query.
404Organization or publication unavailable: search again.
409Catalog or version changed: discard the old cursor and query again.
410Cursor expired: restart the search.
503Search or catalog temporarily unavailable: try again later.

Integration and releases

See connection examples and release history on GitHub. Read the server metadata in the MCP Registry.

Next step

Building an agent? Use the MCP server to access the same data through tools.

MCP server