Dokumentacija za programere
Dokumentacija za programere

Integriši Chat33
sa svojim alatima.

Piksel za praćenje, webhook događaji, MMP postbackovi za instalacije i praćenje prihoda. Sve što ti treba da povežeš Chat33 sa svojim sajtom ili aplikacijom.

Početak

Za Chat33 integracije za programere treba ti MMP Token. Nalazi se na kontrolnoj tabli, u Podešavanja → Integracije.

1. Uzmi svoj token

Idi na Podešavanja → Integracije → MMP Token. Klikni "Generiši token" ako ga još nemaš.

2. Izaberi integraciju

Sajt / veb aplikacija

Koristi piksel za praćenje poseta stranicama, registracija i kupovina.

Mobilna aplikacija

Koristi MMP postbackove (AppsFlyer, Adjust, Branch, Tenjin, Singular) za praćenje instalacija.

Piksel za praćenje

Prati događaje na sajtu i poveži ih sa DM razgovorima

Instalacija

Dodaj ovaj script tag u <head> svog sajta ili pre </body>. Zameni YOUR_PIXEL_KEY ključem piksela iz Podešavanja, Integracije. Nikad ne koristi MMP token ovde: on je tajan.

html
<script src="https://chat33.io/pixel.js" data-token="YOUR_PIXEL_KEY"></script>

Praćenje događaja

Piksel automatski prati posete stranicama. Za prilagođene događaje (kupovine, registracije i slično) koristi metod chat33.track():

javascript
// Track a purchase with value
chat33.track("purchase", {
  value: 49.99,
  currency: "USD",
  product: "Pro Plan"
});

// Track a signup
chat33.track("signup");

// Track a lead
chat33.track("lead", { source: "landing_page" });

// Track any custom event
chat33.track("tutorial_complete", { step: 5 });

Kako radi

Pametni linkovi

Chat33 dodaje ?cid=xxx na praćene linkove u DM-ovima

Automatska atribucija

Piksel čita ID kontakta iz URL-a i čuva ga između stranica

Automatsko označavanje

Događaji kao 'purchase' automatski dodaju oznaku kontaktu u tvom CRM-u

API referenca

MetodParametriOpis
chat33.track(event, metadata?)event: string, metadata: objectŠalje prilagođeni događaj
chat33.identify(contactId)contactId: stringRučno postavlja ID kontakta
chat33.getContactId()—Vraća trenutni ID kontakta

API za webhook događaje

Šalji prilagođene događaje sa svog servera na Chat33

Endpoint

http
POST https://chat33.io/api/webhooks/events?token=YOUR_TOKEN

Content-Type: application/json

{
  "event": "purchase",
  "contactId": "cm1abc123...",
  "value": 49.99,
  "currency": "USD",
  "metadata": {
    "product": "Pro Plan",
    "source": "checkout"
  }
}

Telo zahteva

PoljeTipObaveznoOpis
eventstringDaNaziv događaja (purchase, signup, lead i slično)
contactIdstringNeChat33 ID kontakta za atribuciju
valuenumberNeNovčana vrednost događaja
currencystringNeKod valute (USD, EUR i slično)
metadataobjectNeBilo koji dodatni podaci

Primeri

bash
# cURL
curl -X POST "https://chat33.io/api/webhooks/events?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"event":"purchase","value":29.99,"currency":"USD"}'
javascript
// Node.js / fetch
await fetch("https://chat33.io/api/webhooks/events?token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    event: "purchase",
    contactId: "cm1abc123...",
    value: 29.99,
    currency: "USD",
  }),
});

Ograničenje: 100 događaja u minutu po tokenu. Događaji se čuvaju kao analitički događaji, a kontakti se automatski označavaju prema nazivu događaja (npr. "purchase" → oznaka "Purchased").

API za objavljivanje

Zakazuj i objavljuj sadržaj na Instagramu, Facebooku, TikToku, YouTube-u, X-u (Twitter), LinkedInu, Bluesky-ju i Threads-u

Autentifikacija

Generiši API ključ u Podešavanja → API ključevi. Šalji ga kao header x-api-key u svim zahtevima.

bash
# All API requests require this header:
x-api-key: sk_live_your_api_key_here

Podržane platforme

Instagram

Fotografije, Reels, karuseli (preko IG Graph API-ja)

Facebook

Tekst, fotografije i video, sa izvornim zakazivanjem

TikTok

Video i foto objave preko Content Posting API-ja

YouTube

Upload videa, sa izvornim zakazanim objavljivanjem

X (Twitter)

Tekst, fotografije, video i niti preko X API v2 (troši kredite)

LinkedIn

Tekst, link kartice, do 9 slika ili video, objavljeno na ličnom profilu člana

Bluesky

Tekst, link kartice, do 4 slike ili video, preko AT Protocol-a

Threads

Tekst, slike, video, karuseli do 20, ankete i oznake tema

Pravljenje objave

bash
curl -X POST "https://chat33.io/api/v1/posts" \
  -H "x-api-key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "accountIds": ["channel_id_here"],
    "text": "Check out our new product! #launch",
    "mediaUrls": ["https://your-blob-url.com/image.jpg"],
    "mediaType": "image"
  }'

Opcije platformi (platformConfig)

Podešavanja po platformi idu pod ključ sa nazivom platforme. Čitaju se samo ključevi za platforme iz accountIds, pa jedan zahtev može da nosi opcije za više njih odjednom. Svaka platforma prima text koji zamenjuje zajednički tekst, pa ista objava može da glasi drugačije na svakoj mreži.

Dve stvari koje treba znati pre prvog poziva: youtube.madeForKids se odbija ako nedostaje, umesto da dobije podrazumevanu vrednost, jer YouTube traži tu izjavu za svaki upload. A TikTok objava bez objekta consent završava u nacrtima naloga umesto da se objavi.

json
{
  "instagram": {
    "text": "...",                     // caption for this platform only
    "firstComment": "#tags #here"      // posted right after publish
  },
  "facebook": {
    "text": "..."
  },
  "linkedin": {
    "text": "...",
    "visibility": "PUBLIC",            // or "CONNECTIONS" (1st-degree only)
    "articleUrl": "https://...",       // link card, ignored when the post has media
    "mediaTitle": "...",
    "mediaDescription": "..."
  },
  "youtube": {
    "madeForKids": false,              // REQUIRED for any YouTube channel
    "privacyStatus": "public",         // or "unlisted" / "private"
    "title": "...",
    "description": "...",
    "tags": ["one", "two"],            // up to 30
    "categoryId": "22",                // default: People & Blogs
    "notifySubscribers": true
  },
  "x": {
    "text": "...",
    "thread": true,                    // split text into a thread
    "splitOn": "---",
    "replyControl": "everyone"         // or "following" / "mentionedUsers"
  },
  "tiktok": {
    "text": "...",
    "consent": {
      "publishMode": "DIRECT_POST",    // or "MEDIA_UPLOAD" (drafts)
      "privacyLevel": "SELF_ONLY",     // required for DIRECT_POST
      "disableComment": false,
      "disableDuet": false,
      "disableStitch": false,
      "aiGenerated": false
    }
  }
}

Specifičnosti LinkedIna

  • Objave idu na lični profil prijavljenog člana. Za Company Pages treba LinkedIn Community Management API, koji ima posebnu proveru i još nije podržan.
  • Jedna objava nosi do 9 slika ili 1 video, nikad oba. Sve preko ograničenja se odbija, a ne skraćuje bez upozorenja.
  • Opis može da ima najviše 3.000 znakova. Video do 200MB, slike do 10MB svaka.
  • articleUrl važi samo za tekstualne objave. Mediji imaju prednost i link se tada ignoriše.
  • Pristup ističe posle 60 dana i LinkedIn ne izdaje refresh token, pa nalog mora ručno ponovo da se poveže. Kad pristup istekne, objavljivanje vraća jasnu grešku za ponovno povezivanje.
  • LinkedIn dozvoljava 150 API zahteva po članu dnevno, a svaka slika troši još dva poziva, pa se ograničenje odnosi na zahteve, a ne na broj objava.

Zakazivanje objave

bash
curl -X POST "https://chat33.io/api/v1/posts" \
  -H "x-api-key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "accountIds": ["ig_channel_id", "fb_channel_id"],
    "text": "Coming soon!",
    "mediaUrls": ["https://your-blob-url.com/video.mp4"],
    "mediaType": "video",
    "scheduledAt": "2026-04-15T14:00:00Z",
    "callbackUrl": "https://your-server.com/webhook"
  }'

Otpremanje medija

Multipart otpremanje ima čvrsto ograničenje od 4,5MB. Veća tela se odbijaju sa 413 FUNCTION_PAYLOAD_TOO_LARGE pre nego što stignu do API-ja. Za sve veće preuzmi fajl sa javnog URL-a, ili uzmi presigned URL i otpremi direktno u skladište.

bash
# Small files (< 4.5MB): multipart upload
curl -X POST "https://chat33.io/api/v1/media/upload" \
  -H "x-api-key: sk_live_your_key" \
  -F "file=@photo.jpg"

# Large files, already on a public URL: URL ingestion (up to 4GB)
curl -X POST "https://chat33.io/api/v1/media/upload" \
  -H "x-api-key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/large-video.mp4", "filename": "video.mp4"}'

# Large LOCAL file: presigned direct upload (up to 500MB per PUT)
# 1. ask for an upload URL
curl -X POST "https://chat33.io/api/v1/media/upload-url" \
  -H "x-api-key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"filename": "video.mp4", "contentType": "video/mp4", "size": 16352652}'
# -> {"uploadUrl": "https://...", "headers": {"content-type": "video/mp4"}, ...}

# 2. PUT the bytes straight to storage (never touches the API)
curl -X PUT "<uploadUrl>" \
  -H "Content-Type: video/mp4" \
  --data-binary @video.mp4
# -> {"url": "https://....public.blob.vercel-storage.com/...", ...}
#    pass that url in mediaUrls when creating the post

API referenca

MetodEndpointOpis
POST
/api/v1/postsPravi objave i stavlja ih u red
GET
/api/v1/postsLista objava (sa paginacijom i filterima)
GET
/api/v1/posts/:idDetalji objave
PATCH
/api/v1/posts/:idIzmena ili otkazivanje nacrta ili objave u redu
DELETE
/api/v1/posts/:idBrisanje nacrta ili otkazivanje objave
POST
/api/v1/posts/:id/duplicateKopiranje objave
POST
/api/v1/media/uploadOtpremanje medija (fajl manji od 4,5MB ili javni URL)
POST
/api/v1/media/upload-urlPresigned URL za direktno otpremanje velikog lokalnog fajla

Telo zahteva: pravljenje objave

PoljeTipObaveznoOpis
accountIdsstring[]DaID-jevi kanala na koje se objavljuje (najviše 10)
textstringNeOpis objave
mediaUrlsstring[]NeURL-ovi medijskih fajlova (otpremljenih preko /media/upload)
mediaTypestringNeimage, video, reel ili carousel
scheduledAtstringNeDatum i vreme u formatu ISO 8601 za zakazivanje
callbackUrlstringNeWebhook URL za obaveštenja o objavljivanju
platformConfigobjectNeOpcije po platformi (YouTube naslov, privatnost i slično)
coverImageUrlstringNeNaslovna slika ili sličica za video

Ograničenja: 50 objava u minutu po organizaciji. Dnevna ograničenja po kanalu: Instagram (25), Facebook (50), TikTok (20), YouTube (100), X (300).

Callback pozivi: Kad se objava objavi ili ne uspe, na tvoj callbackUrl stiže POST zahtev sa ID-jem objave, statusom i URL-om objave na mreži.

OpenAPI 3.1 specifikacija

Interaktivni pregled endpointa + mašinski čitljiv JSON za codegen, n8n, MCP.

AI dokumentacija · llms.txt

Markdown dokumentacija za Claude, ChatGPT, Cursor. Kopiraj i nalepi da AI pravi ispravne API pozive.

n8n čvor · community node

Zvanični n8n community čvor. Izlistaj naloge, pravi i zakazuj objave, otpremaj medije iz bilo kog n8n workflow-a. Instaliraj n8n-nodes-chat33 iz Settings → Community Nodes.

MCP server

Poveži Claude, Cursor ili bilo koji MCP klijent sa Chat33. Objavljuj, preuzimaj analitiku i pravi DM automatizacije običnim rečima.

Povezivanje naloga tvojih korisnika

Omogući svojim korisnicima da povežu Instagram, Facebook, TikTok, YouTube, X, LinkedIn, Bluesky ili Threads naloge preko Chat33, pa objavljuj za njih preko API-ja

Developer connect API izdaje jednokratni link koji u tvoje ime šalje korisnika na OAuth ekran za saglasnost same platforme, bez ikakvog dodira s njegovom lozinkom. Kad korisnik odobri, povezani nalog se ponaša kao svaki drugi u API-ju za objavljivanje iznad: objavljuješ na njega, čitaš analitiku gde je platforma daje i prekidaš vezu. Sve je vezano za krajnjeg korisnika ("profil") kome nalog pripada.

Kako radi

  1. Napravi profil za korisnika (POST /v1/profiles) ili koristi postojeći, po svom externalId.
  2. Zatraži link za povezivanje za taj profil i platformu (POST /v1/connect). Važi jednom, 15 minuta.
  3. Pošalji korisnika na vraćeni url. Korisnik odobrava na ekranu same platforme, gde je Chat33 naveden kao aplikacija koja traži pristup. To je očekivano i niko ne vidi lozinku.
  4. Korisnik se vraća na tvoj redirectUrl sa status, profileId i accountIds (ili status=error&code=… ako je otkazano ili je nešto pošlo naopako; otkazana saglasnost ne troši link).

Pravljenje profila

bash
curl -X POST "https://chat33.io/api/v1/profiles" \
  -H "x-api-key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Fitness",
    "externalId": "user_482"
  }'

Pravljenje linka za povezivanje

bash
curl -X POST "https://chat33.io/api/v1/connect" \
  -H "x-api-key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "profileId": "prof_abc123",
    "platform": "instagram",
    "redirectUrl": "https://yourapp.com/oauth/done",
    "skipIntro": false
  }'
# -> {"url": "https://chat33.io/connect/...", "expiresAt": "...", "platform": "instagram", "profileId": "prof_abc123"}
# send your user to that url
# skipIntro: true returns a url that goes straight to the platform's consent screen

Šta tvoj korisnik vidi

Stranicu na Chat33 sa nazivom tvoje aplikacije, a zatim ekran za prijavu i saglasnost same platforme, gde je Chat33 naveden kao aplikacija koja traži pristup, a ne tvoja aplikacija. Tako radi OAuth u pozadini i to je očekivano. Korisnik može da opozove pristup na samoj platformi bilo kad.

Da preskočiš uvodnu stranicu i pošalješ korisnika direktno na ekran za saglasnost platforme, prosledi "skipIntro": true pri pravljenju linka. Link je tada neposredan redirect: isti token, isti rok od 15 minuta, isti povratak na tvoj redirectUrl. Ako je preskočiš, na svom ekranu reci korisniku da će stranica za saglasnost navoditi Chat33, i radije ga šalji klikom na dugme nego linkom u imejlu. Imejl klijenti i aplikacije za razgovor unapred učitavaju linkove, a unapred učitan skipIntro link otvara dijalog platforme u skeneru (token se ne troši).

$1 po slotu za povezivanje na 30 dana. Slot se kupuje iz tvojih unapred plaćenih kredita u trenutku kad se nalog poveže (ili unapred preko Kupi slotove) i obnavlja se na svakih 30 dana dok je nalog povezan. Nema srazmernog obračuna ni povraćaja, ali slot oslobođen prekidom veze ostaje tvoj do isteka i koristi ga sledeći nalog koji povežeš. Ako stanje ne može da pokrije obnovu, nalog radi još 7 dana, a iznos se prikazuje kao dugovanje. Posle toga se pauzira dok ne dopuniš stanje. Pauzirani nalozi se ne naplaćuju.

Pravila

  • Jedan stvarni nalog postoji samo jednom u celom Chat33. Ne može da se poveže drugi put, ni od tebe ni od nekog drugog, ni preko API-ja ni preko Chat33 kontrolne table.
  • Nalozi povezani preko API-ja nikad se ne računaju u ograničenje kanala paketa tvoje organizacije.
  • Chat33 ne čuva i ne automatizuje dolazne poruke i komentare na ovim nalozima (v1 služi samo za objavljivanje).
  • Facebook povezuje svaku stranicu kojoj korisnik odobri pristup. Svaka stranica je poseban nalog i poseban slot.
  • Instagram se povezuje preko Instagram Login-a, za poslovne naloge ili naloge kreatora.
  • Objave na X-u preko povezanih naloga takođe troše tvoje stanje kredita, kao i objave sa naloga na tvojoj kontrolnoj tabli.

Pauzirani nalozi

Nalog čiji slot ostane neplaćen 7 dana se pauzira: objavljivanje vraća 402 account_paused sa pogođenim accountIds. Nastavlja automatski kad dopuniš stanje. POST /v1/posts, POST /v1/posts/validate i POST /v1/posts/:id/duplicate ovo proveravaju unapred, pre nego što išta stave u red.

json
// 402
{
  "error": "ACCOUNT_PAUSED",
  "code": "account_paused",
  "message": "These accounts are paused until outstanding connection charges are paid. Top up credits.",
  "accountIds": ["chan_abc123"]
}

API referenca

MetodEndpointOpis
GET
/api/v1/profilesLista tvojih krajnjih korisnika
POST
/api/v1/profilesPravi (ili nalazi, po externalId) krajnjeg korisnika
GET
/api/v1/profiles/:idProfil i njegovi nalozi
PATCH
/api/v1/profiles/:idIzmena imena ili externalId profila
DELETE
/api/v1/profiles/:idPrekida vezu sa nalozima i briše profil
POST
/api/v1/connectPravi jednokratni link za povezivanje za profil
GET
/api/v1/accounts?source=apiLista svih naloga koje su tvoji korisnici povezali, kroz sve profile
GET
/api/v1/accounts?profileId=Lista povezanih naloga profila
DELETE
/api/v1/accounts/:idPrekid veze sa nalogom
GET
/api/v1/posts?profileId=Lista objava profila
GET
/api/v1/analytics/posts?profileId=Zbirna analitika objava profila
GET
/api/v1/billing/connectionsStanje kredita, dugovanje i istorija slotova
POST
/api/v1/billing/slotsKupovina slotova za povezivanje unapred

Odgovaraš za sadržaj koji objavljuješ preko naloga svojih korisnika i za to da imaš njihovu saglasnost. Chat33 može da onemogući API ključeve koji ugrožavaju njegove aplikacije na platformama.

Uključi scope

Uzmi scope connect:write: napravi ključ u Podešavanja → API ključevi i označi Povezivanje naloga tvojih korisnika. Podrazumevano je isključen na svakom ključu.

MMP postbackovi za instalacije

Prati instalacije aplikacije iz AppsFlyera, Adjusta, Brancha, Tenjina ili Singulara

Postback URL

Podesi ovaj URL na svojoj MMP kontrolnoj tabli kao postback endpoint. Zameni YOUR_SECRET svojom MMP Webhook tajnom iz Podešavanja.

text
https://chat33.io/api/webhooks/mmp?secret=YOUR_SECRET

Podržani MMP-ovi

AppsFlyer

Čita event_type, app_id, appsflyer_id, af_sub1/af_sub2 za atribuciju

Adjust

Čita activity_kind (install, rejected_install, event), label i adid iz callback poziva, GET ili POST. Za prihod od kupovina dodaj placeholder revenue_float (ne revenue, koji je u centima) i currency

Branch

Čita webhook događaje (INSTALL, PURCHASE), ID-jeve uređaja u user_data i kreatora i objavu koje Chat33 dodaje u podatke linka

Tenjin

Čita campaign_id, site_id za atribuciju

Singular

Čita network, source za atribuciju

Podešavanje pametnog linka

Koristi korak Pošalji link za preuzimanje aplikacije u svojim automatizacijama. Šalje korisnike iPhone-a na App Store link, a korisnike Androida na Google Play link, i broji svaki dodir na tvojoj kontrolnoj tabli, po automatizaciji. Nalepi svoj MMP link za praćenje (OneLink, Adjust, Branch, Singular ili Tenjin) sa jednim nazivom kampanje po objavi i tvoj MMP prijavljuje instalacije po objavi. Za Chat33 influenserske kampanje, ID-jevi kontakta i influensera dodaju se u link automatski.

1

Dodaj korak za preuzimanje

U automatizaciji dodaj Pošalji link za preuzimanje aplikacije sa svojim MMP linkovima za praćenje

2

Podesi MMP

Podesi postback URL u AppsFlyeru, Adjustu, Branchu (webhook za događaj Install), Tenjinu ili Singularu

3

Prati instalacije

Dodiri po automatizaciji u Chat33, instalacije po kampanji u tvom MMP-u, ukupne instalacije na kontrolnoj tabli

Nemaš MMP? Koristi linkove kampanja prodavnica

Apple i Google besplatno broje instalacije po kampanji. Stavi naziv kampanje u svaki link prodavnice, jedan po objavi, i nalepi linkove u korak za preuzimanje. Instalacije se vide u App Store Connect (App Analytics, Sources, Campaigns) i Play Console (izveštaji o akviziciji po UTM kampanji), oko jedan dan kasnije i zbirno.

App Store: generiši ga u App Store Connect ili ga sastavi

text
https://apps.apple.com/app/apple-store/id<APP_ID>?pt=<PROVIDER_TOKEN>&ct=<campaign_name>&mt=8

Google Play: UTM parametri idu unutar referrer, URL-enkodirane

text
https://play.google.com/store/apps/details?id=<PACKAGE>&referrer=utm_source%3Dchat33%26utm_medium%3Ddm%26utm_campaign%3D<campaign_name>

Korak po korak: besplatno praćenje instalacija bez MMP-a.

Generator UTM linkova za kampanje

Generiši URL-ove za praćenje sa UTM parametrima za Google Analytics

Savet: Koristi UTM linkove u porukama Chat33 automatizacija. U kombinaciji sa pikselom za praćenje videćeš ceo put od DM-a do konverzije u Google Analytics.

Treba ti pomoć oko integracije?

Naš tim može da ti pomogne da podesiš praćenje i izvučeš maksimum iz Chat33 alata za programere.