API V1 (v0.2)
Download OpenAPI specification:Download
A RestFull API for Decidim, to be able to CRUD resources from Decidim.
Get a token from our /oauth/token
routes,
following OAuth specs on Credential Flows or Resource Owner Password Credentials Flow.
Permissions
A permission system is attached to the created OAuth application, that is designed in two levels:
- scope: a broad permission to access a collection of endpoints
- abilities: a fine grained permission system that allow actions.
The scopes and abilities are manageable in your System Admin Panel.
Multi-tenant
Decidim is multi-tenant, and this API supports it.
- The
system
scope endpoints are available in any tenant - The tenant
host
attribute will be used to guess which tenant you are requesting. For example, given a tenantexample.org
andfoobar.org
, the endpointexample.org/oauth/token
will ask a token for the example.org organizationfoobar.org/oauth/token
for foobar.org.
Use OAuth to get tokens and interact with the API. You can use machine-to-machine tokens, or user token directly with the API.
- Machine-to-machine: Client Credential Flow
- User: Resource Owner Password Credential Flow, with impersonation or login
Request a OAuth token throught ROPC
Create a oauth token for the given scopes
Request Body schema: application/jsonrequired
grant_type required | string Value: "client_credentials" Client Credential Flow, for machine-to-machine |
client_id required | string OAuth application Client Id |
client_secret required | string OAuth application Client Secret |
scope required | string Enum: "public" "spaces" "system" "proposals" "meetings" "debates" "pages" "blogs" "oauth" Requested scopes |
Responses
Request samples
- Payload
{- "grant_type": "client_credentials",
- "client_id": "string",
- "client_secret": "string",
- "scope": "public"
}
Response samples
- 200
- 400
{- "access_token": "8M25D5p6rWd-yVYNIEJtI-KKayBdnx4VomTwu7Bg09s",
- "token_type": "Bearer",
- "expires_in": 7200,
- "scope": "public proposals",
- "created_at": 1751351082
}
Introspect a OAuth token
Get given oauth token details
Authorizations:
Request Body schema: application/jsonrequired
token required | string |
Responses
Request samples
- Payload
{- "token": "string"
}
Response samples
- 200
- 401
{- "active": true,
- "scope": "public",
- "client_id": "yy1zvAQtoW8EU_rTxLGKNcVaIMwsLS3oBSQyxMdpEak",
- "token_type": "Bearer",
- "exp": 3505380440,
- "iat": 1751351020,
- "sub": 3993,
- "resource": {
- "id": "8368",
- "type": "user",
- "attributes": {
- "email": "user447@example.org",
- "name": "Ross Hoppe",
- "created_at": "2025-07-01T06:23:40Z",
- "updated_at": "2025-07-01T06:23:40Z",
- "locale": "en"
}, - "relationships": { },
- "meta": {
- "blocked": false,
- "locked": false
}
}
}
Organization controls the main configuration of the platform. As you can host many Decidim in the same platform, organizations allows you to setup:
- host: the domain name used by your decidim
- secondary_hosts: other domain names, used for redirecting to the correct organizati
The current organization is guessed from the host of the request, you can thus query the API on different hosts to gather organization's related data.
Organization
Show organization
Authorizations:
path Parameters
id required | string The ID of the organization |
query Parameters
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
Responses
Response samples
- 200
- 400
- 403
- 404
- 500
{- "data": {
- "id": "4146",
- "type": "organization",
- "attributes": {
- "host": "249.lvh.me",
- "secondary_hosts": [ ],
- "default_locale": "en",
- "available_locales": [
- "en",
- "fr"
], - "enable_machine_translations": false,
- "enable_participatory_space_filters": true,
- "badges_enabled": true,
- "rich_text_editor_in_public_views": false,
- "comments_max_length": 1000,
- "time_zone": "UTC",
- "users_registration_mode": "enabled",
- "user_groups_enabled": true,
- "force_users_to_authenticate_before_access_organization": false,
- "reference_prefix": "JD",
- "send_welcome_notification": true,
- "name": {
- "en": "Heller, Wisoky and Sawayn",
- "fr": "Kling LLC"
}, - "description": {
- "en": "<p><script>alert(\"organization_description\");</script> Eos quae qui. 20763</p>"
}, - "extended_data": { },
- "created_at": "2025-07-01T06:23:11Z",
- "updated_at": "2025-07-01T06:23:11Z"
}, - "meta": {
- "locales": [
- "en",
- "fr"
]
}
}
}
Update organization
This endpoint allows you to update an organization.
Update host
To update the host, send in your payload the host
attribute. It will be saved as an unconfirmed_host
extended data attribute.
Once saved, a job will be enqueued to reverse DNS the unconfirmed host before actually updating the host.
The host
attribute must be unique across all organizations.
More information on this update process is documented in the Safe host update page.
Update name
To update the name, send in your payload the name
attribute.
The name
attribute must be unique across all organizations.
Authorizations:
path Parameters
id required | string The ID of the organization |
Request Body schema: application/jsonrequired
required | object (Organization Attributes) | ||||||||||||||||||||||||||||||||||||||||
|
Responses
Request samples
- Payload
{- "data": {
- "name": {
- "en": "string",
- "fr": "string"
}, - "description": {
- "en": "string",
- "fr": "string"
}, - "reference_prefix": "string",
- "host": "string",
- "send_welcome_notification": true,
- "secondary_hosts": [
- "string"
], - "available_locales": [
- "en"
], - "default_locale": "string",
- "users_registration_mode": "enabled",
- "force_users_to_authenticate_before_access_organization": true,
- "badges_enabled": true,
- "enable_participatory_space_filters": true,
- "enable_machine_translations": true,
- "user_groups_enabled": true,
- "time_zone": "Africa/Algiers",
- "comments_max_length": 0,
- "rich_text_editor_in_public_views": true,
- "created_at": "2024-11-12T12:34:56Z",
- "updated_at": "2024-12-12T20:34:56Z",
- "extended_data": { }
}
}
Response samples
- 200
- 400
- 403
- 404
- 500
{- "data": {
- "id": "4211",
- "type": "organization",
- "attributes": {
- "host": "314.lvh.me",
- "secondary_hosts": [
- "[]"
], - "default_locale": "en",
- "available_locales": [
- "en",
- "fr"
], - "enable_machine_translations": false,
- "enable_participatory_space_filters": true,
- "badges_enabled": true,
- "rich_text_editor_in_public_views": false,
- "comments_max_length": 1000,
- "time_zone": "UTC",
- "users_registration_mode": "enabled",
- "user_groups_enabled": true,
- "force_users_to_authenticate_before_access_organization": false,
- "reference_prefix": "MD",
- "send_welcome_notification": true,
- "name": {
- "en": "Olson and Sons",
- "fr": "Mitchell Inc"
}, - "description": {
- "en": "<p><script>alert(\"organization_description\");</script> Est voluptatum quae. 23513</p>"
}, - "extended_data": { },
- "created_at": "2025-07-01T06:23:38Z",
- "updated_at": "2025-07-01T06:23:38Z"
}, - "meta": {
- "locales": [
- "en",
- "fr"
], - "unconfirmed_host": "new-host.com"
}
}
}
Organizations
List available organizations
Authorizations:
query Parameters
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
page | integer Page number for pagination |
per_page | integer Number of items per page |
Responses
Response samples
- 200
- 400
- 403
- 500
{- "data": [
- {
- "id": "2",
- "type": "organization",
- "attributes": {
- "host": "localhost",
- "secondary_hosts": [
- "0.0.0.0",
- "127.0.0.1"
], - "default_locale": "en",
- "available_locales": [
- "en",
- "fr"
], - "enable_machine_translations": false,
- "enable_participatory_space_filters": true,
- "badges_enabled": true,
- "rich_text_editor_in_public_views": true,
- "comments_max_length": 1000,
- "time_zone": "UTC",
- "users_registration_mode": "enabled",
- "user_groups_enabled": true,
- "force_users_to_authenticate_before_access_organization": false,
- "reference_prefix": "PhD",
- "send_welcome_notification": true,
- "name": {
- "en": "Schowalter-Kuphal",
- "fr": ""
}, - "description": {
- "en": "<p>Ea quis aspernatur voluptatibus beatae maxime quis consequatur sit necessitatibus eos omnis blanditiis sed excepturi.</p>"
}, - "extended_data": { },
- "created_at": "2025-06-25T05:51:20Z",
- "updated_at": "2025-06-28T06:23:54Z"
}, - "meta": {
- "locales": [
- "en",
- "fr"
]
}
}, - {
- "id": "4216",
- "type": "organization",
- "attributes": {
- "host": "319.lvh.me",
- "secondary_hosts": [ ],
- "default_locale": "en",
- "available_locales": [
- "en",
- "fr"
], - "enable_machine_translations": false,
- "enable_participatory_space_filters": true,
- "badges_enabled": true,
- "rich_text_editor_in_public_views": false,
- "comments_max_length": 1000,
- "time_zone": "UTC",
- "users_registration_mode": "enabled",
- "user_groups_enabled": true,
- "force_users_to_authenticate_before_access_organization": false,
- "reference_prefix": "V",
- "send_welcome_notification": true,
- "name": {
- "en": "Johnson-Halvorson",
- "fr": "Farrell, Dibbert and Bogisich"
}, - "description": {
- "en": "<p><script>alert(\"organization_description\");</script> Sequi totam ducimus. 23559</p>"
}, - "extended_data": { },
- "created_at": "2025-07-01T06:23:42Z",
- "updated_at": "2025-07-01T06:23:42Z"
}, - "meta": {
- "locales": [
- "en",
- "fr"
]
}
}
]
}
Organization extended data
Fetch organization extended data
Authorizations:
path Parameters
id required | integer Id of the organization |
query Parameters
object_path required | string object path, in dot style, like foo.bar |
Responses
Response samples
- 200
- 403
- 404
- 500
{- "data": {
- "birthday": "1989-01-28",
- "personal": {
- "birthday": "1989-01-28"
}
}
}
Update organization extended data
The extended_data feature allows you to update a hash with recursive merging. Use the body payload with these keys:
data
: The value or hash you want to update.object_path
: The dot-style path to the key (e.g., access.this.key).
Root path
To update data from root of the hash, use object_path="."
.
Example:
body={"data": {"name": "Jane"}, "object_path": "personnal"}
This recursively merges data into the hash without removing existing keys.
Merge some data
Initial hash:
{
"personnal": {"birthday": "1989-05-18"}
}
Patch payload:
{
"data": {
"name": "Jane"
},
"object_path": "personnal"
}
Result:
{
"personnal": {"birthday": "1989-05-18", "name": "Jane"}
}
Create new Paths
Paths are created as needed.
Exemple:
body = {"data": {"external_user_id": 12}, "object_path": "data-store.my-app.foo"}
Result:
{
"personnal": {"birthday": "1989-05-18"},
"data-store": {"my-app": {"foo": {"external_user_id": 12}}}
}
Alternatively:
body = {"data": 12, "object_path": "data-store.my-app.foo.external_user_id"}
Remove a key
Set a key to null or an empty value to remove it.
Example: Initial hash:
{
"personnal": {"birthday": "1989-05-18", "name": "Jane"}
}
Patch:
body = {"data": {"birthday": ""}, "object_path": "personnal"}
Result:
{
"personnal": {"name": "Jane"}
}
Return Value
The update request returns the updated value at the specified path.
Authorizations:
path Parameters
id required | integer Id of the organization |
Request Body schema: application/jsonrequired
data required | object (User Extended Data Data) New value for the extended data at the given path |
object_path | string object path, in dot style, like foo.bar. use '.' to update the whole user data |
Responses
Request samples
- Payload
{- "data": { },
- "object_path": "string"
}
Response samples
- 200
- 403
- 500
{- "data": {
- "foo": "bar"
}
}
Search Participatory Spaces
List or search spaces of the organization. Can be processes, assemblies, or any other registred participatory space.
Authorizations:
query Parameters
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
page | integer Page number for pagination |
per_page | integer Number of items per page |
filter[manifest_name_not_in][] | Array of strings (manifest_name not IN filter) Items Enum: "participatory_processes" "assemblies" match none of manifest_name's values in array |
filter[manifest_name_in][] | Array of strings (manifest_name IN filter) Items Enum: "participatory_processes" "assemblies" match one of manifest_name's values in array |
filter[manifest_name_start] | string (manifest_name starts With filter) Example: filter[manifest_name_start]=some_string manifest_name starts with |
filter[manifest_name_eq] | string (manifest_name equal filter) Enum: "participatory_processes" "assemblies" manifest_name is equal to |
filter[manifest_name_not_eq] | string (manifest_name not equal filter) Enum: "participatory_processes" "assemblies" manifest_name is NOT equal to |
filter[manifest_name_matches] | string (manifest_name like filter) Example: filter[manifest_name_matches]=%some_string matches manifest_name with |
filter[manifest_name_blank] | boolean (manifest_name blank filter) manifest_name is null or empty |
filter[id_in][] | Array of integers (id IN filter) match one of id's values in array |
filter[id_eq] | integer (id equal filter) id is equal to |
filter[id_lt] | integer (id less than filter) id is less than |
filter[id_gt] | integer (id greater than filter) id is greater than |
filter[id_present] | boolean (id present filter) id is not null and not empty |
filter[id_blank] | boolean (id blank filter) id is null or empty |
filter[title_not_in][] | Array of strings (title not IN filter) match none of title's values in array |
filter[title_in][] | Array of strings (title IN filter) match one of title's values in array |
filter[title_start] | string (title starts With filter) Example: filter[title_start]=some_string title starts with |
filter[title_eq] | string (title equal filter) title is equal to |
filter[title_not_eq] | string (title not equal filter) title is NOT equal to |
filter[title_matches] | string (title like filter) Example: filter[title_matches]=%some_string matches title with |
filter[title_blank] | boolean (title blank filter) title is null or empty |
Responses
Response samples
- 200
- 400
- 403
- 500
{- "data": [
- {
- "id": "2892",
- "type": "space",
- "attributes": {
- "manifest_name": "participatory_processes",
- "participatory_space_type": "Decidim::ParticipatoryProcess",
- "title": {
- "en": "<script>alert(\"participatory_process_title\");</script> Exercitationem nulla iusto. 15203"
}, - "subtitle": {
- "en": "<script>alert(\"participatory_process_subtitle\");</script> Aut consequatur molestiae. 15205"
}, - "short_description": {
- "en": "<p><script>alert(\"participatory_process_short_description\");</script> Repudiandae et et. 15207</p>"
}, - "description": {
- "en": "<p><script>alert(\"participatory_process_description\");</script> Velit veniam eius. 15209</p>"
}, - "visibility": "public",
- "created_at": "2025-07-01T06:22:45Z",
- "updated_at": "2025-07-01T06:22:45Z"
}, - "relationships": {
- "components": {
- "data": [ ],
- "meta": {
- "count": 0
}, - "links": {
- "self": {
- "title": "Component list for this space",
- "rel": "resource",
- "meta": {
- "space_manifest": "participatory_processes",
- "space_id": "2892",
- "action_method": "GET"
}
}
}
}
}, - "links": {
- "self": {
- "title": "en",
- "rel": "resource",
- "meta": {
- "space_id": "2892",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "related": {
- "title": "Leffler LLC",
- "rel": "resource",
- "meta": {
- "action_method": "GET"
}
}
}
}, - {
- "id": "2893",
- "type": "space",
- "attributes": {
- "manifest_name": "participatory_processes",
- "participatory_space_type": "Decidim::ParticipatoryProcess",
- "title": {
- "en": "<script>alert(\"participatory_process_title\");</script> Dolorem nam animi. 15253"
}, - "subtitle": {
- "en": "<script>alert(\"participatory_process_subtitle\");</script> Fugiat deleniti quo. 15255"
}, - "short_description": {
- "en": "<p><script>alert(\"participatory_process_short_description\");</script> Quia architecto in. 15257</p>"
}, - "description": {
- "en": "<p><script>alert(\"participatory_process_description\");</script> Impedit eligendi fugit. 15259</p>"
}, - "visibility": "public",
- "created_at": "2025-07-01T06:22:45Z",
- "updated_at": "2025-07-01T06:22:45Z"
}, - "relationships": {
- "components": {
- "data": [ ],
- "meta": {
- "count": 0
}, - "links": {
- "self": {
- "title": "Component list for this space",
- "rel": "resource",
- "meta": {
- "space_manifest": "participatory_processes",
- "space_id": "2893",
- "action_method": "GET"
}
}
}
}
}, - "links": {
- "self": {
- "title": "en",
- "rel": "resource",
- "meta": {
- "space_id": "2893",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "related": {
- "title": "Leffler LLC",
- "rel": "resource",
- "meta": {
- "action_method": "GET"
}
}
}
}, - {
- "id": "2894",
- "type": "space",
- "attributes": {
- "manifest_name": "participatory_processes",
- "participatory_space_type": "Decidim::ParticipatoryProcess",
- "title": {
- "en": "<script>alert(\"participatory_process_title\");</script> Et veniam ullam. 15303"
}, - "subtitle": {
- "en": "<script>alert(\"participatory_process_subtitle\");</script> Odit velit ipsum. 15305"
}, - "short_description": {
- "en": "<p><script>alert(\"participatory_process_short_description\");</script> Id consequatur consectetur. 15307</p>"
}, - "description": {
- "en": "<p><script>alert(\"participatory_process_description\");</script> Cupiditate qui similique. 15309</p>"
}, - "visibility": "public",
- "created_at": "2025-07-01T06:22:45Z",
- "updated_at": "2025-07-01T06:22:45Z"
}, - "relationships": {
- "components": {
- "data": [ ],
- "meta": {
- "count": 0
}, - "links": {
- "self": {
- "title": "Component list for this space",
- "rel": "resource",
- "meta": {
- "space_manifest": "participatory_processes",
- "space_id": "2894",
- "action_method": "GET"
}
}
}
}
}, - "links": {
- "self": {
- "title": "en",
- "rel": "resource",
- "meta": {
- "space_id": "2894",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "related": {
- "title": "Leffler LLC",
- "rel": "resource",
- "meta": {
- "action_method": "GET"
}
}
}
}
]
}
Assemblies Details
Get detail of a Assemblies given its id
Authorizations:
path Parameters
id required | integer Id of the space |
query Parameters
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
Responses
Response samples
- 200
- 400
- 403
- 404
- 500
{- "data": {
- "id": "6",
- "type": "space",
- "attributes": {
- "manifest_name": "assemblies",
- "participatory_space_type": "Decidim::Assembly",
- "title": {
- "en": "My assembly for testing purpose",
- "fr": "c'est une assemblée"
}, - "subtitle": {
- "en": "<script>alert(\"assembly_subtitle\");</script> Beatae rerum quibusdam. 32409"
}, - "short_description": {
- "en": "<p><script>alert(\"assembly_short_description\");</script> Expedita veritatis eveniet. 32411</p>"
}, - "description": {
- "en": "<p><script>alert(\"assembly_description\");</script> Sunt omnis accusantium. 32413</p>"
}, - "visibility": "public",
- "created_at": "2025-07-01T06:24:19Z",
- "updated_at": "2025-07-01T06:24:19Z"
}, - "relationships": {
- "components": {
- "data": [
- {
- "id": "10555",
- "type": "accountability_component"
}, - {
- "id": "10560",
- "type": "awesome_iframe_component"
}, - {
- "id": "10559",
- "type": "awesome_map_component"
}, - {
- "id": "10558",
- "type": "blog_component"
}, - {
- "id": "10553",
- "type": "budget_component"
}, - {
- "id": "10556",
- "type": "debate_component"
}, - {
- "id": "10552",
- "type": "meeting_component"
}, - {
- "id": "10545",
- "type": "meeting_component"
}, - {
- "id": "10547",
- "type": "meeting_component"
}, - {
- "id": "10549",
- "type": "meeting_component"
}, - {
- "id": "10550",
- "type": "page_component"
}, - {
- "id": "10548",
- "type": "proposal_component"
}, - {
- "id": "10544",
- "type": "proposal_component"
}, - {
- "id": "10551",
- "type": "proposal_component"
}, - {
- "id": "10546",
- "type": "proposal_component"
}, - {
- "id": "10557",
- "type": "sortition_component"
}, - {
- "id": "10554",
- "type": "survey_component"
}
], - "meta": {
- "count": 17
}, - "links": {
- "self": {
- "title": "Component list for this space",
- "rel": "resource",
- "meta": {
- "space_manifest": "assemblies",
- "space_id": "6",
- "action_method": "GET"
}
}
}
}
}, - "links": {
- "self": {
- "title": "My assembly for testing purpose",
- "rel": "resource",
- "meta": {
- "space_id": "6",
- "space_manifest": "assemblies",
- "action_method": "GET"
}
}, - "related": {
- "title": "Hamill and Sons",
- "rel": "resource",
- "meta": {
- "action_method": "GET"
}
}
}
}
}
Participatory Processes Details
Get detail of a Participatory Processes given its id
Authorizations:
path Parameters
id required | integer Id of the space |
query Parameters
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
Responses
Response samples
- 200
- 400
- 403
- 404
- 500
{- "data": {
- "id": "6",
- "type": "space",
- "attributes": {
- "manifest_name": "participatory_processes",
- "participatory_space_type": "Decidim::ParticipatoryProcess",
- "title": {
- "en": "My participatory_process for testing purpose",
- "fr": "c'est une concertation"
}, - "subtitle": {
- "en": "<script>alert(\"participatory_process_subtitle\");</script> Ut nisi soluta. 38121"
}, - "short_description": {
- "en": "<p><script>alert(\"participatory_process_short_description\");</script> Hic placeat exercitationem. 38123</p>"
}, - "description": {
- "en": "<p><script>alert(\"participatory_process_description\");</script> Veritatis sit et. 38125</p>"
}, - "visibility": "public",
- "created_at": "2025-07-01T06:24:25Z",
- "updated_at": "2025-07-01T06:24:25Z"
}, - "relationships": {
- "components": {
- "data": [ ],
- "meta": {
- "count": 0
}, - "links": {
- "self": {
- "title": "Component list for this space",
- "rel": "resource",
- "meta": {
- "space_manifest": "participatory_processes",
- "space_id": "6",
- "action_method": "GET"
}
}
}
}
}, - "links": {
- "self": {
- "title": "My participatory_process for testing purpose",
- "rel": "resource",
- "meta": {
- "space_id": "6",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "related": {
- "title": "Zulauf, Waters and Mraz",
- "rel": "resource",
- "meta": {
- "action_method": "GET"
}
}
}
}
}
Blog Components
List or search blog components of the organization
Authorizations:
query Parameters
page | integer Page number for pagination |
per_page | integer Number of items per page |
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
filter[participatory_space_id_in][] | Array of strings (participatory_space_id IN filter) match one of participatory_space_id's values in array |
filter[participatory_space_id_eq] | string (participatory_space_id equal filter) participatory_space_id is equal to |
filter[participatory_space_id_lt] | string (participatory_space_id less than filter) participatory_space_id is less than |
filter[participatory_space_id_gt] | string (participatory_space_id greater than filter) participatory_space_id is greater than |
filter[participatory_space_id_present] | boolean (participatory_space_id present filter) participatory_space_id is not null and not empty |
filter[participatory_space_id_blank] | boolean (participatory_space_id blank filter) participatory_space_id is null or empty |
filter[participatory_space_type_not_in][] | Array of strings (participatory_space_type not IN filter) Example: filter[participatory_space_type_not_in][]=Decidim::Assembly match none of participatory_space_type's values in array |
filter[participatory_space_type_in][] | Array of strings (participatory_space_type IN filter) Example: filter[participatory_space_type_in][]=Decidim::Assembly match one of participatory_space_type's values in array |
filter[participatory_space_type_start] | string (participatory_space_type starts With filter) Example: filter[participatory_space_type_start]=some_string participatory_space_type starts with |
filter[participatory_space_type_eq] | string (participatory_space_type equal filter) Example: filter[participatory_space_type_eq]=Decidim::Assembly participatory_space_type is equal to |
filter[participatory_space_type_not_eq] | string (participatory_space_type not equal filter) Example: filter[participatory_space_type_not_eq]=Decidim::Assembly participatory_space_type is NOT equal to |
filter[participatory_space_type_matches] | string (participatory_space_type like filter) Example: filter[participatory_space_type_matches]=%some_string matches participatory_space_type with |
filter[participatory_space_type_blank] | boolean (participatory_space_type blank filter) participatory_space_type is null or empty |
filter[name_not_in][] | Array of strings (name not IN filter) match none of name's values in array |
filter[name_in][] | Array of strings (name IN filter) match one of name's values in array |
filter[name_start] | string (name starts With filter) Example: filter[name_start]=some_string name starts with |
filter[name_eq] | string (name equal filter) name is equal to |
filter[name_not_eq] | string (name not equal filter) name is NOT equal to |
filter[name_matches] | string (name like filter) Example: filter[name_matches]=%some_string matches name with |
filter[name_blank] | boolean (name blank filter) name is null or empty |
Responses
Response samples
- 200
- 400
- 403
- 500
{- "data": [
- {
- "id": "10218",
- "type": "blog_component",
- "attributes": {
- "manifest_name": "blogs",
- "participatory_space_type": "Decidim::ParticipatoryProcess",
- "participatory_space_id": "2913",
- "name": {
- "en": "<script>alert(\"component_name\");</script> Eaque culpa delectus. 17299"
}, - "global_announcement": { },
- "created_at": "2025-07-01T06:22:53Z",
- "updated_at": "2025-07-01T06:22:53Z"
}, - "relationships": {
- "resources": {
- "data": [ ],
- "meta": {
- "count": 0
}
}
}, - "links": {
- "self": {
- "title": "en",
- "rel": "resource",
- "meta": {
- "space_id": "2913",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "related": {
- "title": "<script>alert(\"participatory_process_title\");</script> Dolores sed qui. 17247",
- "rel": "resource",
- "meta": {
- "space_id": "2913",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true,
- "scopes_enabled": false
}
}
]
}
Proposal Component Details
Find on proposal
Authorizations:
path Parameters
id required | integer |
query Parameters
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
page | integer Page number for pagination |
per_page | integer Number of items per page |
filter[id_in][] | Array of integers (id IN filter) match one of id's values in array |
filter[id_eq] | integer (id equal filter) id is equal to |
filter[id_lt] | integer (id less than filter) id is less than |
filter[id_gt] | integer (id greater than filter) id is greater than |
filter[id_present] | boolean (id present filter) id is not null and not empty |
filter[id_blank] | boolean (id blank filter) id is null or empty |
Responses
Response samples
- 200
- 400
- 403
- 500
{- "data": {
- "id": "10226",
- "type": "proposal_component",
- "attributes": {
- "manifest_name": "proposals",
- "participatory_space_type": "Decidim::ParticipatoryProcess",
- "participatory_space_id": "2920",
- "name": {
- "en": "<script>alert(\"component_name\");</script> Repellendus accusamus quam. 17813"
}, - "global_announcement": { },
- "created_at": "2025-07-01T06:22:56Z",
- "updated_at": "2025-07-01T06:22:56Z"
}, - "relationships": {
- "resources": {
- "data": [ ],
- "meta": {
- "count": 0
}
}
}, - "links": {
- "self": {
- "title": "<script>alert(\"component_name\");</script> Repellendus accusamus quam. 17813",
- "rel": "resource",
- "meta": {
- "space_id": "2920",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "related": {
- "title": "<script>alert(\"participatory_process_title\");</script> Voluptatem ut minus. 17787",
- "rel": "resource",
- "meta": {
- "space_id": "2920",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true,
- "scopes_enabled": false,
- "amendments_enabled": false,
- "attachments_allowed": false,
- "collaborative_drafts_enabled": false,
- "comments_enabled": true,
- "comments_max_length": 1000,
- "default_sort_order": "default",
- "geocoding_enabled": false,
- "minimum_votes_per_user": 0,
- "official_proposals_enabled": true,
- "participatory_texts_enabled": false,
- "proposal_edit_before_minutes": 5,
- "proposal_edit_time": "limited",
- "proposal_limit": 0,
- "resources_permissions_enabled": true,
- "threshold_per_proposal": 0,
- "vote_limit": 0,
- "endorsements_enabled": true,
- "votes_enabled": false,
- "creation_enabled": false,
- "proposal_answering_enabled": true,
- "amendment_creation_enabled": true,
- "amendment_reaction_enabled": true,
- "amendment_promotion_enabled": true,
- "can_create_proposals": false,
- "can_vote": false,
- "can_endorse": true,
- "can_comment": true
}
}
}
Proposal Components
List or search proposal components of the organization
Authorizations:
query Parameters
filter[name_not_in][] | Array of strings (name not IN filter) match none of name's values in array |
filter[name_in][] | Array of strings (name IN filter) match one of name's values in array |
filter[name_start] | string (name starts With filter) Example: filter[name_start]=some_string name starts with |
filter[name_eq] | string (name equal filter) name is equal to |
filter[name_not_eq] | string (name not equal filter) name is NOT equal to |
filter[name_matches] | string (name like filter) Example: filter[name_matches]=%some_string matches name with |
filter[name_blank] | boolean (name blank filter) name is null or empty |
filter[participatory_space_type_not_in][] | Array of strings (participatory_space_type not IN filter) Example: filter[participatory_space_type_not_in][]=Decidim::Assembly match none of participatory_space_type's values in array |
filter[participatory_space_type_in][] | Array of strings (participatory_space_type IN filter) Example: filter[participatory_space_type_in][]=Decidim::Assembly match one of participatory_space_type's values in array |
filter[participatory_space_type_start] | string (participatory_space_type starts With filter) Example: filter[participatory_space_type_start]=some_string participatory_space_type starts with |
filter[participatory_space_type_eq] | string (participatory_space_type equal filter) Example: filter[participatory_space_type_eq]=Decidim::Assembly participatory_space_type is equal to |
filter[participatory_space_type_not_eq] | string (participatory_space_type not equal filter) Example: filter[participatory_space_type_not_eq]=Decidim::Assembly participatory_space_type is NOT equal to |
filter[participatory_space_type_matches] | string (participatory_space_type like filter) Example: filter[participatory_space_type_matches]=%some_string matches participatory_space_type with |
filter[participatory_space_type_blank] | boolean (participatory_space_type blank filter) participatory_space_type is null or empty |
filter[participatory_space_id_in][] | Array of strings (participatory_space_id IN filter) match one of participatory_space_id's values in array |
filter[participatory_space_id_eq] | string (participatory_space_id equal filter) participatory_space_id is equal to |
filter[participatory_space_id_lt] | string (participatory_space_id less than filter) participatory_space_id is less than |
filter[participatory_space_id_gt] | string (participatory_space_id greater than filter) participatory_space_id is greater than |
filter[participatory_space_id_present] | boolean (participatory_space_id present filter) participatory_space_id is not null and not empty |
filter[participatory_space_id_blank] | boolean (participatory_space_id blank filter) participatory_space_id is null or empty |
page | integer Page number for pagination |
per_page | integer Number of items per page |
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
Responses
Response samples
- 200
- 400
- 403
- 500
{- "data": [
- {
- "id": "10290",
- "type": "proposal_component",
- "attributes": {
- "manifest_name": "proposals",
- "participatory_space_type": "Decidim::ParticipatoryProcess",
- "participatory_space_id": "2945",
- "name": {
- "en": "<script>alert(\"component_name\");</script> Delectus consequuntur sint. 20357"
}, - "global_announcement": { },
- "created_at": "2025-07-01T06:23:06Z",
- "updated_at": "2025-07-01T06:23:06Z"
}, - "relationships": {
- "resources": {
- "data": [
- {
- "id": "5440",
- "type": "proposal"
}, - {
- "id": "5441",
- "type": "proposal"
}, - {
- "id": "5442",
- "type": "proposal"
}
], - "meta": {
- "count": 3
}
}
}, - "links": {
- "self": {
- "title": "en",
- "rel": "resource",
- "meta": {
- "space_id": "2945",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "related": {
- "title": "<script>alert(\"participatory_process_title\");</script> Voluptatem velit rerum. 20331",
- "rel": "resource",
- "meta": {
- "space_id": "2945",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "draft": {
- "title": "Draft Details",
- "rel": "resource",
- "meta": {
- "component_id": "10292",
- "component_manifest": "proposals",
- "space_id": "2945",
- "space_manifest": "participatory_processes",
- "resource_id": "5443",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true,
- "scopes_enabled": false,
- "amendments_enabled": false,
- "attachments_allowed": false,
- "collaborative_drafts_enabled": false,
- "comments_enabled": true,
- "comments_max_length": 1000,
- "default_sort_order": "default",
- "geocoding_enabled": false,
- "minimum_votes_per_user": 0,
- "official_proposals_enabled": true,
- "participatory_texts_enabled": false,
- "proposal_edit_before_minutes": 5,
- "proposal_edit_time": "limited",
- "proposal_limit": 0,
- "resources_permissions_enabled": true,
- "threshold_per_proposal": 0,
- "vote_limit": 0,
- "endorsements_enabled": true,
- "votes_enabled": false,
- "creation_enabled": false,
- "proposal_answering_enabled": true,
- "amendment_creation_enabled": true,
- "amendment_reaction_enabled": true,
- "amendment_promotion_enabled": true,
- "can_create_proposals": false,
- "can_vote": false,
- "can_endorse": true,
- "can_comment": true
}
}, - {
- "id": "10291",
- "type": "proposal_component",
- "attributes": {
- "manifest_name": "proposals",
- "participatory_space_type": "Decidim::ParticipatoryProcess",
- "participatory_space_id": "2945",
- "name": {
- "en": "<script>alert(\"proposals\");</script> Proposals",
- "fr": "<script>alert(\"proposals\");</script> Propositions"
}, - "global_announcement": { },
- "created_at": "2025-07-01T06:23:06Z",
- "updated_at": "2025-07-01T06:23:06Z"
}, - "relationships": {
- "resources": {
- "data": [ ],
- "meta": {
- "count": 0
}
}
}, - "links": {
- "self": {
- "title": "en",
- "rel": "resource",
- "meta": {
- "space_id": "2945",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "related": {
- "title": "<script>alert(\"participatory_process_title\");</script> Voluptatem velit rerum. 20331",
- "rel": "resource",
- "meta": {
- "space_id": "2945",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "draft": {
- "title": "Draft Details",
- "rel": "resource",
- "meta": {
- "component_id": "10292",
- "component_manifest": "proposals",
- "space_id": "2945",
- "space_manifest": "participatory_processes",
- "resource_id": "5443",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true,
- "scopes_enabled": false,
- "amendments_enabled": false,
- "attachments_allowed": false,
- "collaborative_drafts_enabled": false,
- "comments_enabled": true,
- "comments_max_length": 0,
- "default_sort_order": "default",
- "geocoding_enabled": false,
- "minimum_votes_per_user": 0,
- "official_proposals_enabled": true,
- "participatory_texts_enabled": false,
- "proposal_edit_before_minutes": 5,
- "proposal_edit_time": "limited",
- "proposal_limit": 0,
- "resources_permissions_enabled": true,
- "threshold_per_proposal": 0,
- "vote_limit": 0,
- "endorsements_enabled": true,
- "votes_enabled": true,
- "creation_enabled": false,
- "proposal_answering_enabled": true,
- "amendment_creation_enabled": true,
- "amendment_reaction_enabled": true,
- "amendment_promotion_enabled": true,
- "can_create_proposals": false,
- "can_vote": true,
- "can_endorse": true,
- "can_comment": true,
- "votes": [
- {
- "weight": 1,
- "label": "Red"
}, - {
- "weight": 2,
- "label": "Yellow"
}, - {
- "weight": 3,
- "label": "Green"
}
]
}
}, - {
- "id": "10292",
- "type": "proposal_component",
- "attributes": {
- "manifest_name": "proposals",
- "participatory_space_type": "Decidim::ParticipatoryProcess",
- "participatory_space_id": "2945",
- "name": {
- "en": "<script>alert(\"component_name\");</script> Cum at est. 20395"
}, - "global_announcement": { },
- "created_at": "2025-07-01T06:23:06Z",
- "updated_at": "2025-07-01T06:23:06Z"
}, - "relationships": {
- "resources": {
- "data": [
- {
- "id": "5443",
- "type": "proposal"
}
], - "meta": {
- "count": 1
}
}
}, - "links": {
- "self": {
- "title": "en",
- "rel": "resource",
- "meta": {
- "space_id": "2945",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "related": {
- "title": "<script>alert(\"participatory_process_title\");</script> Voluptatem velit rerum. 20331",
- "rel": "resource",
- "meta": {
- "space_id": "2945",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "draft": {
- "title": "Draft Details",
- "rel": "resource",
- "meta": {
- "component_id": "10292",
- "component_manifest": "proposals",
- "space_id": "2945",
- "space_manifest": "participatory_processes",
- "resource_id": "5443",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true,
- "scopes_enabled": false,
- "amendments_enabled": false,
- "attachments_allowed": false,
- "collaborative_drafts_enabled": false,
- "comments_enabled": true,
- "comments_max_length": 1000,
- "default_sort_order": "default",
- "geocoding_enabled": false,
- "minimum_votes_per_user": 0,
- "official_proposals_enabled": true,
- "participatory_texts_enabled": false,
- "proposal_edit_before_minutes": 5,
- "proposal_edit_time": "limited",
- "proposal_limit": 0,
- "resources_permissions_enabled": true,
- "threshold_per_proposal": 0,
- "vote_limit": 0,
- "endorsements_enabled": true,
- "votes_enabled": false,
- "creation_enabled": false,
- "proposal_answering_enabled": true,
- "amendment_creation_enabled": true,
- "amendment_reaction_enabled": true,
- "amendment_promotion_enabled": true,
- "can_create_proposals": false,
- "can_vote": false,
- "can_endorse": true,
- "can_comment": true
}
}
]
}
Blog Component Details
Blog component details
Authorizations:
path Parameters
id required | integer |
query Parameters
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
component_id | integer Component Id |
space_manifest | string Enum: "participatory_processes" "assemblies" Space type |
space_id | integer Space Id |
Responses
Response samples
- 200
- 400
- 403
- 500
{- "data": {
- "id": "10362",
- "type": "blog_component",
- "attributes": {
- "manifest_name": "blogs",
- "participatory_space_type": "Decidim::ParticipatoryProcess",
- "participatory_space_id": "3014",
- "name": {
- "en": "<script>alert(\"component_name\");</script> Dolores voluptatem nisi. 24543"
}, - "global_announcement": { },
- "created_at": "2025-07-01T06:23:50Z",
- "updated_at": "2025-07-01T06:23:50Z"
}, - "relationships": {
- "resources": {
- "data": [ ],
- "meta": {
- "count": 0
}
}
}, - "links": {
- "self": {
- "title": "<script>alert(\"component_name\");</script> Dolores voluptatem nisi. 24543",
- "rel": "resource",
- "meta": {
- "space_id": "3014",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "related": {
- "title": "<script>alert(\"participatory_process_title\");</script> Laudantium rerum explicabo. 24553",
- "rel": "resource",
- "meta": {
- "space_id": "3014",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true,
- "scopes_enabled": false
}
}
}
Search components
List or search components of the organization
Authorizations:
query Parameters
page | integer Page number for pagination |
per_page | integer Number of items per page |
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
filter[manifest_name_not_in][] | Array of strings (manifest_name not IN filter) Items Enum: "pages" "proposals" "meetings" "budgets" "surveys" "accountability" "debates" "sortitions" "blogs" "awesome_map" "awesome_iframe" match none of manifest_name's values in array |
filter[manifest_name_in][] | Array of strings (manifest_name IN filter) Items Enum: "pages" "proposals" "meetings" "budgets" "surveys" "accountability" "debates" "sortitions" "blogs" "awesome_map" "awesome_iframe" match one of manifest_name's values in array |
filter[manifest_name_start] | string (manifest_name starts With filter) Example: filter[manifest_name_start]=some_string manifest_name starts with |
filter[manifest_name_eq] | string (Component Manifest) Enum: "pages" "proposals" "meetings" "budgets" "surveys" "accountability" "debates" "sortitions" "blogs" "awesome_map" "awesome_iframe" |
filter[manifest_name_not_eq] | string (Component Manifest) Enum: "pages" "proposals" "meetings" "budgets" "surveys" "accountability" "debates" "sortitions" "blogs" "awesome_map" "awesome_iframe" |
filter[manifest_name_matches] | string (manifest_name like filter) Example: filter[manifest_name_matches]=%some_string matches manifest_name with |
filter[manifest_name_blank] | boolean (manifest_name blank filter) manifest_name is null or empty |
filter[id_in][] | Array of integers (id IN filter) match one of id's values in array |
filter[id_eq] | integer (id equal filter) id is equal to |
filter[id_lt] | integer (id less than filter) id is less than |
filter[id_gt] | integer (id greater than filter) id is greater than |
filter[id_present] | boolean (id present filter) id is not null and not empty |
filter[id_blank] | boolean (id blank filter) id is null or empty |
filter[participatory_space_id_in][] | Array of strings (participatory_space_id IN filter) match one of participatory_space_id's values in array |
filter[participatory_space_id_eq] | string (participatory_space_id equal filter) participatory_space_id is equal to |
filter[participatory_space_id_lt] | string (participatory_space_id less than filter) participatory_space_id is less than |
filter[participatory_space_id_gt] | string (participatory_space_id greater than filter) participatory_space_id is greater than |
filter[participatory_space_id_present] | boolean (participatory_space_id present filter) participatory_space_id is not null and not empty |
filter[participatory_space_id_blank] | boolean (participatory_space_id blank filter) participatory_space_id is null or empty |
filter[participatory_space_type_not_in][] | Array of strings (participatory_space_type not IN filter) Items Enum: "participatory_processes" "assemblies" match none of participatory_space_type's values in array |
filter[participatory_space_type_in][] | Array of strings (participatory_space_type IN filter) Items Enum: "participatory_processes" "assemblies" match one of participatory_space_type's values in array |
filter[participatory_space_type_start] | string (participatory_space_type starts With filter) Example: filter[participatory_space_type_start]=some_string participatory_space_type starts with |
filter[participatory_space_type_eq] | string (space_type) Enum: "participatory_processes" "assemblies" |
filter[participatory_space_type_not_eq] | string (space_type) Enum: "participatory_processes" "assemblies" |
filter[participatory_space_type_matches] | string (participatory_space_type like filter) Example: filter[participatory_space_type_matches]=%some_string matches participatory_space_type with |
filter[participatory_space_type_blank] | boolean (participatory_space_type blank filter) participatory_space_type is null or empty |
filter[name_not_in][] | Array of strings (name not IN filter) match none of name's values in array |
filter[name_in][] | Array of strings (name IN filter) match one of name's values in array |
filter[name_start] | string (name starts With filter) Example: filter[name_start]=some_string name starts with |
filter[name_eq] | string (name equal filter) name is equal to |
filter[name_not_eq] | string (name not equal filter) name is NOT equal to |
filter[name_matches] | string (name like filter) Example: filter[name_matches]=%some_string matches name with |
filter[name_blank] | boolean (name blank filter) name is null or empty |
Responses
Response samples
- 200
- 400
- 403
- 500
{- "data": [
- {
- "id": "10923",
- "type": "meeting_component",
- "attributes": {
- "manifest_name": "meetings",
- "participatory_space_type": "Decidim::ParticipatoryProcess",
- "participatory_space_id": "3155",
- "name": {
- "en": "<script>alert(\"component_name\");</script> Quas voluptatem nam. 46991"
}, - "global_announcement": { },
- "created_at": "2025-07-01T06:25:03Z",
- "updated_at": "2025-07-01T06:25:03Z"
}, - "relationships": {
- "resources": {
- "data": [ ],
- "meta": {
- "count": 0
}
}
}, - "links": {
- "self": {
- "title": "en",
- "rel": "resource",
- "meta": {
- "space_id": "3155",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "related": {
- "title": "<script>alert(\"participatory_process_title\");</script> Esse aliquid ut. 46965",
- "rel": "resource",
- "meta": {
- "space_id": "3155",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true,
- "scopes_enabled": false,
- "default_registration_terms": false,
- "comments_enabled": false,
- "comments_max_length": false,
- "registration_code_enabled": false,
- "creation_enabled_for_participants": false
}
}, - {
- "id": "10926",
- "type": "accountability_component",
- "attributes": {
- "manifest_name": "accountability",
- "participatory_space_type": "Decidim::ParticipatoryProcess",
- "participatory_space_id": "3155",
- "name": {
- "en": "<script>alert(\"accountability\");</script> Accountability",
- "fr": "<script>alert(\"accountability\");</script> Suivi"
}, - "global_announcement": { },
- "created_at": "2025-07-01T06:25:03Z",
- "updated_at": "2025-07-01T06:25:03Z"
}, - "relationships": {
- "resources": {
- "data": [
- {
- "id": "506",
- "type": "result"
}, - {
- "id": "505",
- "type": "result"
}
], - "meta": {
- "count": 2
}
}
}, - "links": {
- "self": {
- "title": "en",
- "rel": "resource",
- "meta": {
- "space_id": "3155",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}, - "related": {
- "title": "<script>alert(\"participatory_process_title\");</script> Esse aliquid ut. 46965",
- "rel": "resource",
- "meta": {
- "space_id": "3155",
- "space_manifest": "participatory_processes",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true,
- "scopes_enabled": false
}
}
]
}
Create a magic-lick
Generates a uniq magic link, valid for 5minutes. If the user follow this link, it will be signed in automatically
Authorizations:
Request Body schema: application/json
object Optional payload to configure the magic link | |||
|
Responses
Request samples
- Payload
{- "data": {
- "redirect_url": "string"
}
}
Response samples
- 201
- 400
- 403
- 500
{- "data": {
- "id": "41",
- "type": "magic_link",
- "attributes": {
- "token": "UXliV296QWY2U1FLelhCd1lmTnc=",
- "label": "My label"
}, - "links": {
- "self": {
- "title": "Generates a magic link",
- "rel": "resource",
- "meta": {
- "action_method": "POST",
- "action_enctype": "application/x-www-form-urlencoded"
}
}, - "sign_in": {
- "title": "Sign in with magic link",
- "rel": "resource",
- "meta": {
- "action_method": "GET"
}
}
}
}
}
List available Users
List or search users of the organization
Authorizations:
query Parameters
page | integer Page number for pagination |
per_page | integer Number of items per page |
filter[nickname_not_in][] | Array of strings (nickname not IN filter) match none of nickname's values in array |
filter[nickname_in][] | Array of strings (nickname IN filter) match one of nickname's values in array |
filter[nickname_start] | string (nickname starts With filter) Example: filter[nickname_start]=some_string nickname starts with |
filter[nickname_eq] | string (nickname equal filter) nickname is equal to |
filter[nickname_not_eq] | string (nickname not equal filter) nickname is NOT equal to |
filter[nickname_matches] | string (nickname like filter) Example: filter[nickname_matches]=%some_string matches nickname with |
filter[nickname_blank] | boolean (nickname blank filter) nickname is null or empty |
filter[id_in][] | Array of integers (id IN filter) match one of id's values in array |
filter[id_eq] | integer (id equal filter) id is equal to |
filter[id_lt] | integer (id less than filter) id is less than |
filter[id_gt] | integer (id greater than filter) id is greater than |
filter[id_present] | boolean (id present filter) id is not null and not empty |
filter[id_blank] | boolean (id blank filter) id is null or empty |
filter[extended_data_cont] | string Example: filter[extended_data_cont]="foo": "bar" Search on user extended_data. use the format: |
Responses
Response samples
- 200
- 403
- 500
{- "data": [
- {
- "id": "8412",
- "type": "user",
- "attributes": {
- "name": "Connie Reilly",
- "nickname": "kk2d8my_490",
- "email": "user491@example.org",
- "about": "{\"en\"=>\"<script>alert(\\\"user_about\\\");</script> Qui et provident. 25093\", \"machine_translations\"=>{\"fr\"=>\"<script>alert(\\\"user_about\\\");</script> Delectus nesciunt natus. 25094\"}}",
- "extended_data": { },
- "locale": "fr",
- "created_at": "2025-07-01T06:23:54Z",
- "updated_at": "2025-07-01T06:23:54Z"
}, - "relationships": {
- "roles": {
- "data": [ ]
}
}, - "meta": {
- "blocked": false,
- "locked": false
}
}
]
}
Update user extended data
The extended_data feature allows you to update a hash with recursive merging. Use the body payload with these keys:
data
: The value or hash you want to update.object_path
: The dot-style path to the key (e.g., access.this.key).
Root path
To update data from root of the hash, use object_path="."
.
Example:
body={"data": {"name": "Jane"}, "object_path": "personnal"}
This recursively merges data into the hash without removing existing keys.
Merge some data
Initial hash:
{
"personnal": {"birthday": "1989-05-18"}
}
Patch payload:
{
"data": {
"name": "Jane"
},
"object_path": "personnal"
}
Result:
{
"personnal": {"birthday": "1989-05-18", "name": "Jane"}
}
Create new Paths
Paths are created as needed.
Exemple:
body = {"data": {"external_user_id": 12}, "object_path": "data-store.my-app.foo"}
Result:
{
"personnal": {"birthday": "1989-05-18"},
"data-store": {"my-app": {"foo": {"external_user_id": 12}}}
}
Alternatively:
body = {"data": 12, "object_path": "data-store.my-app.foo.external_user_id"}
Remove a key
Set a key to null or an empty value to remove it.
Example: Initial hash:
{
"personnal": {"birthday": "1989-05-18", "name": "Jane"}
}
Patch:
body = {"data": {"birthday": ""}, "object_path": "personnal"}
Result:
{
"personnal": {"name": "Jane"}
}
Return Value
The update request returns the updated value at the specified path.
Authorizations:
Request Body schema: application/jsonrequired
data required | object (User Extended Data Data) New value for the extended data at the given path |
object_path | string object path, in dot style, like foo.bar. use '.' to update the whole user data |
Responses
Request samples
- Payload
{- "data": { },
- "object_path": "string"
}
Response samples
- 200
- 403
- 500
{- "data": {
- "foo": "bar"
}
}
Get user extended data
Fetch user extended data
Authorizations:
query Parameters
object_path required | string object path, in dot style, like foo.bar |
Responses
Response samples
- 200
- 403
- 404
- 500
{- "data": {
- "personal": {
- "birthday": "1989-01-28"
}, - "birthday": "1989-01-28"
}
}
Show a blog detail
Get blog post details
Authorizations:
path Parameters
id required | integer Blog Post Id |
query Parameters
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
component_id | integer Component Id |
Responses
Response samples
- 200
- 400
- 403
- 404
- 500
{- "data": {
- "id": "1377",
- "type": "blog",
- "attributes": {
- "created_at": "2025-07-01T06:23:32Z",
- "updated_at": "2025-07-01T06:23:32Z",
- "title": {
- "en": "<script>alert(\"blog_title\");</script> Laudantium ut quaerat. 23221"
}, - "body": {
- "en": "<p><script>alert(\"blog_body\");</script> Sit inventore ut. 23223</p>"
}
}, - "relationships": {
- "space": {
- "data": {
- "id": "2991",
- "type": "participatory_processes"
}
}, - "component": {
- "data": {
- "id": "10339",
- "type": "blog_component"
}
}
}, - "links": {
- "related": {
- "title": "<script>alert(\"component_name\");</script> In sequi alias. 23201",
- "rel": "resource",
- "meta": {
- "space_id": "2991",
- "space_manifest": "participatory_processes",
- "component_id": "10339",
- "component_manifest": "blogs",
- "action_method": "GET"
}
}, - "self": {
- "title": "Blogs Details",
- "rel": "resource",
- "meta": {
- "component_id": "10339",
- "component_manifest": "blogs",
- "space_id": "2991",
- "space_manifest": "participatory_processes",
- "resource_id": "1377",
- "action_method": "GET"
}
}, - "collection": {
- "title": "Blogs List",
- "rel": "resource",
- "meta": {
- "component_id": "10339",
- "component_manifest": "blogs",
- "space_id": "2991",
- "space_manifest": "participatory_processes",
- "resource_id": "1377",
- "action_method": "GET"
}
}, - "next": {
- "title": "Next Blog Post",
- "rel": "resource",
- "meta": {
- "component_id": "10339",
- "component_manifest": "blogs",
- "space_id": "2991",
- "space_manifest": "participatory_processes",
- "resource_id": "1376",
- "action_method": "GET"
}
}, - "prev": {
- "title": "Previous Blog Post",
- "rel": "resource",
- "meta": {
- "component_id": "10339",
- "component_manifest": "blogs",
- "space_id": "2991",
- "space_manifest": "participatory_processes",
- "resource_id": "1378",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true
}
}
}
Blog Post Lists
Get blog post list
Authorizations:
query Parameters
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
page | integer Page number for pagination |
per_page | integer Number of items per page |
space_manifest | string Enum: "participatory_processes" "assemblies" Space type |
space_id | integer Space Id |
component_id | integer Component Id |
order | string Order by |
order_direction | string Enum: "asc" "desc" Order direction |
Responses
Response samples
- 200
- 400
- 403
- 500
{- "data": [
- {
- "id": "1489",
- "type": "blog",
- "attributes": {
- "created_at": "2025-07-01T06:24:09Z",
- "updated_at": "2025-07-01T06:24:10Z",
- "title": {
- "en": "<script>alert(\"blog_title\");</script> Ipsum facilis autem. 26343"
}, - "body": {
- "en": "<p><script>alert(\"blog_body\");</script> Dicta sequi ipsum. 26345</p>"
}
}, - "relationships": {
- "space": {
- "data": {
- "id": "3037",
- "type": "participatory_processes"
}
}, - "component": {
- "data": {
- "id": "10385",
- "type": "blog_component"
}
}
}, - "links": {
- "related": {
- "title": "<script>alert(\"component_name\");</script> Magni tempora modi. 26309",
- "rel": "resource",
- "meta": {
- "space_id": "3037",
- "space_manifest": "participatory_processes",
- "component_id": "10385",
- "component_manifest": "blogs",
- "action_method": "GET"
}
}, - "self": {
- "title": "Blogs Details",
- "rel": "resource",
- "meta": {
- "component_id": "10385",
- "component_manifest": "blogs",
- "space_id": "3037",
- "space_manifest": "participatory_processes",
- "resource_id": "1489",
- "action_method": "GET"
}
}, - "collection": {
- "title": "Blogs List",
- "rel": "resource",
- "meta": {
- "component_id": "10385",
- "component_manifest": "blogs",
- "space_id": "3037",
- "space_manifest": "participatory_processes",
- "resource_id": "1489",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true
}
}, - {
- "id": "1488",
- "type": "blog",
- "attributes": {
- "created_at": "2025-07-01T06:24:09Z",
- "updated_at": "2025-07-01T06:24:09Z",
- "title": {
- "en": "<script>alert(\"blog_title\");</script> Modi error excepturi. 26337"
}, - "body": {
- "en": "<p><script>alert(\"blog_body\");</script> Ducimus ipsum vero. 26339</p>"
}
}, - "relationships": {
- "space": {
- "data": {
- "id": "3037",
- "type": "participatory_processes"
}
}, - "component": {
- "data": {
- "id": "10385",
- "type": "blog_component"
}
}
}, - "links": {
- "related": {
- "title": "<script>alert(\"component_name\");</script> Magni tempora modi. 26309",
- "rel": "resource",
- "meta": {
- "space_id": "3037",
- "space_manifest": "participatory_processes",
- "component_id": "10385",
- "component_manifest": "blogs",
- "action_method": "GET"
}
}, - "self": {
- "title": "Blogs Details",
- "rel": "resource",
- "meta": {
- "component_id": "10385",
- "component_manifest": "blogs",
- "space_id": "3037",
- "space_manifest": "participatory_processes",
- "resource_id": "1488",
- "action_method": "GET"
}
}, - "collection": {
- "title": "Blogs List",
- "rel": "resource",
- "meta": {
- "component_id": "10385",
- "component_manifest": "blogs",
- "space_id": "3037",
- "space_manifest": "participatory_processes",
- "resource_id": "1488",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true
}
}
]
}
Proposals
Search proposals
Authorizations:
query Parameters
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
page | integer Page number for pagination |
per_page | integer Number of items per page |
space_manifest | string Enum: "participatory_processes" "assemblies" Space type |
space_id | integer Space Id |
component_id | integer Component Id |
order | string Enum: "published_at" "rand" Order by |
order_direction | string Enum: "asc" "desc" Order direction |
filter[voted_weight_in][] | Array of strings (voted_weight IN filter) match one of voted_weight's values in array. Only available with [:impersonationFlow] flow |
filter[voted_weight_eq] | string (voted_weight equal filter) voted_weight is equal to. Only available with [:impersonationFlow] flow |
filter[voted_weight_lt] | string (voted_weight less than filter) voted_weight is less than. Only available with [:impersonationFlow] flow |
filter[voted_weight_gt] | string (voted_weight greater than filter) voted_weight is greater than. Only available with [:impersonationFlow] flow |
filter[voted_weight_present] | boolean (voted_weight present filter) voted_weight is not null and not empty. Only available with [:impersonationFlow] flow |
filter[voted_weight_blank] | boolean (voted_weight blank filter) voted_weight is null or empty. Only available with [:impersonationFlow] flow |
filter[state_not_in][] | Array of strings (state not IN filter) match none of state's values in array |
filter[state_in][] | Array of strings (state IN filter) match one of state's values in array |
filter[state_start] | string (state starts With filter) Example: filter[state_start]=some_string state starts with |
filter[state_eq] | string (state equal filter) state is equal to |
filter[state_not_eq] | string (state not equal filter) state is NOT equal to |
filter[state_matches] | string (state like filter) Example: filter[state_matches]=%some_string matches state with |
filter[state_blank] | boolean (state blank filter) state is null or empty |
Responses
Response samples
- 200
- 400
- 403
- 500
{- "data": [
- {
- "id": "5499",
- "type": "proposal",
- "attributes": {
- "created_at": "2025-07-01T06:23:23Z",
- "updated_at": "2025-07-01T06:23:23Z",
- "title": {
- "en": "<script>alert(\"proposal_title\");</script> Quisquam et corporis. 21959"
}, - "body": {
- "en": "<p><script>alert(\"proposal_body\");</script> Excepturi pariatur quod. 21961</p>"
}
}, - "relationships": {
- "space": {
- "data": {
- "id": "2968",
- "type": "participatory_processes"
}
}, - "component": {
- "data": {
- "id": "10316",
- "type": "proposal_component"
}
}, - "state": {
- "data": {
- "id": "8492",
- "type": "proposal_state"
}, - "meta": {
- "token": "accepted"
}
}, - "author": {
- "data": {
- "id": "8295",
- "type": "user"
}
}, - "coauthors": {
- "data": [
- {
- "id": "8295",
- "type": "user"
}
], - "meta": {
- "count": 1
}
}
}, - "links": {
- "related": {
- "title": "<script>alert(\"proposals\");</script> Proposals",
- "rel": "resource",
- "meta": {
- "space_id": "2968",
- "space_manifest": "participatory_processes",
- "component_id": "10316",
- "component_manifest": "proposals",
- "action_method": "GET"
}
}, - "self": {
- "title": "Proposals Details",
- "rel": "resource",
- "meta": {
- "component_id": "10316",
- "component_manifest": "proposals",
- "space_id": "2968",
- "space_manifest": "participatory_processes",
- "resource_id": "5499",
- "action_method": "GET"
}
}, - "collection": {
- "title": "Proposals List",
- "rel": "resource",
- "meta": {
- "component_id": "10316",
- "component_manifest": "proposals",
- "space_id": "2968",
- "space_manifest": "participatory_processes",
- "resource_id": "5499",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true
}
}
]
}
Proposal Details
Proposal detail
Authorizations:
path Parameters
id required | integer Proposal Id |
query Parameters
locales[] | Array of strings (Available locales) Items Enum: "en" "fr" |
space_manifest | string Enum: "participatory_processes" "assemblies" Space type |
space_id | integer Space Id |
component_id | integer Component Id |
filter[voted_weight_not_in][] | Array of strings (voted_weight not IN filter) match none of voted_weight's values in array |
filter[voted_weight_in][] | Array of strings (voted_weight IN filter) match one of voted_weight's values in array |
filter[voted_weight_start] | string (voted_weight starts With filter) Example: filter[voted_weight_start]=some_string voted_weight starts with |
filter[voted_weight_eq] | string (voted_weight equal filter) voted_weight is equal to |
filter[voted_weight_not_eq] | string (voted_weight not equal filter) voted_weight is NOT equal to |
filter[voted_weight_matches] | string (voted_weight like filter) Example: filter[voted_weight_matches]=%some_string matches voted_weight with |
filter[voted_weight_blank] | boolean (voted_weight blank filter) voted_weight is null or empty |
filter[state_not_in][] | Array of strings (state not IN filter) match none of state's values in array |
filter[state_in][] | Array of strings (state IN filter) match one of state's values in array |
filter[state_start] | string (state starts With filter) Example: filter[state_start]=some_string state starts with |
filter[state_eq] | string (state equal filter) state is equal to |
filter[state_not_eq] | string (state not equal filter) state is NOT equal to |
filter[state_matches] | string (state like filter) Example: filter[state_matches]=%some_string matches state with |
filter[state_blank] | boolean (state blank filter) state is null or empty |
Responses
Response samples
- 200
- 400
- 403
- 500
{- "data": {
- "id": "5774",
- "type": "proposal",
- "attributes": {
- "created_at": "2025-07-01T06:24:39Z",
- "updated_at": "2025-07-01T06:24:39Z",
- "title": {
- "en": "<script>alert(\"proposal_title\");</script> Saepe necessitatibus enim. 42869"
}, - "body": {
- "en": "<p><script>alert(\"proposal_body\");</script> Distinctio a enim. 42871</p>"
}
}, - "relationships": {
- "space": {
- "data": {
- "id": "3130",
- "type": "participatory_processes"
}
}, - "component": {
- "data": {
- "id": "10814",
- "type": "proposal_component"
}
}, - "author": {
- "data": {
- "id": "8816",
- "type": "user"
}
}, - "coauthors": {
- "data": [
- {
- "id": "8816",
- "type": "user"
}
], - "meta": {
- "count": 1
}
}
}, - "links": {
- "related": {
- "title": "<script>alert(\"component_name\");</script> Accusamus neque architecto. 42863",
- "rel": "resource",
- "meta": {
- "space_id": "3130",
- "space_manifest": "participatory_processes",
- "component_id": "10814",
- "component_manifest": "proposals",
- "action_method": "GET"
}
}, - "self": {
- "title": "Proposals Details",
- "rel": "resource",
- "meta": {
- "component_id": "10814",
- "component_manifest": "proposals",
- "space_id": "3130",
- "space_manifest": "participatory_processes",
- "resource_id": "5774",
- "action_method": "GET"
}
}, - "collection": {
- "title": "Proposals List",
- "rel": "resource",
- "meta": {
- "component_id": "10814",
- "component_manifest": "proposals",
- "space_id": "3130",
- "space_manifest": "participatory_processes",
- "resource_id": "5774",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true
}
}
}
Vote
Vote on a proposal
Authorizations:
Request Body schema: application/jsonrequired
proposal_id required | integer Proposal Id |
required | object (Vote A Proposal Data) Payload to send your vote |
Responses
Request samples
- Payload
{- "proposal_id": 0,
- "data": {
- "weight": 0
}
}
Response samples
- 200
- 403
- 404
- 500
{- "data": {
- "id": "5181",
- "type": "proposal",
- "attributes": {
- "created_at": "2025-07-01T06:22:24Z",
- "updated_at": "2025-07-01T06:22:24Z",
- "title": {
- "en": "<script>alert(\"proposal_title\");</script> Veniam cupiditate illum. 249"
}, - "body": {
- "en": "<p><script>alert(\"proposal_body\");</script> Ut velit culpa. 251</p>"
}
}, - "relationships": {
- "space": {
- "data": {
- "id": "2812",
- "type": "participatory_processes"
}
}, - "component": {
- "data": {
- "id": "9744",
- "type": "proposal_component"
}
}, - "author": {
- "data": {
- "id": "7935",
- "type": "user"
}
}, - "coauthors": {
- "data": [
- {
- "id": "7935",
- "type": "user"
}
], - "meta": {
- "count": 1
}
}
}, - "links": {
- "related": {
- "title": "<script>alert(\"proposals\");</script> Proposals",
- "rel": "resource",
- "meta": {
- "space_id": "2812",
- "space_manifest": "participatory_processes",
- "component_id": "9744",
- "component_manifest": "proposals",
- "action_method": "GET"
}
}, - "self": {
- "title": "Proposals Details",
- "rel": "resource",
- "meta": {
- "component_id": "9744",
- "component_manifest": "proposals",
- "space_id": "2812",
- "space_manifest": "participatory_processes",
- "resource_id": "5181",
- "action_method": "GET"
}
}, - "collection": {
- "title": "Proposals List",
- "rel": "resource",
- "meta": {
- "component_id": "9744",
- "component_manifest": "proposals",
- "space_id": "2812",
- "space_manifest": "participatory_processes",
- "resource_id": "5181",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true,
- "voted": {
- "weight": 0
}
}
}
}
Create draft proposal
Create a draft
Authorizations:
Request Body schema: application/jsonrequired
required | object (Draft Proposal Data) Payload to update in the proposal | ||
|
Responses
Request samples
- Payload
{- "data": {
- "component_id": 0
}
}
Response samples
- 200
- 400
- 403
- 404
- 500
{- "data": {
- "id": "5188",
- "type": "draft_proposal",
- "attributes": {
- "created_at": "2025-07-01T06:22:27Z",
- "updated_at": "2025-07-01T06:22:27Z",
- "title": { },
- "body": { },
- "errors": {
- "title": [
- "Title cannot be blank"
], - "body": [
- "Body cannot be blank"
]
}
}, - "relationships": {
- "space": {
- "data": {
- "id": "2818",
- "type": "participatory_processes"
}
}, - "component": {
- "data": {
- "id": "9750",
- "type": "proposal_component"
}
}, - "author": {
- "data": {
- "id": "7945",
- "type": "user"
}
}, - "coauthors": {
- "data": [
- {
- "id": "7945",
- "type": "user"
}
], - "meta": {
- "count": 1
}
}
}, - "links": {
- "related": {
- "title": "<script>alert(\"component_name\");</script> Cumque sint qui. 529",
- "rel": "resource",
- "meta": {
- "space_id": "2818",
- "space_manifest": "participatory_processes",
- "component_id": "9750",
- "component_manifest": "proposals",
- "action_method": "GET"
}
}, - "self": {
- "title": "Proposals Details",
- "rel": "resource",
- "meta": {
- "component_id": "9750",
- "component_manifest": "proposals",
- "space_id": "2818",
- "space_manifest": "participatory_processes",
- "resource_id": "5188",
- "action_method": "GET"
}
}, - "collection": {
- "title": "Proposals List",
- "rel": "resource",
- "meta": {
- "component_id": "9750",
- "component_manifest": "proposals",
- "space_id": "2818",
- "space_manifest": "participatory_processes",
- "resource_id": "5188",
- "action_method": "GET"
}
}
}, - "meta": {
- "publishable": false,
- "client_id": "bTXk-UlJiTMO8t0ZEhdLJdi7AdXOXDm8DETvJc0-HN8",
- "fields": [
- "title",
- "body"
]
}
}
}
Withdrawn a draft proposal
Withdrawn a draft proposal. This action cannot be undone.
Authorizations:
path Parameters
id required | integer Draft Id |
Responses
Response samples
- 200
- 403
- 404
- 500
{- "data": {
- "id": "5448",
- "type": "draft_proposal",
- "attributes": {
- "created_at": "2025-07-01T06:23:08Z",
- "updated_at": "2025-07-01T06:23:08Z",
- "title": { },
- "body": { },
- "errors": {
- "title": [ ],
- "body": [ ]
}
}, - "relationships": {
- "space": {
- "data": {
- "id": "2948",
- "type": "participatory_processes"
}
}, - "component": {
- "data": {
- "id": "10296",
- "type": "proposal_component"
}
}, - "author": {
- "data": {
- "id": "8230",
- "type": "user"
}
}, - "coauthors": {
- "data": [
- {
- "id": "8230",
- "type": "user"
}
], - "meta": {
- "count": 1
}
}
}, - "links": {
- "related": {
- "title": "<script>alert(\"component_name\");</script> At recusandae sunt. 20585",
- "rel": "resource",
- "meta": {
- "space_id": "2948",
- "space_manifest": "participatory_processes",
- "component_id": "10296",
- "component_manifest": "proposals",
- "action_method": "GET"
}
}, - "self": {
- "title": "Proposals Details",
- "rel": "resource",
- "meta": {
- "component_id": "10296",
- "component_manifest": "proposals",
- "space_id": "2948",
- "space_manifest": "participatory_processes",
- "resource_id": "5448",
- "action_method": "GET"
}
}, - "collection": {
- "title": "Proposals List",
- "rel": "resource",
- "meta": {
- "component_id": "10296",
- "component_manifest": "proposals",
- "space_id": "2948",
- "space_manifest": "participatory_processes",
- "resource_id": "5448",
- "action_method": "GET"
}
}
}, - "meta": {
- "publishable": false,
- "client_id": "E6g539lY4GRpC-LC0Q0oNxxPHwuKKqbih4uRxcMCk80",
- "fields": [
- "title",
- "body"
]
}
}
}
Display a draft proposal
Detail a draft proposal. Raise HTTP 404 error if no draft is created for now.
Authorizations:
path Parameters
id required | integer Draft Id |
Responses
Response samples
- 200
- 403
- 404
- 500
{- "data": {
- "id": "5454",
- "type": "draft_proposal",
- "attributes": {
- "created_at": "2025-07-01T06:23:16Z",
- "updated_at": "2025-07-01T06:23:16Z",
- "title": { },
- "body": { },
- "errors": {
- "title": [ ],
- "body": [
- "Body cannot be blank"
]
}
}, - "relationships": {
- "space": {
- "data": {
- "id": "2954",
- "type": "participatory_processes"
}
}, - "component": {
- "data": {
- "id": "10302",
- "type": "proposal_component"
}
}, - "author": {
- "data": {
- "id": "8238",
- "type": "user"
}
}, - "coauthors": {
- "data": [
- {
- "id": "8238",
- "type": "user"
}
], - "meta": {
- "count": 1
}
}
}, - "links": {
- "related": {
- "title": "<script>alert(\"component_name\");</script> Corrupti voluptate ea. 20965",
- "rel": "resource",
- "meta": {
- "space_id": "2954",
- "space_manifest": "participatory_processes",
- "component_id": "10302",
- "component_manifest": "proposals",
- "action_method": "GET"
}
}, - "self": {
- "title": "Proposals Details",
- "rel": "resource",
- "meta": {
- "component_id": "10302",
- "component_manifest": "proposals",
- "space_id": "2954",
- "space_manifest": "participatory_processes",
- "resource_id": "5454",
- "action_method": "GET"
}
}, - "collection": {
- "title": "Proposals List",
- "rel": "resource",
- "meta": {
- "component_id": "10302",
- "component_manifest": "proposals",
- "space_id": "2954",
- "space_manifest": "participatory_processes",
- "resource_id": "5454",
- "action_method": "GET"
}
}
}, - "meta": {
- "publishable": false,
- "client_id": "k_HH38Q_fBZZnXbMIaOgLq9HsiD0fKjSx-A9zFAuR40",
- "fields": [
- "title",
- "body"
]
}
}
}
Update draft proposal
This endpoint allows you to update a draft proposal associated with your application ID. Drafts updated via this API are not visible in the Decidim front-end, and drafts created from the Decidim application are not editable through the API. Therefore, any draft you create here is new and tied to your application's credentials.
Example Request
PUT /public/assemblies/12/2319/proposals/draft
Content-Type: application/json
Authorization: Bearer YOUR_bearer_token
{
"title": "My valid title"
}
Access Requirements
- Authentication: This endpoint requires an impersonation token. You must create drafts on behalf of a participant; drafts cannot be created using a service token (credential_token).
Error Handling
- Field Errors: Only errors related to the fields you're updating will be returned.
- Publishable Status: To determine if the draft is publishable, check the data.meta.publishable field in the response.
Example response
{
"data": {
"id": "12345",
"type": "proposal",
"attributes": {
"title": "My valid title",
"body": null
},
"meta": {
"publishable": false
}
}
}
In this example, the title is valid, so the server returns a 200 OK status. However, since the body is blank, meta.publishable is false, indicating that the draft is not yet ready for publication.
Authorizations:
path Parameters
id required | integer Draft Id |
Request Body schema: application/jsonrequired
required | object (Update Draft Proposal Payload Data) Payload to update in the proposal | ||||||
|
Responses
Request samples
- Payload
{- "data": {
- "title": "string",
- "body": "string",
- "locale": "en"
}
}
Response samples
- 200
- 400
- 403
- 500
{- "data": {
- "id": "5775",
- "type": "draft_proposal",
- "attributes": {
- "created_at": "2025-07-01T06:24:48Z",
- "updated_at": "2025-07-01T06:24:48Z",
- "title": {
- "fr": "This is a valid proposal title sample"
}, - "body": {
- "fr": ""
}, - "errors": {
- "title": [ ],
- "body": [
- "Body cannot be blank"
]
}
}, - "relationships": {
- "space": {
- "data": {
- "id": "3131",
- "type": "participatory_processes"
}
}, - "component": {
- "data": {
- "id": "10815",
- "type": "proposal_component"
}
}, - "author": {
- "data": {
- "id": "8830",
- "type": "user"
}
}, - "coauthors": {
- "data": [
- {
- "id": "8830",
- "type": "user"
}
], - "meta": {
- "count": 1
}
}
}, - "links": {
- "related": {
- "title": "<script>alert(\"component_name\");</script> Quia consequatur mollitia. 43089",
- "rel": "resource",
- "meta": {
- "space_id": "3131",
- "space_manifest": "participatory_processes",
- "component_id": "10815",
- "component_manifest": "proposals",
- "action_method": "GET"
}
}, - "self": {
- "title": "Proposals Details",
- "rel": "resource",
- "meta": {
- "component_id": "10815",
- "component_manifest": "proposals",
- "space_id": "3131",
- "space_manifest": "participatory_processes",
- "resource_id": "5775",
- "action_method": "GET"
}
}, - "collection": {
- "title": "Proposals List",
- "rel": "resource",
- "meta": {
- "component_id": "10815",
- "component_manifest": "proposals",
- "space_id": "3131",
- "space_manifest": "participatory_processes",
- "resource_id": "5775",
- "action_method": "GET"
}
}
}, - "meta": {
- "publishable": false,
- "client_id": "ksLx6u7H9AtVjxWK7g2M4OR8_aDAovmQuttgNpJPNds",
- "fields": [
- "title",
- "body"
]
}
}
}
Publish a draft proposal
Publish a draft proposal
Authorizations:
path Parameters
id required | integer Draft Id |
Responses
Response samples
- 200
- 400
- 403
- 404
- 500
{- "data": {
- "id": "5524",
- "type": "proposal",
- "attributes": {
- "created_at": "2025-07-01T06:23:44Z",
- "updated_at": "2025-07-01T06:23:45Z",
- "title": {
- "en": "<script>alert(\"proposal_title\");</script> Voluptas repellendus voluptatem. 23679"
}, - "body": {
- "en": "<p><script>alert(\"proposal_body\");</script> Rerum fugiat dolorem. 23681</p>"
}
}, - "relationships": {
- "space": {
- "data": {
- "id": "2998",
- "type": "participatory_processes"
}
}, - "component": {
- "data": {
- "id": "10346",
- "type": "proposal_component"
}
}, - "author": {
- "data": {
- "id": "8372",
- "type": "user"
}
}, - "coauthors": {
- "data": [
- {
- "id": "8372",
- "type": "user"
}
], - "meta": {
- "count": 1
}
}
}, - "links": {
- "related": {
- "title": "<script>alert(\"component_name\");</script> Facere sit esse. 23673",
- "rel": "resource",
- "meta": {
- "space_id": "2998",
- "space_manifest": "participatory_processes",
- "component_id": "10346",
- "component_manifest": "proposals",
- "action_method": "GET"
}
}, - "self": {
- "title": "Proposals Details",
- "rel": "resource",
- "meta": {
- "component_id": "10346",
- "component_manifest": "proposals",
- "space_id": "2998",
- "space_manifest": "participatory_processes",
- "resource_id": "5524",
- "action_method": "GET"
}
}, - "collection": {
- "title": "Proposals List",
- "rel": "resource",
- "meta": {
- "component_id": "10346",
- "component_manifest": "proposals",
- "space_id": "2998",
- "space_manifest": "participatory_processes",
- "resource_id": "5524",
- "action_method": "GET"
}
}
}, - "meta": {
- "published": true,
- "client_id": 4024
}
}
}