Ett HTTP-API över de konton du kopplat. Samma anrop oavsett om det går till Instagram, Facebook, TikTok eller Bluesky – Connect sköter tokens, förnyelse, uppladdning och de olika plattformarnas egenheter. Det här är gränssnittet HEIDI Command Center pratar med, och det är öppet för vilket eget system som helst.
1. Hämta din nyckel. Den finns på Konton, längst ner. Varje användare har egna nycklar och ser bara sina egna konton. Du kan ha flera och radera en utan att röra de andra.
2. Skicka den i headern X-Heidi-Key på varje anrop.
3. Bas-URL är https://heidiconnect.app. Allt svarar JSON, alltid UTF-8.
curl https://heidiconnect.app/api/me \
-H "X-Heidi-Key: $HEIDI_KEY"
{"user": {"id": "u_...", "email": "[email protected]"},
"accounts": 4,
"base_url": "https://heidiconnect.app"}
Nyckeln går också att skicka som ?key= i URL:en, men gör inte det i
skarp drift – URL:er hamnar i loggar, historik och proxyservrar. Headern gör inte det.
instagram, facebook, tiktok, youtube, bluesky.
Varje konto har id, username, capabilities och
token_expires_in_days – tokens själva lämnar aldrig servern.profile hämtad från plattformen.
Går profilhämtningen fel kommer profile_error istället – resten av svaret står kvar.{"deleted": true}.queued, processing,
published eller failed, med plattformens id och URL när det är klart.POST /api/post
Content-Type: application/json
X-Heidi-Key: $HEIDI_KEY
{
"account_id": "instagram_c176b820",
"kind": "auto",
"caption": "Ny låt ute nu.",
"media": ["https://exempel.se/omslag.jpg"],
"options": {},
"wait": true
}
kind – auto (rekommenderas), text, image,
video, reel, story eller carousel.
På auto väljs typen utifrån vad du skickar med: en bild blir bild, en video blir
video eller reel, flera filer blir karusell, inget blir text.
media – https-URL:er eller sökvägar till filer du laddat upp. Flera filer i listan blir en karusell. Plattformarna hämtar filen själva, så URL:en måste vara öppen så länge publiceringen pågår.
wait – true håller anropet öppet tills plattformen svarat klart och du
får status: "published" med en gång. false svarar direkt
202 med ett post_id du frågar på när du vill. Tar det för lång tid
med wait: true får du ändå 202 och en hint om var du
hämtar statusen – inget går förlorat.
options – det plattformsspecifika som inte passar någon annanstans; exempelvis
TikToks integritetsnivå eller om kommentarer ska vara på. Tomt objekt duger nästan alltid.
Instagram: first_comment lägger texten som första kommentar på inlägget
(hashtags, så captionen hålls ren); konton utan kommentarsbehörighet får texten sist i
captionen i stället. thumb_offset (ms) väljer omslagsrutan.
400 om
kontot inte är TikTok.{"account_id", "comment_id", "text"}.{"account_id", "recipient_id", "text"}.Koden är på plats, men plattformarna släpper inte in oss ännu. Kommentarer och DM på Instagram och Facebook kräver behörigheter vi ansöker om i en andra omgång hos Meta. Fram till dess svarar de här anropen med ett fel från plattformen, inte med tomma listor – du ska aldrig behöva gissa om det är tyst eller trasigt.
| Plattform | Publicera | Läsa och svara |
|---|---|---|
| bild, video, reel, story, karusell | statistik, inlägg, kommentarer, svara, DM, skicka DM | |
| text, bild, video, reel, story, karusell | statistik, inlägg, kommentarer, svara, DM, skicka DM | |
| TikTok | bild, video, karusell | statistik, inlägg |
| YouTube | video | statistik, inlägg |
| Bluesky | text, bild, video, karusell | statistik, inlägg, kommentarer, svara, DM, skicka DM |
| TikTok Business | bild, video, karusell | statistik, inlägg, kommentarer, svara, gilla kommentarer |
Tabellen visar vad Connect kan göra mot varje plattform. Vad plattformen släpper igenom just nu är en annan sak – den avgörs av granskningsläget hos Meta och TikTok.
Fel kommer alltid som JSON med samma form, och HTTP-koden säger vems felet är:
{"error": "Kontot instagram_x finns inte", "details": null}
401 – nyckeln saknas eller är fel. 404 – kontot eller inlägget finns inte,
eller tillhör någon annan. 400 – felaktig kropp; details pekar då ut
exakt vilket fält som strular. 502 – plattformen svarade med ett fel, och
error är plattformens eget meddelande i klartext.
wait: true ger upp efter 600 sekunder och lämnar över till post_id.POST /api/post med 429, details.kvot och datumet då kvoten återställs.
GET /api/me visar kvot: anvant, tak, kvar, aterstalls. Platser via Command Center har inget tak.Varje anrop slår bara mot konton som hör till nyckelns användare. Det finns ingen väg
att nå någon annans konton med sin egen nyckel, inte ens med rätt account_id –
ägarskapet kontrolleras i databasfrågan, inte efteråt.
Radera den på Konton och skapa en ny. Den gamla slutar fungera omedelbart, och dina kopplade konton påverkas inte – du behöver inte koppla om något. Har du flera system igång är det därför värt att ge varje system sin egen nyckel: då kan du dra ur ett utan att stänga av resten.