curl --request POST \
--url https://app.trypost.it/api/ideas \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Behind the scenes of the 2.0 launch",
"body": "Show the team, the whiteboard and the first sketch of the new composer.",
"idea_stage_id": "9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c",
"media_ids": [
"9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80"
],
"label_ids": [
"9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f"
]
}
'import requests
url = "https://app.trypost.it/api/ideas"
payload = {
"title": "Behind the scenes of the 2.0 launch",
"body": "Show the team, the whiteboard and the first sketch of the new composer.",
"idea_stage_id": "9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c",
"media_ids": ["9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80"],
"label_ids": ["9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Behind the scenes of the 2.0 launch',
body: JSON.stringify('Show the team, the whiteboard and the first sketch of the new composer.'),
idea_stage_id: '9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c',
media_ids: ['9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80'],
label_ids: ['9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f']
})
};
fetch('https://app.trypost.it/api/ideas', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Behind the scenes of the 2.0 launch',
'body' => 'Show the team, the whiteboard and the first sketch of the new composer.',
'idea_stage_id' => '9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c',
'media_ids' => [
'9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80'
],
'label_ids' => [
'9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f'
]
]),
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"
payload := strings.NewReader("{\n \"title\": \"Behind the scenes of the 2.0 launch\",\n \"body\": \"Show the team, the whiteboard and the first sketch of the new composer.\",\n \"idea_stage_id\": \"9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c\",\n \"media_ids\": [\n \"9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80\"\n ],\n \"label_ids\": [\n \"9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f\"\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://app.trypost.it/api/ideas")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Behind the scenes of the 2.0 launch\",\n \"body\": \"Show the team, the whiteboard and the first sketch of the new composer.\",\n \"idea_stage_id\": \"9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c\",\n \"media_ids\": [\n \"9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80\"\n ],\n \"label_ids\": [\n \"9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trypost.it/api/ideas")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Behind the scenes of the 2.0 launch\",\n \"body\": \"Show the team, the whiteboard and the first sketch of the new composer.\",\n \"idea_stage_id\": \"9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c\",\n \"media_ids\": [\n \"9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80\"\n ],\n \"label_ids\": [\n \"9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"idea_stage_id": "9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c",
"title": "Behind the scenes of the 2.0 launch",
"body": "Show the team, the whiteboard and the first sketch of the new composer.",
"position": 0,
"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>",
"errors": {}
}{
"name": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please retry after 30 seconds."
}Create idea
Creates an idea at the end of its stage. It needs a title, a body or media: an empty idea returns 422 on title. Ideas cannot be turned into posts through the API.
curl --request POST \
--url https://app.trypost.it/api/ideas \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Behind the scenes of the 2.0 launch",
"body": "Show the team, the whiteboard and the first sketch of the new composer.",
"idea_stage_id": "9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c",
"media_ids": [
"9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80"
],
"label_ids": [
"9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f"
]
}
'import requests
url = "https://app.trypost.it/api/ideas"
payload = {
"title": "Behind the scenes of the 2.0 launch",
"body": "Show the team, the whiteboard and the first sketch of the new composer.",
"idea_stage_id": "9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c",
"media_ids": ["9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80"],
"label_ids": ["9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Behind the scenes of the 2.0 launch',
body: JSON.stringify('Show the team, the whiteboard and the first sketch of the new composer.'),
idea_stage_id: '9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c',
media_ids: ['9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80'],
label_ids: ['9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f']
})
};
fetch('https://app.trypost.it/api/ideas', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Behind the scenes of the 2.0 launch',
'body' => 'Show the team, the whiteboard and the first sketch of the new composer.',
'idea_stage_id' => '9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c',
'media_ids' => [
'9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80'
],
'label_ids' => [
'9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f'
]
]),
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"
payload := strings.NewReader("{\n \"title\": \"Behind the scenes of the 2.0 launch\",\n \"body\": \"Show the team, the whiteboard and the first sketch of the new composer.\",\n \"idea_stage_id\": \"9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c\",\n \"media_ids\": [\n \"9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80\"\n ],\n \"label_ids\": [\n \"9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f\"\n ]\n}")
req, _ := http.NewRequest("POST", 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.post("https://app.trypost.it/api/ideas")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Behind the scenes of the 2.0 launch\",\n \"body\": \"Show the team, the whiteboard and the first sketch of the new composer.\",\n \"idea_stage_id\": \"9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c\",\n \"media_ids\": [\n \"9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80\"\n ],\n \"label_ids\": [\n \"9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trypost.it/api/ideas")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Behind the scenes of the 2.0 launch\",\n \"body\": \"Show the team, the whiteboard and the first sketch of the new composer.\",\n \"idea_stage_id\": \"9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c\",\n \"media_ids\": [\n \"9d3c1f31-9b0c-4d1e-8f2a-3b4c5d6e7f80\"\n ],\n \"label_ids\": [\n \"9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "9e2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"idea_stage_id": "9e1a2b3c-4d5e-4f6a-8b7c-9d0e1f2a3b4c",
"title": "Behind the scenes of the 2.0 launch",
"body": "Show the team, the whiteboard and the first sketch of the new composer.",
"position": 0,
"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>",
"errors": {}
}{
"name": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please retry after 30 seconds."
}Authorizations
Workspace API key from Settings → API Keys.
Body
25510000Stage of this workspace. null is Unassigned.
Media to attach, by id: the id of a media item of a post or idea of this workspace, or the media_id of a signed upload. A file taken from a post or idea is copied with a new id; an unclaimed signed upload is attached as is and keeps its id.
10Labels of this workspace.
Response
The created 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.
"2026-10-07 18:20:00"
UTC, format Y-m-d H:i:s.
"2026-10-07 18:20:00"

