A Singapore Government Agency Website

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:


Authentication

All API requests require an API key provided by your app administrator.

How to obtain an API key:

  1. Log in to Ownself Gather.
  2. Navigate to Settings > API Keys.
  3. 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.
Chat with me!
Bot Launcher