Documentation for the public HTTP API for EasyStepsGO. The API 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. Create it from the Organization Settings page in the EasyStepsGO web app (app.easystepsgo.io/my-organization).
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.
File custom fields: upload each file first withPOST /public-v1/stakeholders/-actions/custom-field-file-upload (multipart field file), then include an entry with
field_type: file and value set to the returned meta.data.path. See that operation and schema
StakeholderAttributes.custom_fields for validation rules, org scoping, and 24-hour expiry of unused temp uploads.
| 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.
| 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": { }
}Multipart upload used to stage a file before creating a stakeholder with a file-type custom field.
Send a single part named file. Allowed types include common images, PDF, Office documents, CSV, and plain text.
Maximum upload size is 50 MB.
The JSON:API response meta.data.path is the S3 key you must pass as attributes.custom_fields[].value
when field_type is file on POST /public-v1/stakeholders.
Uploaded files that are not linked to a created stakeholder are removed automatically after 24 hours. Each upload must be used with a distinct S3 object key if you send multiple file custom fields in one create request.
| file required | string <binary> File to upload (field name must be |
{- "jsonapi": {
- "version": "1.0"
}, - "meta": {
- "message": "string",
- "data": {
- "path": "string",
- "size": 0,
- "ext": "string",
- "title": "string"
}
}
}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"
}
}
}Requires attributes.address (non-empty).
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 for 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.
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 S3 object key.
| 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"
}
}
}