Skip to content
Syncline

Trello API reference

<p>This page documents the Syncline endpoints for the Trello connector. They are Syncline routes, served from the Syncline API and authenticated with a Syncline key. They are not Trello's own REST API and they do not describe it: read Atlassian's developer documentation when you need the vendor routes.</p><p>A connection covers the boards your Trello account can see, and each call names one board so list names stay unambiguous. Cards are created with title, description, due date, labels and members set in a single request, and the response gives you the card ID and short URL to store on the source record.</p>
Base URL: https://api.syncline.topclb.com

Authentication

Send a Syncline secret key as a bearer token: Authorization: Bearer sk_live_... . The connection_id parameter selects the authorised Trello account, and board_id narrows every call to a single board. Revoking the Syncline token from your Trello account settings ends access at once, and calls then return 401 rather than failing quietly.

Endpoints

<article class="sy-endpoint"><h3><code>POST /v1/connectors/trello/cards</code></h3><p>Create a card on a list with its title, description, due date and labels.</p><div class="sy-table-wrap"><table><thead><tr><th>Param</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>connection_id</td><td>string</td><td>yes</td><td>The authorised Trello account to act as.</td></tr><tr><td>list_id</td><td>string</td><td>yes</td><td>The list the card is created on. Read it from the lists route.</td></tr><tr><td>name</td><td>string</td><td>yes</td><td>The card title, usually mapped from a subject line or a record name.</td></tr><tr><td>desc</td><td>string</td><td>no</td><td>Card description in Markdown. A link back to the source record belongs here.</td></tr><tr><td>due</td><td>string</td><td>no</td><td>ISO 8601 due date. Stored in UTC and shown in each member's own timezone.</td></tr><tr><td>labels</td><td>array</td><td>no</td><td>Existing label names on that board. A label the board does not have is reported, never invented.</td></tr></tbody></table></div><pre><code>{ &quot;run_id&quot;: &quot;run_5e20cae9&quot;, &quot;connector&quot;: &quot;trello&quot;, &quot;status&quot;: &quot;ok&quot;, &quot;data&quot;: { &quot;card_id&quot;: &quot;66d1f4a208c3b91e77452a10&quot;, &quot;short_url&quot;: &quot;https://trello.com/c/8Qk2Vn1p&quot;, &quot;list_id&quot;: &quot;66d1f39b1c440a2f0d18e5c2&quot;, &quot;due&quot;: &quot;2026-09-12T17:00:00Z&quot;, &quot;labels_applied&quot;: [&quot;Support&quot;] } }</code></pre></article><article class="sy-endpoint"><h3><code>POST /v1/connectors/trello/cards/{card_id}/move</code></h3><p>Move a card to another list, the supported way to mark work finished.</p><div class="sy-table-wrap"><table><thead><tr><th>Param</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>connection_id</td><td>string</td><td>yes</td><td>The authorised Trello account holding the card.</td></tr><tr><td>list_id</td><td>string</td><td>yes</td><td>Destination list. It must be on the same board as the card.</td></tr><tr><td>position</td><td>string</td><td>no</td><td>One of top or bottom. Defaults to bottom.</td></tr><tr><td>comment</td><td>string</td><td>no</td><td>Text posted on the card at the same time, so the board explains why it moved.</td></tr></tbody></table></div><pre><code>{ &quot;run_id&quot;: &quot;run_6f31dbfa&quot;, &quot;connector&quot;: &quot;trello&quot;, &quot;status&quot;: &quot;ok&quot;, &quot;data&quot;: { &quot;card_id&quot;: &quot;66d1f4a208c3b91e77452a10&quot;, &quot;list_from&quot;: &quot;In progress&quot;, &quot;list_to&quot;: &quot;Done&quot;, &quot;comment_posted&quot;: true, &quot;moved_at&quot;: &quot;2026-09-07T11:38:05Z&quot; } }</code></pre></article><article class="sy-endpoint"><h3><code>POST /v1/connectors/trello/cards/{card_id}/comments</code></h3><p>Post a comment on a card, which keeps history where people read it.</p><div class="sy-table-wrap"><table><thead><tr><th>Param</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>connection_id</td><td>string</td><td>yes</td><td>The authorised Trello account to comment as.</td></tr><tr><td>text</td><td>string</td><td>yes</td><td>Comment body in Markdown, up to 16384 characters.</td></tr><tr><td>idempotency_key</td><td>string</td><td>no</td><td>Repeating a key within 24 hours returns the original comment rather than posting twice.</td></tr></tbody></table></div><pre><code>{ &quot;run_id&quot;: &quot;run_7042ec0b&quot;, &quot;connector&quot;: &quot;trello&quot;, &quot;status&quot;: &quot;ok&quot;, &quot;data&quot;: { &quot;card_id&quot;: &quot;66d1f4a208c3b91e77452a10&quot;, &quot;comment_id&quot;: &quot;66d20115b7e9c4410f2a7733&quot;, &quot;posted_at&quot;: &quot;2026-09-07T11:40:19Z&quot; } }</code></pre></article><article class="sy-endpoint"><h3><code>GET /v1/connectors/trello/lists</code></h3><p>List the lists and labels on a board, for building a mapping.</p><div class="sy-table-wrap"><table><thead><tr><th>Param</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>connection_id</td><td>string</td><td>yes</td><td>The authorised Trello account to read through.</td></tr><tr><td>board_id</td><td>string</td><td>yes</td><td>The board to describe. One flow works on one board at a time.</td></tr><tr><td>include_labels</td><td>boolean</td><td>no</td><td>Include the board's label set with colours and names. Defaults to true.</td></tr></tbody></table></div><pre><code>{ &quot;run_id&quot;: &quot;run_8153fd1c&quot;, &quot;connector&quot;: &quot;trello&quot;, &quot;status&quot;: &quot;ok&quot;, &quot;data&quot;: { &quot;board_name&quot;: &quot;Support Triage&quot;, &quot;lists&quot;: [ { &quot;list_id&quot;: &quot;66d1f39b1c440a2f0d18e5c2&quot;, &quot;name&quot;: &quot;New&quot;, &quot;card_count&quot;: 14 }, { &quot;list_id&quot;: &quot;66d1f3a7d2b1084c9e77f210&quot;, &quot;name&quot;: &quot;Done&quot;, &quot;card_count&quot;: 203 } ], &quot;labels&quot;: [&quot;Support&quot;, &quot;Billing&quot;, &quot;Bug&quot;] } }</code></pre></article><article class="sy-endpoint"><h3><code>POST /v1/connectors/trello/cards/{card_id}/checklists</code></h3><p>Attach a checklist so a standard process arrives with the card.</p><div class="sy-table-wrap"><table><thead><tr><th>Param</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>connection_id</td><td>string</td><td>yes</td><td>The authorised Trello account holding the card.</td></tr><tr><td>name</td><td>string</td><td>yes</td><td>Checklist title, such as Onboarding steps.</td></tr><tr><td>items</td><td>array</td><td>yes</td><td>Ordered item strings. Up to 100 per checklist.</td></tr><tr><td>skip_if_present</td><td>boolean</td><td>no</td><td>Do nothing when a checklist with this name already exists. Defaults to true.</td></tr></tbody></table></div><pre><code>{ &quot;run_id&quot;: &quot;run_92640e2d&quot;, &quot;connector&quot;: &quot;trello&quot;, &quot;status&quot;: &quot;ok&quot;, &quot;data&quot;: { &quot;card_id&quot;: &quot;66d1f4a208c3b91e77452a10&quot;, &quot;checklist_id&quot;: &quot;66d2019c4a1f2b7710d9e004&quot;, &quot;name&quot;: &quot;Onboarding steps&quot;, &quot;items_added&quot;: 6, &quot;skipped&quot;: false } }</code></pre></article>

Errors

<div class="sy-table-wrap"><table><thead><tr><th>Code</th><th>Meaning</th><th>What to do</th></tr></thead><tbody><tr><td>401 connection_revoked</td><td>The Trello token was revoked from your account settings, so the connector can no longer act.</td><td>Reauthorise from Connections. Cards already created are untouched and failed runs can be replayed after.</td></tr><tr><td>403 board_not_authorised</td><td>The board is outside what this Trello account can see, or it belongs to a workspace the account left.</td><td>Get access to the board in Trello, or point the flow at a board this account is a member of.</td></tr><tr><td>404 list_not_found</td><td>The list ID does not exist on the board, usually because a column was renamed or deleted.</td><td>Call the lists route to read current IDs, then update the flow. List names are not stable identifiers.</td></tr><tr><td>409 label_not_on_board</td><td>A label name in the request is not defined on that board, and the connector will not create one for you.</td><td>Create the label in Trello with the same name, or drop it from the request. Label sets are per board.</td></tr><tr><td>429 upstream_rate_limited</td><td>Trello throttled the token, which allows roughly 100 requests every ten seconds.</td><td>Group card updates into fewer calls and check retry_after. A bulk import should run through the backfill runner.</td></tr></tbody></table></div>

Rate limits

Syncline allows 120 requests per minute per API key. Trello allows roughly 100 requests every ten seconds per token, and that budget is shared across every flow using the same connection, so two busy boards on one account can starve each other. Split them onto separate connections when a board handles more than a few hundred cards a day.

Code samples

<h4>curl</h4><pre><code>curl -X POST https://api.syncline.topclb.com/v1/connectors/trello/cards \ -H &quot;Authorization: Bearer $SYNCLINE_KEY&quot; \ -H &quot;Content-Type: application/json&quot; \ -d '{ &quot;connection_id&quot;: &quot;con_trello_3p6&quot;, &quot;list_id&quot;: &quot;66d1f39b1c440a2f0d18e5c2&quot;, &quot;name&quot;: &quot;Invoice 20481 looks wrong&quot;, &quot;desc&quot;: &quot;From lena@harbourline.example&quot;, &quot;labels&quot;: [&quot;Support&quot;] }'</code></pre><h4>node</h4><pre><code>const res = await fetch( &quot;https://api.syncline.topclb.com/v1/connectors/trello/cards&quot;, { method: &quot;POST&quot;, headers: { Authorization: `Bearer ${process.env.SYNCLINE_KEY}`, &quot;Content-Type&quot;: &quot;application/json&quot; }, body: JSON.stringify({ connection_id: &quot;con_trello_3p6&quot;, list_id: &quot;66d1f39b1c440a2f0d18e5c2&quot;, name: &quot;Invoice 20481 looks wrong&quot;, labels: [&quot;Support&quot;] }) } ); const { data } = await res.json(); console.log(data.short_url);</code></pre><h4>python</h4><pre><code>import os import requests resp = requests.post( &quot;https://api.syncline.topclb.com/v1/connectors/trello/cards&quot;, headers={&quot;Authorization&quot;: f&quot;Bearer {os.environ['SYNCLINE_KEY']}&quot;}, json={ &quot;connection_id&quot;: &quot;con_trello_3p6&quot;, &quot;list_id&quot;: &quot;66d1f39b1c440a2f0d18e5c2&quot;, &quot;name&quot;: &quot;Invoice 20481 looks wrong&quot;, &quot;labels&quot;: [&quot;Support&quot;], }, timeout=30, ) resp.raise_for_status() print(resp.json()[&quot;data&quot;][&quot;short_url&quot;])</code></pre>