Task Attachments
Ask
List task attachments
GET/v1/teams/{teamId}/days/{dayId}/tasks/{taskId}/attachmentsLists safe attachment metadata for a visible Task.
Required scopes: task:read
Parameters
path.teamIdrequired | string:uuidTeam identifier. |
|---|---|
path.dayIdrequired | string:uuidDay identifier. |
path.taskIdrequired | string:uuidTask identifier. |
query.limit | integerMaximum number of records to return. Defaults to 50 and is capped at 200. |
query.cursor | stringCursor returned by page.nextCursor from the previous list response. |
Response 200
data | object[] |
|---|---|
data[].id | string:uuidTask attachment identifier. |
data[].orgId | string:uuidOrganization identifier. |
data[].taskId | string:uuidParent Task identifier. |
data[].dayId | string:uuidAssociated Day identifier used for activity and sync. |
data[].fileName | stringOriginal attachment file name. |
data[].contentType | stringAttachment media type. |
data[].sizeBytes | integerAttachment size in bytes. |
data[].createdBy | string:uuidRoadOps user ID that added the attachment. |
data[].createdAt | string:date-timeUTC attachment creation timestamp. |
data[].isDeleted | booleanSoft-delete flag. |
data[].version | integerCurrent attachment aggregate version. |
data[].cursor | integerLatest cursor projected into this attachment. |
page | object |
page.limit | integerMaximum number of records returned in this page. |
page.nextCursor | string | nullCursor to pass as the next request's cursor query parameter, or null when there are no more results. |
Request attachment upload
POST/v1/teams/{teamId}/days/{dayId}/tasks/{taskId}/attachments/uploadsReturns a short-lived private upload URL for a Task attachment.
Required scopes: task:write
Parameters
path.teamIdrequired | string:uuidTeam identifier. |
|---|---|
path.dayIdrequired | string:uuidDay identifier. |
path.taskIdrequired | string:uuidTask identifier. |
Request body (application/json)
fileNamerequired | stringOriginal attachment file name. |
|---|---|
contentTyperequired | stringAttachment media type. |
sizeBytesrequired | integerAttachment size in bytes. |
Response 200
attachmentId | string:uuid |
|---|---|
fileName | string |
storageKey | string |
upload | object |
upload.url | string:uri |
upload.expiresAt | string:date-time |
upload.headers | object |
Create attachment metadata
POST/v1/teams/{teamId}/days/{dayId}/tasks/{taskId}/attachmentsRegisters a successfully uploaded Task attachment.
Required scopes: task:write
Parameters
path.teamIdrequired | string:uuidTeam identifier. |
|---|---|
path.dayIdrequired | string:uuidDay identifier. |
path.taskIdrequired | string:uuidTask identifier. |
header.Idempotency-Key | string:uuidOptional caller-generated UUID used to make mutation retries safe. Reuse the same UUID only when retrying the same request. |
Request body (application/json)
fileNamerequired | stringOriginal attachment file name. |
|---|---|
contentTyperequired | stringAttachment media type. |
sizeBytesrequired | integerAttachment size in bytes. |
attachmentIdrequired | string:uuid |
storageKeyrequired | string |
Response 202
commandId | string:uuidCommand identifier accepted into the RoadOps command ledger. |
|---|---|
resourceId | string:uuidIdentifier of the resource targeted by the command. |
resourceType | stringResource type targeted by the command. |
status | "applied"Command dispatch status. |
aggregateVersion | integerAggregate version produced by the accepted command. |
cursor | integerCursor for the accepted update. Refetch until returned records reach this cursor. |
links | object |
links.refetch | stringRelative URL to refetch the affected resource. |
Download a task attachment
GET/v1/teams/{teamId}/days/{dayId}/tasks/{taskId}/attachments/{attachmentId}/downloadReturns a short-lived private download URL.
Required scopes: task:read
Parameters
path.teamIdrequired | string:uuidTeam identifier. |
|---|---|
path.dayIdrequired | string:uuidDay identifier. |
path.taskIdrequired | string:uuidTask identifier. |
path.attachmentIdrequired | string:uuidAttachment identifier. |
Response 200
url | string:uri |
|---|---|
expiresAt | string:date-time |
fileName | string |
contentType | string |
sizeBytes | integer |
Delete a task attachment
DELETE/v1/teams/{teamId}/days/{dayId}/tasks/{taskId}/attachments/{attachmentId}Deletes Task attachment metadata.
Required scopes: task:write
Parameters
path.teamIdrequired | string:uuidTeam identifier. |
|---|---|
path.dayIdrequired | string:uuidDay identifier. |
path.taskIdrequired | string:uuidTask identifier. |
path.attachmentIdrequired | string:uuidAttachment identifier. |
header.Idempotency-Key | string:uuidOptional caller-generated UUID used to make mutation retries safe. Reuse the same UUID only when retrying the same request. |
Response 202
commandId | string:uuidCommand identifier accepted into the RoadOps command ledger. |
|---|---|
resourceId | string:uuidIdentifier of the resource targeted by the command. |
resourceType | stringResource type targeted by the command. |
status | "applied"Command dispatch status. |
aggregateVersion | integerAggregate version produced by the accepted command. |
cursor | integerCursor for the accepted update. Refetch until returned records reach this cursor. |
links | object |
links.refetch | stringRelative URL to refetch the affected resource. |