CONNECT
CONNECT
OAUTH · TOKENS · PUBLICERING · STATISTIK

API

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.

Kom igång
tre rader

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.

Konton
vad som är kopplat
GET
/api/me
Vem nyckeln tillhör och hur många konton den når.
GET
/api/accounts?provider=instagram
Alla dina konton. provider är valfritt filter: instagram, facebook, tiktok, youtube, bluesky. Varje konto har id, username, capabilities och token_expires_in_days – tokens själva lämnar aldrig servern.
GET
/api/accounts/{account_id}
Ett konto, plus en färsk profile hämtad från plattformen. Går profilhämtningen fel kommer profile_error istället – resten av svaret står kvar.
DEL
/api/accounts/{account_id}
Kopplar bort kontot och raderar dess token hos oss. Svarar {"deleted": true}.
POST
/api/refresh-tokens
Förnyar alla dina tokens direkt. Sker automatiskt var sjätte timme – det här är för när du inte vill vänta.
GET
/api/artists
Artisterna du lagt upp i Studio, med persona och vald postväg.
Publicera
ett anrop, alla plattformar
POST
/api/post
Lägger upp ett inlägg. Se kroppen nedan.
GET
/api/post/{post_id}
Status för ett inlägg: queued, processing, published eller failed, med plattformens id och URL när det är klart.
GET
/api/posts?account_id=&limit=50
Loggen över allt du publicerat via Connect.
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.

Statistik och innehåll
läsa tillbaka
GET
/api/insights/{account_id}
Kontots siffror: följare, räckvidd, visningar – så långt plattformen lämnar ut dem.
GET
/api/content/{account_id}?limit=20
Senaste inläggen på kontot, med statistik per inlägg där det finns. Också sådant som postats utanför Connect.
GET
/api/tiktok/creator-info/{account_id}
TikToks egna gränser för kontot innan du postar: tillåtna integritetsnivåer, maxlängd på video, om kommentarer eller duetter är avstängda. Svarar 400 om kontot inte är TikTok.
Kommentarer och meddelanden
kräver extra behörigheter
GET
/api/comments/{account_id}?limit=50
Kommentarer på kontots inlägg.
POST
/api/comments/reply
Kropp: {"account_id", "comment_id", "text"}.
GET
/api/messages/{account_id}?limit=20
Konversationer i inkorgen.
POST
/api/messages/send
Kropp: {"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.

Vad varje plattform klarar
läses ur koden
PlattformPubliceraLäsa och svara
Instagram bild, video, reel, story, karusell statistik, inlägg, kommentarer, svara, DM, skicka DM
Facebook 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 och gränser
vad du kan råka ut för

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.

Gränser

  • Uppladdade mediafiler städas bort efter 48 timmar. Publicera först, städa sedan.
  • Publicering med wait: true ger upp efter 600 sekunder och lämnar över till post_id.
  • Tokens förnyas automatiskt var sjätte timme. Du behöver aldrig göra det själv.
  • Inloggning med e-postlänk är takt-begränsad. API-nycklar är det inte – de är dina.
  • En betald plats får skapa 1000 inlägg per kalendermånad. Köade, pågående och publicerade räknas, misslyckade inte. Över taket svarar 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.

Ett konto, en ägare

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.

Om en nyckel läcker
gör så här

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.

CONNECT
inte inloggad publik adress https://heidiconnect.app Heidi-API https://heidiconnect.app/api
HEIDI CONNECT · BUILD V0.1 · HEIDI CONNECT