Ownself Gather API reference
Ownself Gather provides two sets of APIs for programmatic integration:
- Case Management API — case CRUD, case search, file upload, email operations
- App Administration API — app-level configuration and management
API specifications are available via Swagger:
- Case Management API: gather.gov.sg/cms/api/swagger/
- File API: gather.gov.sg/file/api/swagger/
Authentication
All API requests require an API key provided by your app administrator.
How to obtain an API key:
- Log in to Ownself Gather.
- Navigate to Settings > API Keys.
- Generate a new API key.
When integrating via Opus, reference the API key using an environment variable (e.g., {{{env.GATHERSG_API_KEY}}}).
Rate limits
Each API key has a default rate limit of 100 requests per 5 minutes for certain APIs. Exceeding this limit returns HTTP 429 responses.
To request a rate limit increase, submit a support ticket at gather.gov.sg/support.
Case management operations
Get case details
Retrieve full details of a specific case.
| Method and path | GET /cms/api/cases/{caseUuid} |
|---|
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
caseUuid |
string |
Yes | The unique identifier of the case to retrieve |
Success response (200)
{
"uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"source": "form",
"caseRef": "CASE-2026-001",
"type": {
"uuid": "type-uuid-123",
"name": "Service Request"
},
"status": {
"uuid": "status-uuid-456",
"name": "Open",
"color": "#00B050",
"isFinal": false
},
"createdAt": "2026-01-15T10:30:00.000Z",
"createdBy": {
"role": "officer",
"uuid": "user-uuid-123",
"name": "John Doe"
},
"fields": {
"customer_name": "Alice Tan",
"request_type": "General Enquiry"
},
"attachments": {},
"assignees": [],
"tags": ["urgent", "follow-up"],
"durationSec": 3600,
"durationPaused": false
}Create case
Create a new case in Ownself Gather.
| Method and path | POST /cms/api/cases |
|---|
Request body
| Name | Type | Required | Description |
|---|---|---|---|
caseTypeName |
string |
Yes | The name of the case type to create the case under |
status |
string |
Yes | The initial status of the case (e.g., Open) |
assignees |
string |
No | Comma-separated list of assignee email addresses |
tags |
string |
No | Comma-separated list of tags to attach to the case |
fields |
object |
Yes | Key-value pairs of case field names and values |
Success response (200)
{
"traceId": "qbuik1w2",
"data": {
"caseRef": "260320-00009",
"uuid": "jXFiudsuteFsi3ypAWptBT"
}
}Update case (full)
Fully update an existing case. All fields must be provided.
| Method and path | PUT /cms/api/cases/{caseUuid} |
|---|
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
caseUuid |
string |
Yes | The unique identifier of the case to update |
Request body
| Name | Type | Required | Description |
|---|---|---|---|
status |
string |
Yes | The new status of the case |
fields |
object |
Yes | The complete set of field values to replace on the case |
Update case (partial)
Partially update an existing case. Only the specified fields are changed.
| Method and path | PATCH /cms/api/cases/{caseUuid} |
|---|
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
caseUuid |
string |
Yes | The unique identifier of the case to patch |
Request body
| Name | Type | Required | Description |
|---|---|---|---|
status |
string |
Yes | The new status of the case |
fields |
object |
Yes | The subset of field values to update |
Delete case
Delete an existing case by its UUID.
| Method and path | DELETE /cms/api/cases/{caseUuid} |
|---|
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
caseUuid |
string |
Yes | The unique identifier of the case to delete |
Search cases
Search for cases with filters, sorting, and pagination.
| Method and path | POST /cms/api/cases/search |
|---|
Request body
| Name | Type | Required | Description |
|---|---|---|---|
page |
integer |
Yes | The page number to retrieve |
size |
integer |
Yes | The number of cases per page |
query |
object |
No | Query filters (see query parameters below) |
Query filter fields
| Field | Type | Description |
|---|---|---|
search |
string |
Keyword search across cases |
sort |
string |
Field to sort results by (e.g., createdAt) |
order |
string |
Sort direction: asc or desc |
statuses |
array |
Filter by case status names (e.g., ["Open"]) |
types |
array |
Filter by case type names |
tags |
array |
Filter by tags |
sources |
array |
Filter by case source (e.g., ["api"], ["form"]) |
assigned |
boolean |
Filter by whether the case is assigned |
assignees |
array |
Filter by assignee email addresses |
flagged |
boolean |
Filter by flagged status |
missedSla |
boolean |
Filter by missed SLA status |
caseRefs |
array |
Filter by specific case references |
customer |
string |
Filter by customer identifier |
createdAtFrom |
string |
Cases created on or after this date (ISO 8601) |
createdAtTo |
string |
Cases created on or before this date (ISO 8601) |
slaRemaingDayFrom |
integer |
Minimum remaining SLA days |
slaRemaingDayTo |
integer |
Maximum remaining SLA days |
File operations
Upload file
Upload a file attachment to a case type.
| Method and path | POST /file/api/upload (after obtaining upload token via POST /cms/api/cases/upload/token) |
|---|
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
fieldName |
string |
Yes | The name of the attachment field on the case type |
caseTypeName |
string |
Yes | The name of the case type that owns the attachment field |
fileContent |
string |
Yes | Base64-encoded content of the file to upload |
fileName |
string |
Yes | The file name including extension (e.g., document.pdf) |
caseUuid |
string |
No | The case UUID to associate the file with. Strongly recommended — without it, the returned file UUID cannot be used in Update Case operations. |
Success response (200)
{
"traceId": "<trace-id>",
"data": {
"uuid": "<file-uuid>",
"name": "document.pdf",
"mimeType": "application/pdf",
"size": 42,
"expireAt": "2026-03-21T19:59:43+08:00"
}
}Download case attachment
Download a file attachment stored on a case. Returns Base64-encoded content.
| Method and path | GET /cms/api/cases/{caseUuid}/attachments/{attachmentUuid} |
|---|
Email operations
List emails
List emails associated with a specific case.
| Method and path | GET /cms/api/cases/{caseUuid}/emails |
|---|
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
page |
integer |
Yes | Page number |
size |
integer |
Yes | Number of emails per page |
Query filter fields
| Field | Type | Description |
|---|---|---|
search |
string |
Keyword search across email subject and body |
types |
array |
Filter by email type: ["inbound"], ["outbound"], ["draft"] |
read |
string |
Filter by read status: true or false |
createdAtFrom |
string |
Emails created on or after this date |
createdAtTo |
string |
Emails created on or before this date |
Get email
Retrieve full details of a specific email on a case.
| Method and path | GET /cms/api/cases/{caseUuid}/emails/{emailUuid} |
|---|
Download email attachment
Download a file attachment from a case email. Returns Base64-encoded content.
| Method and path | GET /cms/api/cases/{caseUuid}/emails/{emailUuid}/attachments/{attachmentUuid} |
|---|
Opus integration
Ownself Gather has dedicated nodes in Opus for workflow automation:
- Ownself Gather Trigger Node — receives webhook events when cases are created, updated, or receive emails. Configure by copying the Opus webhook URL into Ownself Gather’s webhook settings.
- Ownself Gather Node — performs case CRUD, file upload, case search, and email retrieval operations within an Opus workflow. Authenticated via API key.