citystring- Required
- Yes
- Unique
- No
- Default
- None
- Enum
- None
- Notes
- Required on create. String value
Sample data used to demonstrate EndpointOS API product workflows. A read-only weather-intelligence API: current observations and supported locations, packaged behind keys, docs, and usage limits.
This documentation is generated from the project schema in EndpointOS. It shows the public method surface, authentication model, request schemas, response contracts, errors, pagination, usage limits, and OpenAPI export.
Quickstart
Use a project API key with the base URL and one of the generated resource paths. EndpointOS never displays private API keys in public documentation.
Authorization: Bearer sapi_live_xxxxxxxx or x-api-key./locationscurl "https://endpointos.dev/api/public/endpointos-demo/weather-intelligence/locations?limit=20&offset=0" \
-H "Authorization: Bearer sapi_live_xxxxxxxx"JSON envelope{
"data": [],
"pagination": {
"limit": 20,
"offset": 0,
"total": 0
}
}Authentication
Every public request requires an EndpointOS API key. Key permissions are checked first, then each resource access mode decides which generated methods are exposed.
| Header | Value | Use when |
|---|---|---|
Authorization | Bearer sapi_live_xxxxxxxx | Recommended for server-to-server calls. |
x-api-key | sapi_test_xxxxxxxx | Useful for curl examples and simple clients. |
Either format worksAuthorization: Bearer sapi_live_xxxxxxxxx-api-key: sapi_test_xxxxxxxxBase URL
All endpoints below are relative to this base URL. The username and project slug are part of the namespace so different builders can publish APIs with the same project name without collisions.
Resource behavior
Each resource controls its public method surface. API key permissions still apply, but a resource can intentionally expose fewer methods for dataset, lookup, or intake APIs.
Read/write
GET, POST, PATCH, DELETEManaged APIs that need the full record lifecycle.Read-only
GETPublic datasets, reporting feeds, lookup APIs, and partner data products.Write-only
POSTLead capture, form submissions, events, and private intake APIs.| Field | Type | Required | Unique | Default | Enum values | Notes |
|---|---|---|---|---|---|---|
city | string | Yes | No | None | None | Required on create. String value |
country | string | Yes | No | None | None | Required on create. String value |
latitude | number | No | No | None | None | Finite numeric value |
longitude | number | No | No | None | None | Finite numeric value |
timezone | string | No | No | None | None | String value |
region | enum | No | No | None | americas, emea, apac | Must match one enum value |
citystringcountrystringlatitudenumberlongitudenumbertimezonestringregionenumEvery record response also includes the server-managed id, createdAt, and updatedAt fields shown in the response example below.
Returns non-deleted records with pagination, filters, search, and sorting.
This endpoint does not accept a request body.
200OK | success | Request succeeded and returned a JSON response. |
400Validation error | client | A filter, sort, or search parameter is malformed or unsupported by this resource's data source. |
401Unauthorized | client | Missing or invalid API key. |
429Rate limited | client | The project reached its monthly request limit. |
GET /locationscurl "https://endpointos.dev/api/public/endpointos-demo/weather-intelligence/locations" \
-H "Authorization: Bearer sapi_live_xxxxxxxx"200 OK{
"data": [
{
"id": "rec_abc123",
"city": "San Francisco",
"country": "United States",
"latitude": 47.3769,
"longitude": 8.5417,
"timezone": "Example",
"region": "americas",
"createdAt": "2026-05-11T10:30:00.000Z",
"updatedAt": "2026-05-11T10:30:00.000Z"
}
],
"pagination": {
"limit": 20,
"offset": 0,
"total": 1
}
}Consistent error object{
"error": {
"code": "UNAUTHORIZED",
"message": "A valid EndpointOS API key is required.",
"details": {}
}
}Returns one non-deleted record by id.
This endpoint does not accept a request body.
200OK | success | Request succeeded and returned a JSON response. |
401Unauthorized | client | Missing or invalid API key. |
404Not found | client | The record id does not exist or was soft-deleted. |
429Rate limited | client | The project reached its monthly request limit. |
GET /locations/{id}curl "https://endpointos.dev/api/public/endpointos-demo/weather-intelligence/locations/rec_abc123" \
-H "Authorization: Bearer sapi_live_xxxxxxxx"200 OK{
"data": {
"id": "rec_abc123",
"city": "Berlin",
"country": "Germany",
"latitude": 47.3769,
"longitude": 8.5417,
"timezone": "Example",
"region": "americas",
"createdAt": "2026-05-11T10:30:00.000Z",
"updatedAt": "2026-05-11T10:42:00.000Z"
}
}Consistent error object{
"error": {
"code": "RECORD_NOT_FOUND",
"message": "Record not found.",
"details": {
"id": "rec_abc123"
}
}
}| Field | Type | Required | Unique | Default | Enum values | Notes |
|---|---|---|---|---|---|---|
locationId | string | Yes | No | None | None | Required on create. String value |
city | string | Yes | No | None | None | Required on create. String value |
country | string | Yes | No | None | None | Required on create. String value |
temperatureC | number | Yes | No | None | None | Required on create. Finite numeric value |
humidity | number | No | No | None | None | Finite numeric value |
windSpeedKph | number | No | No | None | None | Finite numeric value |
condition | enum | No | No | None | clear, partly_cloudy, cloudy, rain, snow, fog, thunderstorm | Must match one enum value |
observedAt | string | No | No | None | None | String value |
locationIdstringcitystringcountrystringtemperatureCnumberhumiditynumberwindSpeedKphnumberconditionenumobservedAtstringEvery record response also includes the server-managed id, createdAt, and updatedAt fields shown in the response example below.
Returns non-deleted records with pagination, filters, search, and sorting.
This endpoint does not accept a request body.
200OK | success | Request succeeded and returned a JSON response. |
400Validation error | client | A filter, sort, or search parameter is malformed or unsupported by this resource's data source. |
401Unauthorized | client | Missing or invalid API key. |
429Rate limited | client | The project reached its monthly request limit. |
GET /current-weathercurl "https://endpointos.dev/api/public/endpointos-demo/weather-intelligence/current-weather" \
-H "Authorization: Bearer sapi_live_xxxxxxxx"200 OK{
"data": [
{
"id": "rec_abc123",
"locationId": "rec_abc123",
"city": "San Francisco",
"country": "United States",
"temperatureC": 21,
"humidity": 64,
"windSpeedKph": 12,
"condition": "clear",
"observedAt": "Example",
"createdAt": "2026-05-11T10:30:00.000Z",
"updatedAt": "2026-05-11T10:30:00.000Z"
}
],
"pagination": {
"limit": 20,
"offset": 0,
"total": 1
}
}Consistent error object{
"error": {
"code": "UNAUTHORIZED",
"message": "A valid EndpointOS API key is required.",
"details": {}
}
}Returns one non-deleted record by id.
This endpoint does not accept a request body.
200OK | success | Request succeeded and returned a JSON response. |
401Unauthorized | client | Missing or invalid API key. |
404Not found | client | The record id does not exist or was soft-deleted. |
429Rate limited | client | The project reached its monthly request limit. |
GET /current-weather/{id}curl "https://endpointos.dev/api/public/endpointos-demo/weather-intelligence/current-weather/rec_abc123" \
-H "Authorization: Bearer sapi_live_xxxxxxxx"200 OK{
"data": {
"id": "rec_abc123",
"locationId": "rec_def456",
"city": "Berlin",
"country": "United States",
"temperatureC": 21,
"humidity": 64,
"windSpeedKph": 12,
"condition": "clear",
"observedAt": "Example",
"createdAt": "2026-05-11T10:30:00.000Z",
"updatedAt": "2026-05-11T10:42:00.000Z"
}
}Consistent error object{
"error": {
"code": "RECORD_NOT_FOUND",
"message": "Record not found.",
"details": {
"id": "rec_abc123"
}
}
}Conventions
List endpoints support limit and offset. The default limit is 20 and the maximum limit is 100.
limitnumber | optional | Page size. Defaults to 20 and caps at 100. |
offsetnumber | optional | Zero-based offset for the first returned record. |
Paginated{
"data": [
{
"id": "rec_abc123",
"title": "Dark mode",
"createdAt": "2026-05-11T10:30:00.000Z",
"updatedAt": "2026-05-11T10:30:00.000Z"
}
],
"pagination": {
"limit": 20,
"offset": 0,
"total": 1
}
}Conventions
What a collection endpoint accepts depends on where its data lives. The table below is generated from what each resource\u2019s data source actually implements, so a control listed here is one the API will honour, and a control missing from it returns 400 UNSUPPORTED_QUERY rather than quietly ignoring you.
/locations (EndpointOS managed)field=valuestring | optional | Equality filter. Any defined field. |
field[ne]string | optional | Exclude records matching this value. |
field[in]string | optional | Comma-separated list of values. |
field[gt]string | optional | Greater than. Number, date and datetime fields. |
field[gte]string | optional | Greater than or equal. |
field[lt]string | optional | Less than. |
field[lte]string | optional | Less than or equal. |
qstring | optional | Search string and enum fields. |
sortstring | optional | Sort by a field, createdAt, or updatedAt. |
limitinteger | optional | Page size, up to 100. |
offsetinteger | optional | Records to skip. |
/current-weather (EndpointOS managed)field=valuestring | optional | Equality filter. Any defined field. |
field[ne]string | optional | Exclude records matching this value. |
field[in]string | optional | Comma-separated list of values. |
field[gt]string | optional | Greater than. Number, date and datetime fields. |
field[gte]string | optional | Greater than or equal. |
field[lt]string | optional | Less than. |
field[lte]string | optional | Less than or equal. |
qstring | optional | Search string and enum fields. |
sortstring | optional | Sort by a field, createdAt, or updatedAt. |
limitinteger | optional | Page size, up to 100. |
offsetinteger | optional | Records to skip. |
GETGET /locations?city[in]=value1,value2&latitude[gte]=10&limit=20Conventions
EndpointOS returns stable error codes so clients can handle validation, auth, missing records, and usage limits without parsing prose.
| Code | Status | Meaning |
|---|---|---|
UNAUTHORIZED | 401 | Missing, malformed, or invalid API key. |
FORBIDDEN | 403 | The API key cannot perform this operation. |
PROJECT_NOT_FOUND | 404 | The project slug does not resolve to an API. |
API_VERSION_NOT_FOUND | 404 | The requested API version does not exist. |
API_CONTRACT_NOT_PUBLISHED | 404 | The API contract for this version has not been published. |
BREAKING_CHANGE_REQUIRES_VERSION | 400 | The change is breaking and requires publishing a new API version. |
RESOURCE_NOT_FOUND | 404 | The resource slug does not exist in the project. |
RECORD_NOT_FOUND | 404 | The record id does not exist or was deleted. |
PROJECT_ARCHIVED | 503 | The project is currently archived by its owner. |
PROJECT_PAUSED | 503 | The project is paused because the workspace plan no longer covers it. |
VALIDATION_ERROR | 400 | The request body failed schema validation. |
PAYLOAD_TOO_LARGE | 413 | The request body is larger than the size limit. Send fewer or smaller fields, or split the write across several requests. |
RATE_LIMITED | 429 | The project has reached its monthly request limit. |
STORAGE_LIMIT_REACHED | 413 | The project or workspace storage limit has been reached. |
QUERY_TOO_BROAD | 413 | The filtered or searched result set is too large for ad-hoc filtering. |
UNSUPPORTED_QUERY | 400 | This resource's data source cannot honour part of the query (a filter operator, a filter field, sort, or search). The error details name what it does support. |
WRITE_NOT_SUPPORTED | 405 | This resource's data source does not implement this write. Read-only sources such as BigQuery accept GET only. The Allow header lists the methods that do work, and the error details name the writes the source does support. |
INTERNAL_ERROR | 500 | EndpointOS could not complete the request. |
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Field 'title' is required.",
"details": {
"field": "title"
}
}
}Conventions
EndpointOS counts public API requests per project each month. When the project reaches its limit, the API returns 429 RATE_LIMITED.
429 RATE_LIMITED{
"error": {
"code": "RATE_LIMITED",
"message": "Monthly request limit exceeded.",
"details": {
"limit": 100000,
"resetAt": "2026-06-01T00:00:00.000Z"
}
}
}Validation policy
EndpointOS rejects fields that are not defined on the resource schema. This keeps generated APIs predictable and prevents accidental writes to undeclared data.
Developer portal
Want to call this API? Send the owner an access request. If approved, they'll issue you an API key and a private link to see your usage.