API-et
Det finnes ikke noe privat endepunkt. Ikke engang for grensesnittet.
De fleste produkter har to API-er: det dokumenterte du blir tilbudt, og det interessante som deres egne skjermer bruker. Det andre er alltid bedre, og du kommer aldri nær det. Her finnes det ett, og grensesnittet er en klient av det som alt annet — noe som er en begrensning for oss, og grunnen til at alt du vil bygge er mulig.
Hva den regelen faktisk koster
Det betyr at en skjerm av og til må vente på at API-et blir riktig, i stedet for å gå utenom det for ett beleilig felt. Dagen en skjerm trenger noe det offentlige API-et ikke kan gi, er dagen API-et er feil, og løsningen er API-et.
Ubyttet er at tre svært ulike klienter nesten ikke koster ekstra. MCP-serveren er en klient. En dash-b-flise er en klient. Skriptet ditt er en klient. Ingen av dem er en annenklasses borger som jobber rundt et grensesnitt designet for noen andre, for det finnes ikke noe annet grensesnitt å være annenrangert under.
Dokumentert, og brukt
OpenAPI genereres på /docs, og hver rute har en test som er eksempelet i dokumentasjonen. Dokumentasjon som skrives separat fra koden driver ut av syne i løpet av en måned; dokumentasjon som feiler bygget når den er feil, gjør ikke det.
Innlogging
Castomo-kontoen din, over authorization code flow med PKCE — samme konto som du bruker til dash-b og resten av familien. En side uten egen server kjører den flyten helt fint; det er den flyten er designet for. For maskin-til-maskin-arbeid: en prosjektavgrenset API-nøkkel.
- 1Folk
/v1/contacts·/lists·/segments·/tags·/imports - 2Innhold
/v1/creatives, med validering, forhåndsvisning og rendring per mål - 3Automasjon
/v1/funnels·/funnels/:id/versions·/runs·/simulate - 4Kringkast
/v1/campaigns, med målgruppe, materialisering, planlegging og sending som distinkte trinn - 5Hendelser inn
/v1/events— hendelser fra din egen applikasjon, som utløsere - 6Levering
/sender-identities·/domains·/apps·/webhooks - 7Tall
/v1/reports/*, og/track/*på sporingsverten
OpenAPI på /docs/mcp på samme prosess
Konvensjoner
Samme form som alle andre castomo-tjenester
Noe som betyr mer enn det høres ut som. Hvis du allerede kaller én av disse, vet du allerede hvordan denne svarer, feiler og paginerer.
Ett feilkonvolutt
Hver feil har samme form, en stabil kode og en melding ment for et menneske. Ingen rute finner på sin egen måte å være misfornøyd på.
Cursor-paginering
Ikke offsetter. En liste som endrer seg mens du går gjennom den, hopper ikke stille over eller gjentar rader, noe offset-paginering gjør i det stille og konstant.
Idempotensnøkler
På alle ruter som endrer noe. Prøv en forespørsel du er usikker på om kom frem, og få det samme svaret i stedet for en ny kontakt, en ny kampanje eller en ny utsendelse.
Avgrenset til ett prosjekt
Et token adresserer én tenant og ett prosjekt, begge deler. Sikkerhet på radnivå håndheves i selve databasen, ikke ved å huske å legge til en klausul.
Webhooks ut
Signert, prøvd på nytt med backoff og levert minst én gang — så endepunktet ditt bør også være idempotent. Hendelsene bruker samme vokabular som rapportene.
Sletting og eksport
En kontakt kan eksporteres eller slettes via API-et, og en sletting når alle søstertjenestene som har en kopi, via familiens egen interne kanal.

Alt grensesnittet kan gjøre, kan en POST gjøre.
Hendelsene er det interessante
Alt annet på denne siden er rørlegging du ville forventet. POST /v1/events er ruten som endrer hva produktet handler om.
Applikasjonen din vet allerede ting ingen markedsføringsverktøy kan observere: hvem som fullførte onboarding, hvem som inviterte en kollega, hvem som traff en grense, hvem som eksporterte dataene sine en søndag ettermiddag. Post dem som hendelser med ditt eget token, og hver enkelt blir en utløser, en betingelse og et segment.
Resten følger av kontaktmodellen. Hendelser legges til, redigeres aldri; de er loggen hele produktet henger på. En trakt som utløses av en hendelse du har definert, er ikke en integrasjon — det er samme mekanisme som message_opened bruker, med et annet navn i.
- 1Du poster den
POST /v1/events— et navn, en kontakt, en payload, en idempotensnøkkel. - 2Den landerLagt til i kontaktens logg. Ingen andre trenger å vite at den finnes.
- 3En trakt starterEnhver trakt hvis inngang nevner den hendelsen, for enhver kontakt som kvalifiserer under inngangsspesifikasjonen.
- 4Andre trakter forgrener seg på den"Har denne hendelsen skjedd de siste 14 dagene" er et helt vanlig segmentpredikat.
- iOg den avslutter kjøringerEn målnode som nevner samme hendelse stopper en sekvens i det øyeblikket personen gjør tingen.
Ditt vokabularDitt token
Grenser du bør kjenne til før du bygger
ClickSomo lagrer tre identifikatorer om deg — en tenant, et prosjekt og en bruker, som ugjennomsiktige id-er — og ingenting annet. Ikke noe passord, ingen profil, ingen kort, ingen faktura. Planbegrensninger kommer som tall: hvor mange kontakter, hvor mange utsendelser, hvor mange genereringer. Betalingsvokabular krysser ikke den linjen i noen retning.
Kontaktene dine er dine. Du er dataansvarlig; vi er databehandler. Det finnes ingen rute der et annet produkt i familien kan lese eller skrive kontaktlisten din, og ingen inntakskanal for det.
Hvis du vurderer dette på alvor: les /docs før du leser mer av dette nettstedet. API-et er den ærlige beskrivelsen av hva produktet gjør, og alle påstandene på disse sidene kan spores til en rute eller en nodetype du finner der. Når skjemaet endres, endres disse sidene.