The BasicOps data model is built around a hierarchy of objects. Projects are the top-level organizational unit; they contain Sections (time-boxed sprints or phases) and Tasks (the individual units of work). Tasks and Projects can have Notes attached to them. Communication happens through Messages, which can be sent in the context of a task, a project, a direct chat, a group chat, or a channel. Messages support threaded Replies and emoji Reactions.
Files can be uploaded and attached to tasks, messages, or replies. Dependencies link tasks together (e.g. finish-to-start). Webhooks let you subscribe to events in real time. Time Entries track time spent on tasks.
Most record identifiers in the API are integers (e.g. project IDs, task IDs, section IDs, user IDs, note IDs, channel IDs, chat IDs, time entry IDs).
The following identifiers are strings:
When building integrations, make sure to store and compare these as strings rather than numbers to avoid precision issues.
Create and update endpoints return a data object that always includes the id of the created or updated record, and typically also includes:
viewUrl - A deep-link URL that opens the record directly in the BasicOps web application. You can use this to build "Open in BasicOps" links in your integration.bounceUrl - A URL that redirects to the appropriate page in BasicOps. Useful when the destination page may vary depending on context (for example, opening a task from a notification).Projects is the top organization structure. In projects you may find sections and tasks.
| Field ID | Type |
|---|---|
| id | Project identifier |
| isTemplate | Indicates whether this is a project or template: null or false: project true: template |
| title | Project title (String, required) |
| description | Project description (String) |
| owner | Idenfifier of the user who is the project owner (defaults to the current user) |
| team | List of identifiers of the users who are on the project team |
| dueDate | Project due date (date) |
| startDate | Project start date (date) |
| status | Project status, must have one of the followng values (defaults to "On Track"): "On Track" "At Risk" "In Trouble" "On Hold" "Complete" |
| folder | Project group in which the project is located, will be null if the project is not in a project group |
| created | The date and time of the project creation (date) |
| updated | The date and time of the last update of the project (date) |
You can filter on the following project fields: isTemplate, owner, dueDate, startDate, created and updated.
Please refer to Filters for information about adding filters.
GET https://api.basicops.com/v1/project/<project-id>
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/project/<project-id>
Returns:
{
"success": true,
"data": {
"id": 6,
"title": "Corporate website",
"description": "Define our presence, define values we want to promote.",
"status": "On Track",
"dueDate": "2018-08-01T07:00:00.000Z",
"startDate": "2018-01-01T07:00:00.000Z",
"owner": 38,
"team": [38, 25],
"created": "2018-01-01T08:00:00.000Z",
"updated": "2018-07-01T08:00:00.000Z"
}
GET https://api.basicops.com/v1/project
Optional parameters:
?istemplate=true/false
?archived=true
By default, only active (non-archived) projects are returned. Pass ?archived=true to retrieve archived projects instead.
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/project
Returns:
{
"success": true,
"data": [
{
"id": 6,
"title": "Corporate website",
"description": "Define our presence, define values we want to promote.",
"status": "On Track",
"dueDate": "2018-08-01T07:00:00.000Z",
"startDate": "2018-01-01T07:00:00.000Z",
"owner": 38,
"team": [38, 25],
"created": "2018-01-01T08:00:00.000Z",
"updated": "2018-07-01T08:00:00.000Z"
},
...
]
}
POST https://api.basicops.com/v1/project
{
"owner": 38,
"description": "Define our presence",
"dueDate": "2018-08-01T07:00:00.000Z",
"title": "Corporate website",
"status": "On Track"
}
Optional field:
"template": ID of project template
Using CURL:
curl -X POST \
https://api.basicops.com/v1/project \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"owner": 38,
"description": "Define our presence",
"dueDate": "2018-08-01T07:00:00.000Z",
"title": "Corporate website",
"status": "On Track"
}'
Returns:
{
"success" : true,
"data" : {
"id" : 146
"viewUrl" : "...",
"bounceUrl" : "..."
}
}
PATCH https://api.basicops.com/v1/project/<project-id>
{
"owner": 38,
"description": "Define our presence",
"dueDate": "2018-08-01T07:00:00.000Z",
"title": "Corporate website",
"status": "On Track"
}
Using CURL:
curl -X PATCH \
https://api.basicops.com/v1/project/123 \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"owner": 38,
"description": "Define our presence",
"dueDate": "2018-08-01T07:00:00.000Z",
"title": "Corporate website",
"status": "On Track"
}'
Returns:
{
"success" : true
}
DELETE https://api.basicops.com/v1/project/<project-id>
Using CURL:
curl -X DELETE \
https://api.basicops.com/v1/project/123 \
-H "Authorization: Bearer <access-token>"
Returns:
{
"success" : true,
"data" : {
"statusKind" : 2,
"status" : "<name> deleted",
"activities" : [ 436 ]
}
}
Sections are used for grouping tasks within a project.
| Field ID | Type |
|---|---|
| id | Section identifier |
| name | String (required) |
You can filter on the following section fields: project, created and updated.
Please refer to Filters for information about adding filters.
GET https://api.basicops.com/v1/section/<section-id>
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/section/123
Returns:
JSON data:
{
"success": true,
"data": {
"endDate": "2018-03-31T07:00:00.000Z",
"name": "Q1",
"project": {
"dueDate": "2018-08-01T07:00:00.000Z",
"description": "Define our presence, define values we want to promote.",
"id": 6,
"title": "Corporate website",
"status": "On Track"
},
"id": 1,
"state": "Complete"
}
GET https://api.basicops.com/v1/section
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/section
Returns
{
"success": true,
"data": [
{
"endDate": "2018-03-31T07:00:00.000Z",
"name": "Q1",
"project": {
"dueDate": "2018-08-01T07:00:00.000Z",
"description": "Define our presence, define values we want to promote.",
"id": 6,
"title": "Corporate website",
"status": "On Track"
},
"id": 1,
"state": "Complete"
},
...
]
}
GET https://api.basicops.com/v1/project/<project-id>/sections
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/project/123/sections
Returns:
{
"success": true,
"data": [
{
"id": 1,
"name": "Q1",
"endDate": "2018-03-31T07:00:00.000Z",
"state": "Complete",
"project": {
"id": 6,
"title": "Corporate website",
"status": "On Track"
}
},
...
]
}
POST https://api.basicops.com/v1/section
{
"endDate": "2018-09-30T07:00:00.000Z",
"name": "Next release",
"project": 6,
"state": "Open"
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/section \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Next release",
"project": 6
}'
Returns:
{
"success" : true,
"data" : {
"id" : 146,
"viewUrl" : "...",
"bounceUrl" : "..."
}
}
PATCH https://api.basicops.com/v1/section/<section-id>
{
"endDate": "2018-10-30T07:00:00.000Z",
"name": "Next release",
"project": 8,
"state": "Open"
}
Using CURL:
curl -X PATCH \
https://api.basicops.com/v1/section/146 \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Next release",
"project": 8
}'
Returns:
{
"success" : true
}
DELETE https://api.basicops.com/v1/section/<section-id>
Using CURL:
curl -X DELETE \
https://api.basicops.com/v1/section/123 \
-H "Authorization: Bearer <access-token>"
Returns:
{
"success" : true,
"data" : {
"statusKind" : 2,
"status" : "<name> deleted",
"activities" : [ 436 ]
}
}
Tasks identify the work to be done. They can be organized in section and projects.
| Field ID | Type |
|---|---|
| id | Task identifier |
| title | String (required) |
| description | Description |
| project | Identifier of the project the task belongs to or null if it doesn't belong to a project |
| section | Identifier of the section the task belongs to or null if it doesn't belong to a section |
| assignee | Identifier of the user who is assigned to the task |
| dueDate | Date |
| status | String, must be one of the following values (defaults to "New"): "New" "Accepted" "In Progress "Under Review" "Reviewed" "On Hold" "Blocked" "Complete" |
| attachments | Attached files |
| created | The date and time the task was created (date) |
| updated | The date and time of the last update of the task (date) |
You can filter on the following task fields: project, section, assignee, dueDate, status, created and updated.
Please refer to Filters for information about adding filters.
GET https://api.basicops.com/v1/task/<task-id>
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/task/123
Returns:
JSON data:
{
"success": true,
"data": {
"attachments": [
{
"Id": "8dMfbZuoDwmxVvx0W2rbWA%3D%3D",
"FileName": "002.jpg",
"Width": 498,
"Height": 304,
"Created": "2018-07-17T19:21:52.000Z",
"Size": 257895,
"DownloadURL": "https://api.basicops.com/v1/task/73/attachments/8dMfbZuoDwmxVvx0W2rbWA%3D%3D/download",
"ThumbnailURL": "https://api.basicops.com/v1/task/73/attachments/8dMfbZuoDwmxVvx0W2rbWA%3D%3D/thumbnail/medium"
},
{
"Id": "9ovmKXhHsLHKT2Z5LJ4%2BHA%3D%3D",
"FileName": "001.jpg",
"Width": 498,
"Height": 304,
"Created": "2018-07-17T19:21:52.000Z",
"Size": 380825,
"DownloadURL": "https://api.basicops.com/v1/task/73/attachments/9ovmKXhHsLHKT2Z5LJ4%2BHA%3D%3D/download",
"ThumbnailURL": "https://api.basicops.com/v1/task/73/attachments/9ovmKXhHsLHKT2Z5LJ4%2BHA%3D%3D/thumbnail/medium"
}
],
"section": {
"endDate": "2018-03-31T07:00:00.000Z",
"name": "Q1",
"id": 1,
"state": "Open"
},
"project": {
"dueDate": "2018-08-01T07:00:00.000Z",
"description": "Define our presence, define values we want to promote.",
"id": 6,
"title": "Corporate website",
"status": "On Track"
},
"id": 73,
"assignee": {
"firstName": "Alex",
"lastName": "Jackson",
"id": 38,
"email": "alex@testco.com",
"picture": "https://api.basicops.com/v1/user/38/picture/mB1Wqsr7DjnvhagZeIag0w%3D%3D/download"
},
"title": "Organization of corporate website",
"status": "Accepted"
}
}
GET https://api.basicops.com/v1/task
Optional parameter:
?archived=true
By default, only active (non-archived) tasks are returned. Pass ?archived=true to retrieve archived tasks instead.
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/task
Returns
{
"success": true,
"data": [
{
"attachments": [],
"section": {
"endDate": "2018-03-31T07:00:00.000Z",
"name": "Q1",
"id": 1,
"state": "Open"
},
"project": {
"dueDate": "2018-08-01T07:00:00.000Z",
"description": "Define our presence, define values we want to promote.",
"id": 6,
"title": "Corporate website",
"status": "On Track"
},
"id": 73,
"assignee": {
"firstName": "Alex",
"lastName": "Jackson",
"id": 38,
"email": "alex@testco.com",
"picture": "https://api.basicops.com/v1/user/38/picture/mB1Wqsr7DjnvhagZeIag0w%3D%3D/download"
},
"title": "Organization of corporate website",
"status": "Accepted"
},
...
]
}
GET https://api.basicops.com/v1/project/<project-id>/tasks
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/project/123/tasks
Returns:
{
"success": true,
"data": [
{
"id": 73,
"title": "Organization of corporate website",
"status": "Accepted",
"project": {
"id": 6,
"title": "Corporate website",
"status": "On Track"
},
"section": {
"id": 1,
"name": "Q1",
"state": "Open"
},
"assignee": {
"id": 38,
"firstName": "Alex",
"lastName": "Jackson",
"email": "alex@testco.com"
},
"attachments": []
},
...
]
}
GET https://api.basicops.com/v1/task/<task-id>/tasks
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/task/123/tasks
Returns:
{
"success": true,
"data": [
{
"id": 73,
"title": "Organization of corporate website",
"status": "Accepted",
"project": {
"id": 6,
"title": "Corporate website",
"status": "On Track"
},
"section": {
"id": 1,
"name": "Q1",
"state": "Open"
},
"assignee": {
"id": 38,
"firstName": "Alex",
"lastName": "Jackson",
"email": "alex@testco.com"
},
"attachments": []
},
...
]
}
POST https://api.basicops.com/v1/task
Authorization: Bearer <access-token>
{
"dueDate": "2018-08-01T07:00:00.000Z",
"section": 1,
"project": 6,
"assignee": 38,
"title": "Company info",
"status": "New"
}
Optional field:
"parent": ID of parent task
Using CURL:
curl -X POST \
https://api.basicops.com/v1/task \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"dueDate": "2018-08-01T07:00:00.000Z",
"section": 1,
"project": 6,
"assignee": 38,
"title": "Company info",
"status": "New"
}'
Returns:
{
"success" : true,
"data" : {
"id" : 146,
"viewUrl" : "...",
"bounceUrl" : "..."
}
}
PATCH https://api.basicops.com/v1/task/<task-id>
{
"description": "Include management profiles",
"title": "Company information",
"status": "In Progress",
"project": 8
}
Using CURL:
curl -X PATCH \
https://api.basicops.com/v1/task/146 \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"description": "Include management profiles",
"title": "Company information",
"status": "In Progress",
"project": 8
}'
Returns:
{
"success" : true
}
POST https://api.basicops.com/v1/task/<task-id>/attachments
Content-Disposition: attachment; filename="filename.ext"
Content-Type: mime-type
...binary file content...
Using CURL:
curl https://api.basicops.com/v1/task/308/attachments \
-H "Authorization: Bearer <access-token>" \
-H "Content-Disposition: attachment; filename=\"sample.png\"" \
--data-binary "@testfile.png"
POST https://api.basicops.com/v1/task/<task-id>/attachments
Content-Disposition: attachment; filename="filename.ext"
Content-Type: mime-type
{
"fileName": "sample.gif",
"contentType": "photo",
"cloudType": 1,
"cloudId": "0B_8xh8GFMTbncGRWNU9LRDBCWEU"
}
The cloudType number can be one of these values:
1: Google Drive
2: Box
3: Dropbox
6: Microsoft OneDrive
The cloudId value is the file identifier used in the cloud storage provider; its format depends on the provider.
GET https://api.basicops.com/v1/task/<task-id>/attachments/<attachment-id>
The HTTP response contains the file to download:
200 OK
Content-Disposition: attachment; filename="sample.png"
Content-Length: length
...binary file data....
GET https://api.basicops.com/v1/task/<task-id>/attachments/<attachment-id>
The HTTP response contains information for how to download the file from the cloud storage provider.
{
"fileName": "sample.gif",
"contentType": "photo",
"cloudType": 1,
"cloudId": "0B_8xh8GFMTbncGRWNU9LRDBCWEU"
}
The cloudType number can be one of these values:
1: Google Drive
2: Box
3: Dropbox
6: Microsoft OneDrive
The cloudId value is the file identifier used in the cloud storage provider; its format depends on the provider.
GET https://api.basicops.com/v1/task/<task-id>/attachments/<attachment-id>/thumbnail/<size>
The <size> parameter can be one of the following values: icon, small, medium, and large.
The HTTP response contains the thumbnail image:
200 OK
Content-Disposition: attachment; filename="sample-size.png"
Content-Length: length
...binary file data....
DELETE https://api.basicops.com/v1/task/<task-id>
Using CURL:
curl -X DELETE \
https://api.basicops.com/v1/task/123 \
-H "Authorization: Bearer <access-token>"
Returns:
{
"success" : true,
"data" : {
"statusKind" : 2,
"status" : "<name> deleted",
"activities" : [ 436 ]
}
}
Reviews allow tasks to be submitted for approval. A reviewer can then approve or reject the task.
Sends a review request to one or more users for a given task.
POST https://api.basicops.com/v1/task/<task-id>/review/request
{
"reviewers": [123, 456],
"message": "Please review this task"
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/task/73/review/request \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"reviewers": [123, 456],
"message": "Please review this task"
}'
Returns:
{
"success": true
}
Submits a review decision for a task.
POST https://api.basicops.com/v1/task/<task-id>/review/submit
{
"message": "Looks good, approved"
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/task/73/review/submit \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"message": "Looks good, approved"
}'
Returns:
{
"success": true
}
Dependencies define ordering relationships between tasks, ensuring one task is completed before another begins.
| Field ID | Type |
|---|---|
| id | Dependency identifier (String) |
| task | Identifier of the dependent task |
| dependsOnTask | Identifier of the task this task depends on |
| type | Dependency type (String) |
GET https://api.basicops.com/v1/task/<task-id>/dependency
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/task/123/dependency
Returns:
{
"success": true,
"data": [
{
"id": "dep-abc123",
"task": 123,
"dependsOnTask": 456,
"type": "finish-to-start"
},
...
]
}
List all dependencies of tasks within a project.
GET https://api.basicops.com/v1/project/<project-id>/dependency
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/project/6/dependency
Returns:
{
"success": true,
"data": [
{
"id": "dep-abc123",
"task": 123,
"dependsOnTask": 456,
"type": "finish-to-start"
},
...
]
}
POST https://api.basicops.com/v1/task/<task-id>/dependency
{
"dependsOnTask": 456,
"type": "finish-to-start"
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/task/123/dependency \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"dependsOnTask": 456,
"type": "finish-to-start"
}'
Returns:
{
"success": true,
"data": {
"id": "dep-abc123",
"viewUrl": "...",
"bounceUrl": "..."
}
}
DELETE https://api.basicops.com/v1/dependency/<dependency-id>
Using CURL:
curl -X DELETE \
https://api.basicops.com/v1/dependency/dep-abc123 \
-H "Authorization: Bearer <access-token>"
Returns:
{
"success": true
}
Time Tracking entries are used for recording time spent on tasks.
| Field ID | Type |
|---|---|
| id | Time Tracking identifier |
| user | Identifier of the user for the entry. If this is not specified when creating a new time tracking entry, it will default to the owner of the access token. |
| project | Identifier of the project |
| task | Identifier of the task |
| startTime | Date specifying the start time of the entry |
| endTime | Date specifying the end time of the entry |
| time | Integer denoting the number of seconds for the entry |
You can filter on the following time tracking fields: project, task, startTime, endTime, created and updated.
Please refer to Filters for information about adding filters.
GET https://api.basicops.com/v1/timetracking/<time-tracking-id>
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/timetracking/123
Returns:
JSON data:
{
"success": true,
"data":
{
"id": 7,
"note": "Note via API",
"task":
{
"id": 1,
"title": "Organization of corporate website",
...
},
"created": "2025-09-27T20:17:37.000Z",
"project":
{
"id": 1,
"title": "Corporate website",
...
},
"startTime": "2024-04-01T00:00:00.000Z",
"endTime": "2024-04-01T01:00:00.000Z",
"time": 3600,
"updated": "2025-09-27T20:17:37.000Z",
"user": 123
}
}
GET https://api.basicops.com/v1/timetracking
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/timetracking
Returns
{
"success": true,
"data": [
{
"success": true,
"data":
{
"id": 7,
"note": "Note via API",
"task":
{
"id": 1,
"title": "Organization of corporate website",
...
},
"created": "2025-09-27T20:17:37.000Z",
"project":
{
"id": 1,
"title": "Corporate website",
...
},
"startTime": "2024-04-01T00:00:00.000Z",
"endTime": "2024-04-01T01:00:00.000Z",
"time": 3600,
"updated": "2025-09-27T20:17:37.000Z",
"user": 123
}
},
...
]
}
Note that you can specify the user for the time tracking entry using the user field. If this is not specified, the user will default to the owner of the access token.
POST https://api.basicops.com/v1/timetracking
{
"note": "A note...",
"project": 123
"task": 123,
"user": 123,
"startTime": "2024-04-01T00:00:00.000Z",
"endTime": "2024-04-01T01:00:00.000Z",
"time": 3600
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/timetracking \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"note": "A note...",
"project": 123,
"task": 123,
"user": 123,
"startTime": "2024-04-01T00:00:00.000Z",
"endTime": "2024-04-01T01:00:00.000Z",
"time": 3600
}'
Returns:
{
"success" : true,
"data" : {
"id" : 146,
"viewUrl" : "...",
"bounceUrl" : "..."
}
}
PATCH https://api.basicops.com/v1/timetracking/<time-tracking-id>
{
"note": "An updated note...",
"endTime": "2024-04-01T02:00:00.000Z",
"time": 7200
}
Using CURL:
curl -X PATCH \
https://api.basicops.com/v1/timetracking/146 \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"note": "An updated note...",
"endTime": "2024-04-01T02:00:00.000Z",
"time": 7200
}'
Returns:
{
"success" : true
}
DELETE https://api.basicops.com/v1/timetracking/<time-tracking-id>
Using CURL:
curl -X DELETE \
https://api.basicops.com/v1/timetracking/123 \
-H "Authorization: Bearer <access-token>"
Returns:
{
"success" : true,
"data" : {
"activities" : [ 436 ]
}
}
Notes contains free-form text and can contain references to tasks and files. Notes can be personal or belong to a project.
| Field ID | Type |
|---|---|
| id | note identifier |
| name | String (required) |
| content | The text of the note |
| attachments | Attached files |
You can filter on the following note fields: created and updated.
Please refer to Filters for information about adding filters.
GET https://api.basicops.com/v1/note/<note-id>
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/note/123
Returns:
JSON data:
{
"success": true,
"data": {
"name": "Meeting summary",
"id": 1,
"content": "...",
"attachments": [
{
"Id": "8dMfbZuoDwmxVvx0W2rbWA%3D%3D",
"FileName": "002.jpg",
"Width": 498,
"Height": 304,
"Created": "2018-07-17T19:21:52.000Z",
"Size": 257895,
"DownloadURL": "https://api.basicops.com/v1/task/73/attachments/8dMfbZuoDwmxVvx0W2rbWA%3D%3D/download",
"ThumbnailURL": "https://api.basicops.com/v1/task/73/attachments/8dMfbZuoDwmxVvx0W2rbWA%3D%3D/thumbnail/medium"
},
{
"Id": "9ovmKXhHsLHKT2Z5LJ4%2BHA%3D%3D",
"FileName": "001.jpg",
"Width": 498,
"Height": 304,
"Created": "2018-07-17T19:21:52.000Z",
"Size": 380825,
"DownloadURL": "https://api.basicops.com/v1/task/73/attachments/9ovmKXhHsLHKT2Z5LJ4%2BHA%3D%3D/download",
"ThumbnailURL": "https://api.basicops.com/v1/task/73/attachments/9ovmKXhHsLHKT2Z5LJ4%2BHA%3D%3D/thumbnail/medium"
}
]
}
GET https://api.basicops.com/v1/note
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/note
Returns
{
"success": true,
"data": [
{
"name": "Meeting summary",
"id": 1,
"content": "...",
"attachments": [
{
"Id": "8dMfbZuoDwmxVvx0W2rbWA%3D%3D",
"FileName": "002.jpg",
"Width": 498,
"Height": 304,
"Created": "2018-07-17T19:21:52.000Z",
"Size": 257895,
"DownloadURL": "https://api.basicops.com/v1/task/73/attachments/8dMfbZuoDwmxVvx0W2rbWA%3D%3D/download",
"ThumbnailURL": "https://api.basicops.com/v1/task/73/attachments/8dMfbZuoDwmxVvx0W2rbWA%3D%3D/thumbnail/medium"
},
{
"Id": "9ovmKXhHsLHKT2Z5LJ4%2BHA%3D%3D",
"FileName": "001.jpg",
"Width": 498,
"Height": 304,
"Created": "2018-07-17T19:21:52.000Z",
"Size": 380825,
"DownloadURL": "https://api.basicops.com/v1/task/73/attachments/9ovmKXhHsLHKT2Z5LJ4%2BHA%3D%3D/download",
"ThumbnailURL": "https://api.basicops.com/v1/task/73/attachments/9ovmKXhHsLHKT2Z5LJ4%2BHA%3D%3D/thumbnail/medium"
}
]
},
...
]
}
GET https://api.basicops.com/v1/project/<project-id>/notes
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/project/123/notes
Returns:
{
"success": true,
"data": [
{
"id": 1,
"name": "Meeting summary",
"content": "...",
"attachments": []
},
...
]
}
POST https://api.basicops.com/v1/note
{
"name": "Next release",
"project": 6,
"content": "..."
}
Instead of using the general form for creating a note specified above, you may specify one or more of the fields startTime, endTime, summary, actionItems and participants shown in the example below. The values of startTime, endTime, summary, actionItems and participants will then be formatted and added to the content field.
If an action item in actionItems has the field addAsTask set to true, a task will automatically be created with the title defined by the title field, and a reference to the task will be inserted into the note.
POST https://api.basicops.com/v1/note
{
"name": "Next release",
"startTime": "2024-09-03T18:30:00.000Z",
"endTime": "2024-09-03T19:10:00.000Z",
"summary": "The summary",
"actionItems": [
{
"title": "first action item",
"addAsTask": true
},
{
"title": "second action item",
"addAsTask": false
}],
"participants": [
{
"firstName": "John",
"lastName": "Doe",
"email": "john@doe.com"
},
{
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@doe.com"
}],
"project": 6,
"content": "..."
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/note \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Next release",
"startTime": "2024-09-03T18:30:00.000Z",
"endTime": "2024-09-03T19:10:00.000Z",
"summary": "The summary",
"actionItems": [
{
"title": "first action item"
},
{
"title": "second action item"
}],
"participants": [
{
"firstName": "John",
"lastName": "Doe",
"email": "john@doe.com"
},
{
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@doe.com"
}],
"project": 6,
"content": "..."
}'
Returns:
{
"success" : true,
"data" : {
"id" : 146,
"viewUrl" : "...",
"bounceUrl" : "..."
}
}
PATCH https://api.basicops.com/v1/note/<note-id>
{
"name": "Next release",
"project": 8,
"content": "..."
}
Using CURL:
curl -X PATCH \
https://api.basicops.com/v1/note/146 \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Next release",
"project": 8,
"state": "..."
}'
Returns:
{
"success" : true
}
DELETE https://api.basicops.com/v1/note/<note-id>
Using CURL:
curl -X DELETE \
https://api.basicops.com/v1/note/123 \
-H "Authorization: Bearer <access-token>"
Returns:
{
"success" : true,
"data" : {
"statusKind" : 2,
"status" : "<name> deleted",
"activities" : [ 436 ]
}
}
Messages can be posted to tasks, projects, chats, group chats, and channels.
| Field ID | Type |
|---|---|
| id | Message identifier (String) |
| message | The text content of the message (String, required) |
| attachments | Attached files |
| created | Date and time the message was created |
| updated | Date and time the message was last updated |
GET https://api.basicops.com/v1/message/<message-id>
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/message/<message-id>
Returns:
{
"success": true,
"data": {
"id": "abc123",
"message": "Hello world",
"created": "2024-04-01T10:00:00.000Z",
"updated": "2024-04-01T10:00:00.000Z"
}
}
GET https://api.basicops.com/v1/task/<task-id>/message
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/task/<task-id>/message
Returns:
{
"success": true,
"data": [
{
"id": "abc123",
"message": "Hello world",
"created": "2024-04-01T10:00:00.000Z",
"updated": "2024-04-01T10:00:00.000Z"
},
...
]
}
GET https://api.basicops.com/v1/project/<project-id>/message
Optional parameter:
?includeTaskMessages=true
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/project/<project-id>/message
Returns:
{
"success": true,
"data": [
{
"id": "abc123",
"message": "Hello world",
"created": "2024-04-01T10:00:00.000Z",
"updated": "2024-04-01T10:00:00.000Z"
},
...
]
}
GET https://api.basicops.com/v1/chat/<chat-id>/message
Returns:
{
"success": true,
"data": [
{
"id": "abc123",
"message": "Hello world",
"created": "2024-04-01T10:00:00.000Z",
"updated": "2024-04-01T10:00:00.000Z"
},
...
]
}
GET https://api.basicops.com/v1/groupchat/<groupchat-id>/message
Returns:
{
"success": true,
"data": [
{
"id": "abc123",
"message": "Hello world",
"created": "2024-04-01T10:00:00.000Z",
"updated": "2024-04-01T10:00:00.000Z"
},
...
]
}
GET https://api.basicops.com/v1/channel/<channel-id>/message
Returns:
{
"success": true,
"data": [
{
"id": "abc123",
"message": "Hello world",
"created": "2024-04-01T10:00:00.000Z",
"updated": "2024-04-01T10:00:00.000Z"
},
...
]
}
POST https://api.basicops.com/v1/<type>/<id>/message
{
"message": "Hello world"
}
Where <type> is one of: task, project, chat, groupchat, channel.
To include attachments, add an attachments array containing identifiers returned by the Upload endpoints:
POST https://api.basicops.com/v1/<type>/<id>/message
{
"message": "Please review the attached file",
"attachments": ["8dMfbZuoDwmxVvx0W2rbWA=="]
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/task/123/message \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"message": "Hello world"
}'
Returns:
{
"success": true,
"data": {
"id": "abc123",
"viewUrl": "...",
"bounceUrl": "..."
}
}
This endpoint replaces the full content of the message, including its attachments. It is one of two PUT endpoints in the API (the other being Update a Reply). If you want to keep existing attachments, include their identifiers in the attachments field. Additional files uploaded via the Upload endpoints can be added to the array.
PUT https://api.basicops.com/v1/message/<message-id>
{
"message": "Updated message text",
"attachments": ["8dMfbZuoDwmxVvx0W2rbWA=="]
}
Using CURL:
curl -X PUT \
https://api.basicops.com/v1/message/abc123 \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"message": "Updated message text",
"attachments": ["8dMfbZuoDwmxVvx0W2rbWA=="]
}'
Returns:
{
"success": true
}
DELETE https://api.basicops.com/v1/message/<message-id>
Using CURL:
curl -X DELETE \
https://api.basicops.com/v1/message/abc123 \
-H "Authorization: Bearer <access-token>"
Returns:
{
"success": true
}
Replies are threaded responses to messages.
| Field ID | Type |
|---|---|
| id | Reply identifier (String) |
| message | The text content of the reply (String, required) |
| attachments | Attached files |
| created | Date and time the reply was created |
| updated | Date and time the reply was last updated |
GET https://api.basicops.com/v1/message/<message-id>/reply
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/message/abc123/reply
Returns:
{
"success": true,
"data": [
{
"id": "def456",
"message": "This is a reply",
"created": "2024-04-01T10:05:00.000Z",
"updated": "2024-04-01T10:05:00.000Z"
},
...
]
}
POST https://api.basicops.com/v1/message/<message-id>/reply
{
"message": "This is a reply"
}
To include attachments, add an attachments array containing identifiers returned by the Upload endpoints:
POST https://api.basicops.com/v1/message/<message-id>/reply
{
"message": "See attached",
"attachments": ["8dMfbZuoDwmxVvx0W2rbWA=="]
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/message/abc123/reply \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"message": "This is a reply"
}'
Returns:
{
"success": true,
"data": {
"id": "def456",
"viewUrl": "...",
"bounceUrl": "..."
}
}
This endpoint replaces the full content of the reply, including its attachments. It is one of two PUT endpoints in the API (the other being Update a Message). If you want to keep existing attachments, include their identifiers in the attachments field. Additional files uploaded via the Upload endpoints can be added to the array.
PUT https://api.basicops.com/v1/reply/<reply-id>
{
"message": "Updated reply text",
"attachments": ["8dMfbZuoDwmxVvx0W2rbWA=="]
}
Using CURL:
curl -X PUT \
https://api.basicops.com/v1/reply/def456 \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"message": "Updated reply text",
"attachments": ["8dMfbZuoDwmxVvx0W2rbWA=="]
}'
Returns:
{
"success": true
}
DELETE https://api.basicops.com/v1/reply/<reply-id>
Using CURL:
curl -X DELETE \
https://api.basicops.com/v1/reply/def456 \
-H "Authorization: Bearer <access-token>"
Returns:
{
"success": true
}
Reactions are emoji responses to messages and replies. The toggle endpoint adds a reaction if it does not already exist for the current user, or removes it if it does.
POST https://api.basicops.com/v1/message/<message-id>/reaction
{
"reaction": "👍"
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/message/abc123/reaction \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"reaction": "👍"
}'
POST https://api.basicops.com/v1/reply/<reply-id>/reaction
{
"reaction": "👍"
}
GET https://api.basicops.com/v1/message/<message-id>/reaction
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/message/abc123/reaction
Returns:
{
"success": true,
"data": [
{
"reaction": "👍",
"user": 38
},
...
]
}
GET https://api.basicops.com/v1/reply/<reply-id>/reaction
Returns:
{
"success": true,
"data": [
{
"reaction": "👍",
"user": 38
},
...
]
}
Chats are direct 1:1 conversations between two users.
| Field ID | Type |
|---|---|
| id | Chat identifier |
| user | Identifier of the other user in the chat |
GET https://api.basicops.com/v1/chat
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/chat
Returns:
{
"success": true,
"data": [
{
"id": 7,
"user": 38
},
...
]
}
POST https://api.basicops.com/v1/chat
{
"user": 123
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/chat \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"user": 123
}'
Returns:
{
"success": true,
"data": {
"id": 7,
"viewUrl": "...",
"bounceUrl": "..."
}
}
Group chats are conversations between multiple users.
| Field ID | Type |
|---|---|
| id | Group chat identifier |
| name | Group chat name (String) |
| users | List of user identifiers |
| avatar | Avatar identifier |
GET https://api.basicops.com/v1/groupchat
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/groupchat
Returns:
{
"success": true,
"data": [
{
"id": 12,
"name": "My group",
"users": [38, 25]
},
...
]
}
POST https://api.basicops.com/v1/groupchat
{
"name": "My group",
"users": [123, 456]
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/groupchat \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "My group",
"users": [123, 456]
}'
Returns:
{
"success": true,
"data": {
"id": 12,
"viewUrl": "...",
"bounceUrl": "..."
}
}
PATCH https://api.basicops.com/v1/groupchat/<groupchat-id>
{
"name": "Updated name",
"users": [123, 456, 789]
}
Using CURL:
curl -X PATCH \
https://api.basicops.com/v1/groupchat/12 \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "Updated name",
"users": [123, 456, 789]
}'
Returns:
{
"success": true
}
DELETE https://api.basicops.com/v1/groupchat/<groupchat-id>
Using CURL:
curl -X DELETE \
https://api.basicops.com/v1/groupchat/12 \
-H "Authorization: Bearer <access-token>"
Returns:
{
"success": true
}
Channels are topic-based conversations accessible to team members.
| Field ID | Type |
|---|---|
| id | Channel identifier |
| name | Channel name (String, required) |
| isPublic | Whether the channel is public (Boolean) |
| users | List of user identifiers |
| administrators | List of administrator user identifiers |
| avatar | Avatar identifier |
| includeExternalUsers | Whether external users are included (Boolean) |
| includeClients | Whether clients are included (Boolean) |
GET https://api.basicops.com/v1/channel
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/channel
Returns:
{
"success": true,
"data": [
{
"id": 5,
"name": "general",
"isPublic": true,
"users": [38, 25],
"administrators": [38]
},
...
]
}
POST https://api.basicops.com/v1/channel
{
"name": "general",
"isPublic": true,
"users": [123, 456]
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/channel \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "general",
"isPublic": true,
"users": [123, 456]
}'
Returns:
{
"success": true,
"data": {
"id": 5,
"viewUrl": "...",
"bounceUrl": "..."
}
}
PATCH https://api.basicops.com/v1/channel/<channel-id>
{
"name": "updated-name",
"users": [123, 456, 789]
}
Using CURL:
curl -X PATCH \
https://api.basicops.com/v1/channel/5 \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "updated-name",
"users": [123, 456, 789]
}'
Returns:
{
"success": true
}
DELETE https://api.basicops.com/v1/channel/<channel-id>
Using CURL:
curl -X DELETE \
https://api.basicops.com/v1/channel/5 \
-H "Authorization: Bearer <access-token>"
Returns:
{
"success": true
}
| Field ID | Type |
|---|---|
| id | User identifier |
| firstName | String (required) |
| lastName | String |
| String, valid email address if the user is active, null if the user is deactivated | |
| roles | Roles the user belongs to |
| picture | The user's avatar or null |
You can filter on the following user fields: created and updated.
Please refer to Filters for information about adding filters.
GET https://api.basicops.com/v1/user/<user-id>
or
GET https://api.basicops.com/v1/user/me
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/user/123
Returns:
JSON data:
{
"success": true,
"data": {
"firstName": "Tim",
"lastName": "Dalton",
"roles": [
{
"name": "User Administrator",
"id": 14
}
],
"id": 25,
"email": "tim@testco.com",
"picture": "https://api.basicops.com/v1/user/25/picture/PjS6Bj7ZiKra1tL54rpuKw%3D%3D/download"
}
}
GET https://api.basicops.com/v1/user
Authorization: Bearer <access-token>
Optional parameter:
?name=<first and last name>
?email=<email address>
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/user
Returns
{
"success": true,
"data": [
{
"firstName": "Tim",
"lastName": "Dalton",
"roles": [
{
"name": "User Administrator",
"id": 14
}
],
"id": 25,
"email": "tim@testco.com",
"picture": "https://api.basicops.com/v1/user/25/picture/PjS6Bj7ZiKra1tL54rpuKw%3D%3D/download"
},
...
]
}
POST https://api.basicops.com/v1/webhook
Authorization: Bearer <access-token>
{
"name": "my first webhook via rest",
"url": "https://server.com/hook",
"events": "basicops:task:created,basicops:task:updated,basicops:project:deleted",
"project" : 1234,
"section" : 1234,
"excludeDetails" : false,
"signing": "provided",
"secret": "<your-secret>"
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/webhook \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "my first webhook via rest",
"url": "https://server.com/hook",
"events": "basicops:task:created,basicops:task:updated,basicops:project:deleted",
"project" : 1234,
"section" : 1234,
"excludeDetails" : false,
"signing": "provided",
"secret": "<your-secret>"
}'
The value events is a comma-separated string; each element is composed of the form:
basicops:<collection>:<action>
Collections can be one of the following values: task, project, section, note, user. Action can be one of the following: created, updated, deleted.
The project field is optional. If specified, the webhook will be activated only for objects within the project.
The signing field controls payload signing and can be one of the following values:
"none" — No signing (default). The payload is delivered unsigned."generate" — BasicOps will generate a secret, which is returned in the result. BasicOps will sign each webhook payload using the generated secret. The signature is included in the request header so your server can verify the payload's authenticity."provided" — BasicOps will sign each webhook payload using the secret you provide. The signature is included in the request header so your server can verify the payload's authenticity.When signing is set to "provided", the secret field is required.
PUT https://api.basicops.com/v1/webhook/<webhook-EId>
Authorization: Bearer <access-token>
{
"name": "my first webhook via rest",
"url": "https://my.company.com/webhooks",
"events": "basicops:task:created,basicops:task:updated,basicops:project:deleted",
"excludeDetails" : false,
"signing": "none"
}
Using CURL:
curl -X PUT \
https://api.basicops.com/v1/webhook/<webhook-EId> \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "my first webhook via rest",
"url": "https://my.company.com/webhooks",
"events": "basicops:task:created,basicops:task:updated,basicops:project:deleted",
"excludeDetails" : false,
"signing": "none"
}'
Returns:
{
"success" : true,
"data" : {
"Id" : 8,
"CompanyId" : 2,
"UserId" : 2,
"EId" : "7f646881-2f1d-4266-a071-cbd3b0b0bfca",
"Name" : "my first webhook via rest",
"Url" : "https://server.com/hook",
"Events" : "basicops:task:created,basicops:task:updated,basicops:project:deleted",
"project" : 1234,
"ExcludeDetails" : false
}
}
The EId is used to refer to the webhook in other REST API methods.
DELETE https://api.basicops.com/v1/webhook/<webhook-EId>
CURL:
The following would delete the webhook with an EId of 7f646881-2f1d-4266-a071-cbd3b0b0bfca:
curl -X DELETE \
https://api.basicops.com/v1/webhook/7f646881-2f1d-4266-a071-cbd3b0b0bfca \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
GET https://api.basicops.com/v1/webhook/<webhook-EId>
CURL:
curl -X GET \
https://api.basicops.com/v1/webhook/7f646881-2f1d-4266-a071-cbd3b0b0bfca \
-H "Authorization: Bearer <access-token>"
Returns:
{
"success" : true,
"data" : {
"Id" : 8,
"CompanyId" : 2,
"UserId" : 2,
"EId" : "7f646881-2f1d-4266-a071-cbd3b0b0bfca",
"Name" : "my first webhook via rest",
"Url" : "https://server.com/hook",
"Events" : "basicops:task:created,basicops:task:updated,basicops:project:deleted",
"ExcludeDetails" : false
}
}
GET https://api.basicops.com/v1/webhook
Using CURL:
curl -X GET \
https://api.basicops.com/v1/webhook
-H "Authorization: Bearer <access-token>"
Returns:
{
"success" : true,
"data" : [ {
"Id" : 8,
"CompanyId" : 2,
"UserId" : 2,
"EId" : "7f646881-2f1d-4266-a071-cbd3b0b0bfca",
"Name" : "my first webhook via rest",
"Url" : "https://server.com/hook",
"Events" : "basicops:task:created,basicops:task:updated,basicops:project:deleted",
"ExcludeDetails" : false
} ]
}
When the registered webhook event happens, the BasicOps server will execute an HTTP POST request to the registered webhook URL:
POST https://my.company.com/webhooks
{
"events": [
{
"timestamp": "2017-01-08T21:00:00.000Z",
"event": "basicops:task:updated",
"user": {
"firstName" : "demo",
"lastName" : "user",
"roles" : [ ],
"id" : 25,
"email" : "demo@mailexample.com"
},
"records": [
...
]
}
}
Bulk operations allow creating or updating up to 100 objects in a single request. Each item in the items array follows the same field structure as the corresponding single create/update endpoint. An item that includes an id field will be updated; an item without one will be created.
POST https://api.basicops.com/v1/project/bulk
{
"items": [
{ "title": "Project A", "status": "On Track" },
{ "id": 123, "title": "Updated Project B" }
]
}
POST https://api.basicops.com/v1/task/bulk
{
"items": [
{ "title": "Task A", "project": 6 },
{ "id": 73, "title": "Updated Task B" }
]
}
POST https://api.basicops.com/v1/section/bulk
{
"items": [
{ "name": "Section A", "project": 6 }
]
}
POST https://api.basicops.com/v1/note/bulk
{
"items": [
{ "name": "Note A", "project": 6 }
]
}
POST https://api.basicops.com/v1/project/bulk
{
"items": [
{ "title": "Template A", "isTemplate": true }
]
}
Returns:
{
"success": true,
"data": {
"created": [147, 148],
"updated": [73]
}
}
Uploads a file and returns an attachment identifier that can be used to attach the file to a task, a message, or a reply. The identifier can only be used once.
POST https://api.basicops.com/v1/upload
Content-Disposition: attachment; filename="filename.ext"
Content-Type: mime-type
...binary file content...
Using CURL:
curl -X POST \
https://api.basicops.com/v1/upload \
-H "Authorization: Bearer <access-token>" \
-H "Content-Disposition: attachment; filename=\"sample.png\"" \
--data-binary "@sample.png"
Returns:
{
"success": true,
"data": {
"id": "8dMfbZuoDwmxVvx0W2rbWA=="
}
}
Uploads a file from a remote URL and returns an attachment identifier that can be used to attach the file to a task, a message, or a reply. The identifier can only be used once.
POST https://api.basicops.com/v1/uploadurl
{
"url": "https://example.com/file.pdf"
}
Using CURL:
curl -X POST \
https://api.basicops.com/v1/uploadurl \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/file.pdf"
}'
Returns:
{
"success": true,
"data": {
"id": "8dMfbZuoDwmxVvx0W2rbWA=="
}
}
Returns a pre-signed URL that can be used to download the attachment directly. The URL is valid for 15 minutes.
GET https://api.basicops.com/v1/attachment/<attachment-id>/url
Using CURL:
curl -k -H "Authorization: Bearer <access-token>" https://api.basicops.com/v1/attachment/8dMfbZuoDwmxVvx0W2rbWA==/url
Returns:
{
"success": true,
"data": {
"url": "https://..."
}
}
Downloads the binary content of an attachment.
GET https://api.basicops.com/v1/attachment/<attachment-id>/download
Optional parameter:
?maxSize=<max-bytes>
The HTTP response contains the file to download:
200 OK
Content-Disposition: attachment; filename="sample.png"
Content-Length: length
Content-Type: image/png
...binary file data....
Link endpoints return a shareable URL for navigating directly to an object in the BasicOps interface.
GET https://api.basicops.com/v1/project/<project-id>/link
GET https://api.basicops.com/v1/task/<task-id>/link
GET https://api.basicops.com/v1/note/<note-id>/link
GET https://api.basicops.com/v1/message/<message-id>/link
GET https://api.basicops.com/v1/reply/<reply-id>/link
All link endpoints return:
{
"success": true,
"data": {
"url": "https://app.basicops.com/..."
}
}