Content Watcher Service
API Reference
Path Table
| Method | Path | Description |
|---|---|---|
| PUT | /v1/asset/upload | Upload asset files [deprecated; use POST /v2/asset/upload instead] |
| POST | /v2/asset/upload | Upload asset files |
| POST | /v1/content/{msaId}/broadcast | Create DSNP Broadcast for user |
| POST | /v1/content/{msaId}/reply | Create DSNP Reply for user |
| POST | /v1/content/{msaId}/reaction | Create DSNP Reaction for user |
| PUT | /v1/content/{msaId} | Update DSNP Content for user |
| DELETE | /v1/content/{msaId} | Delete DSNP Content for user [deprecated; use POST /v2/content/{msaId}/tombstones instead] |
| POST | /v2/content/{msaId}/on-chain | Create on-chain content for a given schema |
| POST | /v2/content/batchAnnouncement | Create off-chain batch content announcements |
| POST | /v2/content/{msaId}/tombstones | Post an announcement that previously-announced content is invalid/revoked |
| POST | /v3/content/batchAnnouncement | Upload files and create batch announcements |
| POST | /v3/content/on-chain | Create on-chain content for a given schema |
| PUT | /v1/profile/{msaId} | Update a user's Profile |
| GET | /healthz | Check the health status of the service |
| GET | /livez | Check the live status of the service |
| GET | /readyz | Check the ready status of the service |
| GET | /dev/request/{jobId} | Get a Job given a jobId |
| POST | /dev/dummy/announcement/{queueType}/{count} | Create dummy announcement data |
| GET | /metrics |
Reference Table
Path Details
[PUT]/v1/asset/upload
-
Summary
Upload asset files [deprecated; usePOST /v2/asset/uploadinstead] -
Operation id
AssetControllerV1_assetUpload_v1
RequestBody
- multipart/form-data
{
files?: string[]
}
Responses
-
400 Bad request, eg too many files or file too large
-
2XX
application/json
{
assetIds?: string[]
}
[POST]/v2/asset/upload
-
Summary
Upload asset files -
Operation id
AssetControllerV2_uploadFile_v2
RequestBody
- multipart/form-data
{
files?: string[]
}
Responses
- 2XX
application/json
{
files: {
cid?: string
error?: string
}[]
}
[POST]/v1/content/{msaId}/broadcast
-
Summary
Create DSNP Broadcast for user -
Operation id
ContentControllerV1_broadcast_v1
RequestBody
- application/json
{
content: {
// Text content of the note
content: string
// The time of publishing ISO8601
published: string
assets: {
// Determines if this asset is a link
isLink?: boolean
references: {
// The unique Id for the uploaded asset
referenceId: string
// A hint as to the rendering height in device-independent pixels for image or video assets
height?: number
// A hint as to the rendering width in device-independent pixels for image or video asset
width?: number
// Approximate duration of the video or audio asset
duration?: string
}[]
// The display name for the file
name?: string
// The URL for the given content
href?: string
}[]
// The display name for the activity type
name?: string
tag: {
// Identifies the tag type
type: #/components/schemas/TagTypeEnum
// The text of the tag
name?: string
// Link to the user mentioned
mentionedId?: string
}[]
location: {
// The units for radius and altitude (defaults to meters)
units?: #/components/schemas/UnitTypeEnum
// The display name for the location
name: string
// The accuracy of the coordinates as a percentage. (e.g. 94.0 means 94.0% accurate)
accuracy?: number
// The altitude of the location
altitude?: number
// The latitude of the location
latitude?: number
// The longitude of the location
longitude?: number
// The area around the given point that comprises the location
radius?: number
}
}
}
Responses
- 2XX
application/json
{
referenceId: string
}
[POST]/v1/content/{msaId}/reply
-
Summary
Create DSNP Reply for user -
Operation id
ContentControllerV1_reply_v1
RequestBody
- application/json
{
// Target DSNP Content URI
inReplyTo: string
content: {
// Text content of the note
content: string
// The time of publishing ISO8601
published: string
assets: {
// Determines if this asset is a link
isLink?: boolean
references: {
// The unique Id for the uploaded asset
referenceId: string
// A hint as to the rendering height in device-independent pixels for image or video assets
height?: number
// A hint as to the rendering width in device-independent pixels for image or video asset
width?: number
// Approximate duration of the video or audio asset
duration?: string
}[]
// The display name for the file
name?: string
// The URL for the given content
href?: string
}[]
// The display name for the activity type
name?: string
tag: {
// Identifies the tag type
type: #/components/schemas/TagTypeEnum
// The text of the tag
name?: string
// Link to the user mentioned
mentionedId?: string
}[]
location: {
// The units for radius and altitude (defaults to meters)
units?: #/components/schemas/UnitTypeEnum
// The display name for the location
name: string
// The accuracy of the coordinates as a percentage. (e.g. 94.0 means 94.0% accurate)
accuracy?: number
// The altitude of the location
altitude?: number
// The latitude of the location
latitude?: number
// The longitude of the location
longitude?: number
// The area around the given point that comprises the location
radius?: number
}
}
}
Responses
- 2XX
application/json
{
referenceId: string
}
[POST]/v1/content/{msaId}/reaction
-
Summary
Create DSNP Reaction for user -
Operation id
ContentControllerV1_reaction_v1
RequestBody
- application/json
{
// the encoded reaction emoji
emoji: string
// Indicates whether the emoji should be applied and if so, at what strength
apply: number
// Target DSNP Content URI
inReplyTo: string
}
Responses
- 2XX
application/json
{
referenceId: string
}
[PUT]/v1/content/{msaId}
-
Summary
Update DSNP Content for user -
Operation id
ContentControllerV1_update_v1
RequestBody
- application/json
{
// Target announcement type
targetAnnouncementType: #/components/schemas/ModifiableAnnouncementType
// Target DSNP Content Hash
targetContentHash: string
content: {
// Text content of the note
content: string
// The time of publishing ISO8601
published: string
assets: {
// Determines if this asset is a link
isLink?: boolean
references: {
// The unique Id for the uploaded asset
referenceId: string
// A hint as to the rendering height in device-independent pixels for image or video assets
height?: number
// A hint as to the rendering width in device-independent pixels for image or video asset
width?: number
// Approximate duration of the video or audio asset
duration?: string
}[]
// The display name for the file
name?: string
// The URL for the given content
href?: string
}[]
// The display name for the activity type
name?: string
tag: {
// Identifies the tag type
type: #/components/schemas/TagTypeEnum
// The text of the tag
name?: string
// Link to the user mentioned
mentionedId?: string
}[]
location: {
// The units for radius and altitude (defaults to meters)
units?: #/components/schemas/UnitTypeEnum
// The display name for the location
name: string
// The accuracy of the coordinates as a percentage. (e.g. 94.0 means 94.0% accurate)
accuracy?: number
// The altitude of the location
altitude?: number
// The latitude of the location
latitude?: number
// The longitude of the location
longitude?: number
// The area around the given point that comprises the location
radius?: number
}
}
}
Responses
- 2XX
application/json
{
referenceId: string
}
[DELETE]/v1/content/{msaId}
-
Summary
Delete DSNP Content for user [deprecated; usePOST /v2/content/{msaId}/tombstonesinstead] -
Operation id
ContentControllerV1_delete_v1
RequestBody
- application/json
{
// Target announcement type
targetAnnouncementType: #/components/schemas/ModifiableAnnouncementType
// Target DSNP Content Hash
targetContentHash: string
}
Responses
- 2XX
application/json
{
referenceId: string
}
[POST]/v2/content/{msaId}/on-chain
-
Summary
Create on-chain content for a given schema -
Operation id
ContentControllerV2_postContent_v2
RequestBody
- application/json
{
// Intent name to resolve the latest on-chain schema for publishing.
// Format: <namespace>.<name>
// @example: e-e.on-chain
intentName?: string
// Schema ID of the OnChain schema this message is being posted to.
// @example: 16
schemaId?: number
// Payload bytes encoded as a hex string using the schema defined by `schemaId`
payload: string
// The time of publishing ISO8601
published: string
}
Responses
- 410 Deprecated endpoint
[POST]/v2/content/batchAnnouncement
-
Summary
Create off-chain batch content announcements -
Operation id
ContentControllerV2_postBatches_v2
RequestBody
- application/json
{
batchFiles: {
// Schema ID of batched off-chain content
schemaId: number
// CIDv1 of off-chain batch file
cid: string
}[]
}
Responses
- 2XX
application/json
{
referenceId: string
}
[POST]/v2/content/{msaId}/tombstones
-
Summary
Post an announcement that previously-announced content is invalid/revoked -
Operation id
ContentControllerV2_postTombstone_v2
RequestBody
- application/json
{
// Target announcement type
targetAnnouncementType: #/components/schemas/ModifiableAnnouncementType
// Target DSNP Content Hash
targetContentHash: string
}
Responses
- 2XX
application/json
{
referenceId: string
}
[POST]/v3/content/batchAnnouncement
-
Summary
Upload files and create batch announcements -
Operation id
ContentControllerV3_postUploadBatchAnnouncement_v3 -
Description
Upload files with their corresponding schema IDs to create batch announcements. Each file must be accompanied by a schemaId field.
RequestBody
- multipart/form-data
{
files?: string[]
}
Responses
- 200 All files uploaded and batch announcements created successfully
application/json
{
files: {
// Unique identifier for tracking the batch announcement
referenceId?: string
// IPFS CID of the uploaded file
cid?: string
// Error message if the file upload or batch creation failed. Will be undefined in successful responses since this endpoint uses all-or-nothing error handling.
error?: string
}[]
}
- 207 Partial success - some files uploaded successfully, others failed
application/json
{
files: {
// Unique identifier for tracking the batch announcement
referenceId?: string
// IPFS CID of the uploaded file
cid?: string
// Error message if the file upload or batch creation failed. Will be undefined in successful responses since this endpoint uses all-or-nothing error handling.
error?: string
}[]
}
-
400 Bad request - validation errors (no files, mismatched schema IDs, etc.)
-
500 Internal server error - all uploads failed or batch creation failed
application/json
{
files: {
// Unique identifier for tracking the batch announcement
referenceId?: string
// IPFS CID of the uploaded file
cid?: string
// Error message if the file upload or batch creation failed. Will be undefined in successful responses since this endpoint uses all-or-nothing error handling.
error?: string
}[]
}
[POST]/v3/content/on-chain
-
Summary
Create on-chain content for a given schema -
Operation id
ContentControllerV3_postOnChainContent_v3
RequestBody
- application/json
{
// Payload bytes encoded as a hex string using the schema defined by `schemaId`
payload: string
// Intent name to resolve the latest on-chain schema for publishing.
// Format: <namespace>.<name>
// @example: e-e.on-chain
intentName?: string
// Optional MSA ID to that this request is on behalf of.
// @example: 1234
// @example: '4321'
msaId: {
}
// Schema ID of the OnChain schema this message is being posted to.
// @example: 16
schemaId?: number
// The time of publishing ISO8601
published: string
}
Responses
- 400
application/json
{
}
- 401
application/json
{
}
- 413
application/json
{
}
- 422
application/json
{
}
- 2XX
application/json
{
referenceId: string
}
[PUT]/v1/profile/{msaId}
-
Summary
Update a user's Profile -
Operation id
ProfileControllerV1_profile_v1
RequestBody
- application/json
{
profile: {
icon: {
// The unique Id for the uploaded asset
referenceId: string
// A hint as to the rendering height in device-independent pixels for image or video assets
height?: number
// A hint as to the rendering width in device-independent pixels for image or video asset
width?: number
// Approximate duration of the video or audio asset
duration?: string
}[]
// Used as a plain text biography of the profile
summary?: string
// The time of publishing ISO8601
published?: string
// The display name for the activity type
name?: string
tag: {
// Identifies the tag type
type: #/components/schemas/TagTypeEnum
// The text of the tag
name?: string
// Link to the user mentioned
mentionedId?: string
}[]
location: {
// The units for radius and altitude (defaults to meters)
units?: #/components/schemas/UnitTypeEnum
// The display name for the location
name: string
// The accuracy of the coordinates as a percentage. (e.g. 94.0 means 94.0% accurate)
accuracy?: number
// The altitude of the location
altitude?: number
// The latitude of the location
latitude?: number
// The longitude of the location
longitude?: number
// The area around the given point that comprises the location
radius?: number
}
}
}
Responses
- 202
[GET]/healthz
-
Summary
Check the health status of the service -
Operation id
HealthController_healthz
Responses
- 200 Service is healthy
[GET]/livez
-
Summary
Check the live status of the service -
Operation id
HealthController_livez
Responses
- 200 Service is live
[GET]/readyz
-
Summary
Check the ready status of the service -
Operation id
HealthController_readyz
Responses
- 200 Service is ready
[GET]/dev/request/{jobId}
-
Summary
Get a Job given a jobId -
Operation id
DevelopmentControllerV1_requestJob -
Description
ONLY enabled when ENVIRONMENT="dev".
Responses
- 200
[POST]/dev/dummy/announcement/{queueType}/{count}
-
Summary
Create dummy announcement data -
Operation id
DevelopmentControllerV1_populate -
Description
ONLY enabled when ENVIRONMENT="dev".
Responses
- 201
[GET]/metrics
- Operation id
PrometheusController_index
Responses
- 200
References
#/components/schemas/FilesUploadDto
{
files?: string[]
}
#/components/schemas/UploadResponseDto
{
assetIds?: string[]
}
#/components/schemas/FileResponseDto
{
cid?: string
error?: string
}
#/components/schemas/UploadResponseDtoV2
{
files: {
cid?: string
error?: string
}[]
}
#/components/schemas/AssetReferenceDto
{
// The unique Id for the uploaded asset
referenceId: string
// A hint as to the rendering height in device-independent pixels for image or video assets
height?: number
// A hint as to the rendering width in device-independent pixels for image or video asset
width?: number
// Approximate duration of the video or audio asset
duration?: string
}
#/components/schemas/AssetDto
{
// Determines if this asset is a link
isLink?: boolean
references: {
// The unique Id for the uploaded asset
referenceId: string
// A hint as to the rendering height in device-independent pixels for image or video assets
height?: number
// A hint as to the rendering width in device-independent pixels for image or video asset
width?: number
// Approximate duration of the video or audio asset
duration?: string
}[]
// The display name for the file
name?: string
// The URL for the given content
href?: string
}
#/components/schemas/TagTypeEnum
// Identifies the tag type
enum[mention, hashtag]
#/components/schemas/TagDto
{
// Identifies the tag type
type: #/components/schemas/TagTypeEnum
// The text of the tag
name?: string
// Link to the user mentioned
mentionedId?: string
}
#/components/schemas/UnitTypeEnum
// The units for radius and altitude (defaults to meters)
enum[cm, m, km, inches, feet, miles]
#/components/schemas/LocationDto
{
// The units for radius and altitude (defaults to meters)
units?: #/components/schemas/UnitTypeEnum
// The display name for the location
name: string
// The accuracy of the coordinates as a percentage. (e.g. 94.0 means 94.0% accurate)
accuracy?: number
// The altitude of the location
altitude?: number
// The latitude of the location
latitude?: number
// The longitude of the location
longitude?: number
// The area around the given point that comprises the location
radius?: number
}
#/components/schemas/NoteActivityDto
{
// Text content of the note
content: string
// The time of publishing ISO8601
published: string
assets: {
// Determines if this asset is a link
isLink?: boolean
references: {
// The unique Id for the uploaded asset
referenceId: string
// A hint as to the rendering height in device-independent pixels for image or video assets
height?: number
// A hint as to the rendering width in device-independent pixels for image or video asset
width?: number
// Approximate duration of the video or audio asset
duration?: string
}[]
// The display name for the file
name?: string
// The URL for the given content
href?: string
}[]
// The display name for the activity type
name?: string
tag: {
// Identifies the tag type
type: #/components/schemas/TagTypeEnum
// The text of the tag
name?: string
// Link to the user mentioned
mentionedId?: string
}[]
location: {
// The units for radius and altitude (defaults to meters)
units?: #/components/schemas/UnitTypeEnum
// The display name for the location
name: string
// The accuracy of the coordinates as a percentage. (e.g. 94.0 means 94.0% accurate)
accuracy?: number
// The altitude of the location
altitude?: number
// The latitude of the location
latitude?: number
// The longitude of the location
longitude?: number
// The area around the given point that comprises the location
radius?: number
}
}
#/components/schemas/BroadcastDto
{
content: {
// Text content of the note
content: string
// The time of publishing ISO8601
published: string
assets: {
// Determines if this asset is a link
isLink?: boolean
references: {
// The unique Id for the uploaded asset
referenceId: string
// A hint as to the rendering height in device-independent pixels for image or video assets
height?: number
// A hint as to the rendering width in device-independent pixels for image or video asset
width?: number
// Approximate duration of the video or audio asset
duration?: string
}[]
// The display name for the file
name?: string
// The URL for the given content
href?: string
}[]
// The display name for the activity type
name?: string
tag: {
// Identifies the tag type
type: #/components/schemas/TagTypeEnum
// The text of the tag
name?: string
// Link to the user mentioned
mentionedId?: string
}[]
location: {
// The units for radius and altitude (defaults to meters)
units?: #/components/schemas/UnitTypeEnum
// The display name for the location
name: string
// The accuracy of the coordinates as a percentage. (e.g. 94.0 means 94.0% accurate)
accuracy?: number
// The altitude of the location
altitude?: number
// The latitude of the location
latitude?: number
// The longitude of the location
longitude?: number
// The area around the given point that comprises the location
radius?: number
}
}
}
#/components/schemas/AnnouncementResponseDto
{
referenceId: string
}
#/components/schemas/ReplyDto
{
// Target DSNP Content URI
inReplyTo: string
content: {
// Text content of the note
content: string
// The time of publishing ISO8601
published: string
assets: {
// Determines if this asset is a link
isLink?: boolean
references: {
// The unique Id for the uploaded asset
referenceId: string
// A hint as to the rendering height in device-independent pixels for image or video assets
height?: number
// A hint as to the rendering width in device-independent pixels for image or video asset
width?: number
// Approximate duration of the video or audio asset
duration?: string
}[]
// The display name for the file
name?: string
// The URL for the given content
href?: string
}[]
// The display name for the activity type
name?: string
tag: {
// Identifies the tag type
type: #/components/schemas/TagTypeEnum
// The text of the tag
name?: string
// Link to the user mentioned
mentionedId?: string
}[]
location: {
// The units for radius and altitude (defaults to meters)
units?: #/components/schemas/UnitTypeEnum
// The display name for the location
name: string
// The accuracy of the coordinates as a percentage. (e.g. 94.0 means 94.0% accurate)
accuracy?: number
// The altitude of the location
altitude?: number
// The latitude of the location
latitude?: number
// The longitude of the location
longitude?: number
// The area around the given point that comprises the location
radius?: number
}
}
}
#/components/schemas/ReactionDto
{
// the encoded reaction emoji
emoji: string
// Indicates whether the emoji should be applied and if so, at what strength
apply: number
// Target DSNP Content URI
inReplyTo: string
}
#/components/schemas/ModifiableAnnouncementType
// Target announcement type
enum[broadcast, reply]
#/components/schemas/UpdateDto
{
// Target announcement type
targetAnnouncementType: #/components/schemas/ModifiableAnnouncementType
// Target DSNP Content Hash
targetContentHash: string
content: {
// Text content of the note
content: string
// The time of publishing ISO8601
published: string
assets: {
// Determines if this asset is a link
isLink?: boolean
references: {
// The unique Id for the uploaded asset
referenceId: string
// A hint as to the rendering height in device-independent pixels for image or video assets
height?: number
// A hint as to the rendering width in device-independent pixels for image or video asset
width?: number
// Approximate duration of the video or audio asset
duration?: string
}[]
// The display name for the file
name?: string
// The URL for the given content
href?: string
}[]
// The display name for the activity type
name?: string
tag: {
// Identifies the tag type
type: #/components/schemas/TagTypeEnum
// The text of the tag
name?: string
// Link to the user mentioned
mentionedId?: string
}[]
location: {
// The units for radius and altitude (defaults to meters)
units?: #/components/schemas/UnitTypeEnum
// The display name for the location
name: string
// The accuracy of the coordinates as a percentage. (e.g. 94.0 means 94.0% accurate)
accuracy?: number
// The altitude of the location
altitude?: number
// The latitude of the location
latitude?: number
// The longitude of the location
longitude?: number
// The area around the given point that comprises the location
radius?: number
}
}
}
#/components/schemas/TombstoneDto
{
// Target announcement type
targetAnnouncementType: #/components/schemas/ModifiableAnnouncementType
// Target DSNP Content Hash
targetContentHash: string
}
#/components/schemas/OnChainContentDto
{
// Intent name to resolve the latest on-chain schema for publishing.
// Format: <namespace>.<name>
// @example: e-e.on-chain
intentName?: string
// Schema ID of the OnChain schema this message is being posted to.
// @example: 16
schemaId?: number
// Payload bytes encoded as a hex string using the schema defined by `schemaId`
payload: string
// The time of publishing ISO8601
published: string
}
#/components/schemas/BatchFileDto
{
// Schema ID of batched off-chain content
schemaId: number
// CIDv1 of off-chain batch file
cid: string
}
#/components/schemas/BatchFilesDto
{
batchFiles: {
// Schema ID of batched off-chain content
schemaId: number
// CIDv1 of off-chain batch file
cid: string
}[]
}
#/components/schemas/BatchAnnouncementDto
{
// Unique identifier for tracking the batch announcement
referenceId?: string
// IPFS CID of the uploaded file
cid?: string
// Error message if the file upload or batch creation failed. Will be undefined in successful responses since this endpoint uses all-or-nothing error handling.
error?: string
}
#/components/schemas/BatchAnnouncementResponseDto
{
files: {
// Unique identifier for tracking the batch announcement
referenceId?: string
// IPFS CID of the uploaded file
cid?: string
// Error message if the file upload or batch creation failed. Will be undefined in successful responses since this endpoint uses all-or-nothing error handling.
error?: string
}[]
}
#/components/schemas/OnChainContentDtoV2
{
// Payload bytes encoded as a hex string using the schema defined by `schemaId`
payload: string
// Intent name to resolve the latest on-chain schema for publishing.
// Format: <namespace>.<name>
// @example: e-e.on-chain
intentName?: string
// Optional MSA ID to that this request is on behalf of.
// @example: 1234
// @example: '4321'
msaId: {
}
// Schema ID of the OnChain schema this message is being posted to.
// @example: 16
schemaId?: number
// The time of publishing ISO8601
published: string
}
#/components/schemas/BadRequestException
{
}
#/components/schemas/UnauthorizedException
{
}
#/components/schemas/PayloadTooLargeException
{
}
#/components/schemas/UnprocessableEntityException
{
}
#/components/schemas/ProfileActivityDto
{
icon: {
// The unique Id for the uploaded asset
referenceId: string
// A hint as to the rendering height in device-independent pixels for image or video assets
height?: number
// A hint as to the rendering width in device-independent pixels for image or video asset
width?: number
// Approximate duration of the video or audio asset
duration?: string
}[]
// Used as a plain text biography of the profile
summary?: string
// The time of publishing ISO8601
published?: string
// The display name for the activity type
name?: string
tag: {
// Identifies the tag type
type: #/components/schemas/TagTypeEnum
// The text of the tag
name?: string
// Link to the user mentioned
mentionedId?: string
}[]
location: {
// The units for radius and altitude (defaults to meters)
units?: #/components/schemas/UnitTypeEnum
// The display name for the location
name: string
// The accuracy of the coordinates as a percentage. (e.g. 94.0 means 94.0% accurate)
accuracy?: number
// The altitude of the location
altitude?: number
// The latitude of the location
latitude?: number
// The longitude of the location
longitude?: number
// The area around the given point that comprises the location
radius?: number
}
}
#/components/schemas/ProfileDto
{
profile: {
icon: {
// The unique Id for the uploaded asset
referenceId: string
// A hint as to the rendering height in device-independent pixels for image or video assets
height?: number
// A hint as to the rendering width in device-independent pixels for image or video asset
width?: number
// Approximate duration of the video or audio asset
duration?: string
}[]
// Used as a plain text biography of the profile
summary?: string
// The time of publishing ISO8601
published?: string
// The display name for the activity type
name?: string
tag: {
// Identifies the tag type
type: #/components/schemas/TagTypeEnum
// The text of the tag
name?: string
// Link to the user mentioned
mentionedId?: string
}[]
location: {
// The units for radius and altitude (defaults to meters)
units?: #/components/schemas/UnitTypeEnum
// The display name for the location
name: string
// The accuracy of the coordinates as a percentage. (e.g. 94.0 means 94.0% accurate)
accuracy?: number
// The altitude of the location
altitude?: number
// The latitude of the location
latitude?: number
// The longitude of the location
longitude?: number
// The area around the given point that comprises the location
radius?: number
}
}
}