Skip to content

`POST /v1/orgs/{org}/proposals/{proposal_id}/comments`.

POST
/v1/orgs/{org}/proposals/{proposal_id}/comments
curl --request POST \
--url https://api.updawg.net/v1/orgs/example/proposals/example/comments \
--header 'Content-Type: application/json' \
--data '{ "body": "example" }'
org
required
string

Organization slug.

proposal_id
required
string

The prp_… id.

Media typeapplication/json
object
body

Option so that a missing field reaches [Body::parse] rather than axum’s body rejection — see the note in [create]. It is still required; what is optional is which of the three ways of not sending it the caller chose.

string | null
Examplegenerated
{
"body": "example"
}

Written. mentions lists the addresses that resolved to members of this organization; one belonging to somebody elsewhere and one belonging to nobody produce the same answer.

Media typeapplication/json
object
author
required
object
email
required
string
id
required
string
name
string | null
body
required
string
id
required
string
mentions
required

Who this comment addressed, as resolved when it was written.

Always present, empty when there were none, because a portal that has to tell null from [] will get it wrong once.

Array<object>
object
email
required
string
id
required
string
name
string | null
written_at
required
string format: date-time
Examplegenerated
{
"author": {
"email": "example",
"id": "example",
"name": "example"
},
"body": "example",
"id": "example",
"mentions": [
{
"email": "example",
"id": "example",
"name": "example"
}
],
"written_at": "2026-04-15T12:00:00Z"
}

An empty body.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

No session.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

Refused: no CSRF token or not this session’s, or not permitted for this role.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

No such proposal here.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}

Over the organization’s request limit. Retry-After says when to try again; RateLimit-Limit is the burst.

Media typeapplication/json
object
detail
string | null
status
required
integer format: int32
title
required
string
type
required
string
Examplegenerated
{
"detail": "example",
"status": 1,
"title": "example",
"type": "example"
}