OpenAPI documentation for the public HTTP API for EasyStepsGO. It is written in OpenAPI 3 so tools can render reference docs and generate clients; the API itself follows the JSON:API specification (media type application/vnd.api+json, version 1.0). All operations listed here are served under /api/public-v1.
Authentication: Bearer token (Laravel Sanctum). Create it from the Organization Settings page in the EasyStepsGO web app
(app.easystepsgo.io/my-organization).
The token must have the public-api ability, and the authenticated user must be an administrator of that organization’s team.
Errors: Validation and domain errors use JSON:API error documents (errors[] with status, title, detail, optional source.pointer).
Note: lat / long on locations and similar decimals may appear as strings in JSON responses.
Paginated list of stakeholders for the authenticated organization.
| include | string Example: include=locations,custom-fields Comma-separated relationship paths to include in |
| sort | string Example: sort=name Sort fields (comma-separated). Registered sortable attributes include |
| page[number] | integer >= 1 Page number for stakeholder index (JSON:API |
| page[size] | integer >= 1 Page size for stakeholder index. |
| filter[id] | string Comma-separated stakeholder ids to filter the index ( |
{- "jsonapi": {
- "version": "1.0"
}, - "data": [
- {
- "type": "stakeholders",
- "id": "string",
- "attributes": {
- "name": "string",
- "email": "string",
- "organization_name": "string",
- "role": "string",
- "stakeholder_type": "string",
- "created_by": "string",
- "category": "string",
- "is_unlisted": true,
- "consent": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": { }
}
], - "included": [
- { }
], - "links": { },
- "meta": { }
}Creates a stakeholder. Optional custom_fields in attributes creates nested custom field rows.
If custom_fields was provided, the 201 response typically includes those resources under included
(effective include=custom-fields is merged server-side). You may also pass include for other relationships
(e.g. locations); server merges custom-fields when applicable.
| include | string Example: include=locations,custom-fields Comma-separated relationship paths to include in |
required | object |
{- "data": {
- "type": "stakeholders",
- "attributes": {
- "email": "user@example.com",
- "name": "string",
- "role": "string",
- "organization_name": "string",
- "stakeholder_type": "Internal",
- "is_unlisted": true,
- "consent": true,
- "custom_fields": [
- {
- "name": "string",
- "field_type": "text",
- "value": "string"
}
]
}, - "relationships": {
- "category": {
- "data": {
- "type": "string",
- "id": "string"
}
}
}
}
}{- "jsonapi": {
- "version": "1.0"
}, - "data": {
- "type": "stakeholders",
- "id": "string",
- "attributes": {
- "name": "string",
- "email": "string",
- "organization_name": "string",
- "role": "string",
- "stakeholder_type": "string",
- "created_by": "string",
- "category": "string",
- "is_unlisted": true,
- "consent": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": { }
}, - "included": [
- { }
]
}| stakeholder required | string Stakeholder id (JSON:API resource id). |
| include | string Example: include=locations,custom-fields Comma-separated relationship paths to include in |
{- "jsonapi": {
- "version": "1.0"
}, - "data": {
- "type": "stakeholders",
- "id": "string",
- "attributes": {
- "name": "string",
- "email": "string",
- "organization_name": "string",
- "role": "string",
- "stakeholder_type": "string",
- "created_by": "string",
- "category": "string",
- "is_unlisted": true,
- "consent": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": { }
}, - "included": [
- { }
]
}The custom_fields attribute must not be sent on update (422 if present).
| stakeholder required | string Stakeholder id (JSON:API resource id). |
| include | string Example: include=locations,custom-fields Comma-separated relationship paths to include in |
required | object |
{- "data": {
- "type": "stakeholders",
- "id": "string",
- "attributes": { }
}
}{- "jsonapi": {
- "version": "1.0"
}, - "data": {
- "type": "stakeholders",
- "id": "string",
- "attributes": {
- "name": "string",
- "email": "string",
- "organization_name": "string",
- "role": "string",
- "stakeholder_type": "string",
- "created_by": "string",
- "category": "string",
- "is_unlisted": true,
- "consent": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": { }
}, - "included": [
- { }
]
}Full stakeholder-locations resources for this stakeholder.
| stakeholder required | string Stakeholder id (JSON:API resource id). |
{- "jsonapi": {
- "version": "1.0"
}, - "data": [
- {
- "type": "stakeholder-locations",
- "id": "string",
- "attributes": {
- "lat": "string",
- "long": "string",
- "address": "string",
- "country": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": { }
}
]
}Resource identifier objects for the locations relationship (type + id only).
| stakeholder required | string Stakeholder id (JSON:API resource id). |
{- "jsonapi": {
- "version": "1.0"
}, - "data": [
- {
- "type": "string",
- "id": "string"
}
], - "links": { }
}Full custom-fields resources linked to this stakeholder.
| stakeholder required | string Stakeholder id (JSON:API resource id). |
{- "jsonapi": {
- "version": "1.0"
}, - "data": [
- {
- "type": "custom-fields",
- "id": "string",
- "attributes": {
- "name": "string",
- "value": "string",
- "field_type": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
]
}Resource identifier objects for the custom-fields relationship.
| stakeholder required | string Stakeholder id (JSON:API resource id). |
{- "jsonapi": {
- "version": "1.0"
}, - "data": [
- {
- "type": "string",
- "id": "string"
}
], - "links": { }
}Full stakeholder-categories resource linked to this stakeholder.
| stakeholder required | string Stakeholder id (JSON:API resource id). |
{- "jsonapi": {
- "version": "1.0"
}, - "data": {
- "type": "stakeholder-categories",
- "id": "string",
- "attributes": {
- "title": "string"
}
}
}Resource identifier object for the category relationship.
| stakeholder required | string Stakeholder id (JSON:API resource id). |
{- "jsonapi": {
- "version": "1.0"
}, - "data": {
- "type": "string",
- "id": "string"
}, - "links": { }
}Global stakeholder category lookup (read-only). Use for resolving category on stakeholders
and for include=category on stakeholder reads.
Global lookup values for stakeholder category (read-only). Supports JSON:API pagination
(page[number], page[size]) and filter[id] (comma-separated ids).
| page[number] | integer >= 1 Page number for stakeholder index (JSON:API |
| page[size] | integer >= 1 Page size for stakeholder index. |
| filter[id] | string Comma-separated stakeholder category ids to filter the index ( |
| sort | string Example: sort=title Sort fields (comma-separated). Registered sortable attributes includes |
{- "jsonapi": {
- "version": "1.0"
}, - "data": [
- {
- "type": "stakeholder-categories",
- "id": "string",
- "attributes": {
- "title": "string"
}
}
], - "links": { }
}| stakeholder_category required | string Stakeholder category id (JSON:API resource id). |
{- "jsonapi": {
- "version": "1.0"
}, - "data": {
- "type": "stakeholder-categories",
- "id": "string",
- "attributes": {
- "title": "string"
}
}
}Create, read, and delete locations (geocoding on create). No collection index or PATCH update.
Requires attributes.address (non-empty after trim). Server geocodes the address and sets
lat, long, country, and meta; clients must not send those fields (they are rejected).
required | object |
{- "data": {
- "type": "stakeholder-locations",
- "attributes": {
- "address": "string"
}, - "relationships": {
- "stakeholder": {
- "data": {
- "type": "string",
- "id": "string"
}
}
}
}
}{- "jsonapi": {
- "version": "1.0"
}, - "data": {
- "type": "stakeholder-locations",
- "id": "string",
- "attributes": {
- "lat": "string",
- "long": "string",
- "address": "string",
- "country": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": { }
}
}| stakeholder_location required | string Stakeholder location id. |
{- "jsonapi": {
- "version": "1.0"
}, - "data": {
- "type": "stakeholder-locations",
- "id": "string",
- "attributes": {
- "lat": "string",
- "long": "string",
- "address": "string",
- "country": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": { }
}
}Returns the parent stakeholder as the primary data resource.
| stakeholder_location required | string Stakeholder location id. |
{- "jsonapi": {
- "version": "1.0"
}, - "data": {
- "type": "stakeholders",
- "id": "string",
- "attributes": {
- "name": "string",
- "email": "string",
- "organization_name": "string",
- "role": "string",
- "stakeholder_type": "string",
- "created_by": "string",
- "category": "string",
- "is_unlisted": true,
- "consent": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "relationships": { }
}, - "included": [
- { }
]
}Scoped to custom fields whose organization_id matches the token’s organization.
| custom_field required | string Custom field id. |
{- "jsonapi": {
- "version": "1.0"
}, - "data": {
- "type": "custom-fields",
- "id": "string",
- "attributes": {
- "name": "string",
- "value": "string",
- "field_type": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}Updatable attributes: name, value (partial PATCH supported per JSON:API merge semantics).
field_type is read-only; sending a different field_type in the request document yields 422.
For field_type: file, a new non-empty value must refer to an existing path on the S3 disk.
| custom_field required | string Custom field id. |
required | object |
{- "data": {
- "type": "custom-fields",
- "id": "string",
- "attributes": {
- "name": "string",
- "value": "string"
}
}
}{- "jsonapi": {
- "version": "1.0"
}, - "data": {
- "type": "custom-fields",
- "id": "string",
- "attributes": {
- "name": "string",
- "value": "string",
- "field_type": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}