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 |
citystringcountrystringlatitudenumberlongitudenumbertimezonestringregionenumReturns 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. |
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 |
locationIdstringcitystringcountrystringtemperatureCnumberhumiditynumberwindSpeedKphnumberconditionenumobservedAtstringReturns 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. |
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
Collection endpoints accept field filters, comparison operators, text search, and deterministic sorting. Plain field=value remains an equality filter.
field=valuestring | optional | Equality filter for a defined field. |
field[ne]string | optional | Exclude records matching this value. |
field[in]string | optional | Comma-separated values for a field. |
field[gte]string | optional | Comparison operators work with number, date, and datetime fields. |
qstring | optional | Search string and enum fields. |
sortstring | optional | Sort by a field, createdAt, or updatedAt. |
GETGET /locations?status[in]=new,planned&votes[gte]=10&sort=-createdAtConventions
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. |
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. |
VALIDATION_ERROR | 400 | The request body failed schema validation. |
RATE_LIMITED | 429 | The project has reached its monthly request limit. |
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.