Move idea
curl --request PUT \
--url https://app.trypost.it/api/ideas/{idea}/move \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"idea_stage_id": "9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d",
"idea_ids": [
"9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f",
"9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
]
}
'import requests
url = "https://app.trypost.it/api/ideas/{idea}/move"
payload = {
"idea_stage_id": "9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d",
"idea_ids": ["9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f", "9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
idea_stage_id: '9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d',
idea_ids: ['9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f', '9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d']
})
};
fetch('https://app.trypost.it/api/ideas/{idea}/move', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trypost.it/api/ideas/{idea}/move",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'idea_stage_id' => '9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d',
'idea_ids' => [
'9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f',
'9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.trypost.it/api/ideas/{idea}/move"
payload := strings.NewReader("{\n \"idea_stage_id\": \"9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d\",\n \"idea_ids\": [\n \"9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f\",\n \"9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\"\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://app.trypost.it/api/ideas/{idea}/move")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idea_stage_id\": \"9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d\",\n \"idea_ids\": [\n \"9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f\",\n \"9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trypost.it/api/ideas/{idea}/move")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"idea_stage_id\": \"9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d\",\n \"idea_ids\": [\n \"9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f\",\n \"9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"idea_stage_id": "9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d",
"title": "Behind the scenes of the 2.0 launch",
"body": "Show the team, the whiteboard and the first sketch of the new composer.",
"position": 1,
"media": [
{
"id": "9e2b3c50-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
"path": "medias/9e2b3c50-7a8b-4c9d-8e0f-1a2b3c4d5e6f.jpg",
"url": "https://media.trypost.it/medias/9e2b3c50-7a8b-4c9d-8e0f-1a2b3c4d5e6f.jpg",
"type": "image",
"mime_type": "image/jpeg",
"original_filename": "whiteboard.jpg",
"size": 351204,
"meta": {
"width": 1600,
"height": 1200
}
}
],
"labels": [
{
"id": "9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f",
"name": "Launch",
"color": "#2563EB",
"created_at": "2026-09-01 10:00:00",
"updated_at": "2026-09-01 10:00:00"
}
],
"created_at": "2026-10-07 18:20:00",
"updated_at": "2026-10-07 18:20:00"
}{
"message": "Unauthenticated."
}{
"message": "Active subscription required."
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}{
"name": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please retry after 30 seconds."
}Ideas
Move idea
Moves an idea to a stage (or to Unassigned with idea_stage_id: null) and sets the order of that stage. idea_ids is the full order of the target stage after the move: every idea already in it plus the moved idea, each once. When the list does not match the ideas in that stage (someone changed the board), the request returns 422 on idea_ids and nothing moves.
PUT
/
ideas
/
{idea}
/
move
Move idea
curl --request PUT \
--url https://app.trypost.it/api/ideas/{idea}/move \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"idea_stage_id": "9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d",
"idea_ids": [
"9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f",
"9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
]
}
'import requests
url = "https://app.trypost.it/api/ideas/{idea}/move"
payload = {
"idea_stage_id": "9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d",
"idea_ids": ["9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f", "9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
idea_stage_id: '9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d',
idea_ids: ['9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f', '9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d']
})
};
fetch('https://app.trypost.it/api/ideas/{idea}/move', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.trypost.it/api/ideas/{idea}/move",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'idea_stage_id' => '9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d',
'idea_ids' => [
'9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f',
'9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.trypost.it/api/ideas/{idea}/move"
payload := strings.NewReader("{\n \"idea_stage_id\": \"9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d\",\n \"idea_ids\": [\n \"9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f\",\n \"9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\"\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://app.trypost.it/api/ideas/{idea}/move")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"idea_stage_id\": \"9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d\",\n \"idea_ids\": [\n \"9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f\",\n \"9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trypost.it/api/ideas/{idea}/move")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"idea_stage_id\": \"9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d\",\n \"idea_ids\": [\n \"9e2b3c4f-7a8b-4c9d-8e0f-2a3b4c5d6e7f\",\n \"9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"idea_stage_id": "9e1a2b3d-5e6f-4a7b-9c8d-0e1f2a3b4c5d",
"title": "Behind the scenes of the 2.0 launch",
"body": "Show the team, the whiteboard and the first sketch of the new composer.",
"position": 1,
"media": [
{
"id": "9e2b3c50-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
"path": "medias/9e2b3c50-7a8b-4c9d-8e0f-1a2b3c4d5e6f.jpg",
"url": "https://media.trypost.it/medias/9e2b3c50-7a8b-4c9d-8e0f-1a2b3c4d5e6f.jpg",
"type": "image",
"mime_type": "image/jpeg",
"original_filename": "whiteboard.jpg",
"size": 351204,
"meta": {
"width": 1600,
"height": 1200
}
}
],
"labels": [
{
"id": "9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f",
"name": "Launch",
"color": "#2563EB",
"created_at": "2026-09-01 10:00:00",
"updated_at": "2026-09-01 10:00:00"
}
],
"created_at": "2026-10-07 18:20:00",
"updated_at": "2026-10-07 18:20:00"
}{
"message": "Unauthenticated."
}{
"message": "Active subscription required."
}{
"message": "<string>"
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}{
"name": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please retry after 30 seconds."
}Authorizations
Workspace API key from Settings → API Keys.
Path Parameters
Idea id. An idea of another workspace returns 404.
Body
application/json
Response
The moved idea.
Stage (board column) of the idea. null is Unassigned.
Order within its stage, starting at 0.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
UTC, format Y-m-d H:i:s.
Example:
"2026-10-07 18:20:00"
UTC, format Y-m-d H:i:s.
Example:
"2026-10-07 18:20:00"

