Basis
Alles staat onder https://instnt.studio/api/. Verzoeken en antwoorden zijn JSON in UTF-8, tenzij hieronder anders staat (CSV, PDF, JavaScript). De app zelf gebruikt dezelfde API; wat in de app kan, kan via de API, binnen de rechten van de gebruiker.
Elke route werkt ook met .php erachter (/api/events.php). Dat houdt adressen uit de oude PHP-API geldig; gebruik zelf de korte vorm.
Inloggen met een API-sleutel
Maak een sleutel onder Instellingen → API-sleutels en stuur hem mee als Authorization: Bearer studio_…. Studio toont de sleutel één keer en bewaart alleen een hash. Een sleutel heeft de rechten van wie hem maakte, plus een bereik: lezen (alleen GET), lezen en schrijven (ook POST) of MCP (alleen /api/mcp). Het aantal sleutels hangt af van het plan.
Een paar routes zijn voor mensen en werken nooit met een sleutel: tokens, tweestap, wachtwoord wijzigen, de workspace verwijderen, meekijken als klant, uitloggen en het beheer van instnt. Die geven 403 token_not_allowed. Schrijven met een leessleutel geeft 403 token_read_only. GET /api/me kijkt alleen naar de sessie en geeft met een sleutel user: null.
Workspace en rechten
Een gebruiker hoort bij precies één workspace, dus een sleutel werkt altijd in die workspace; er is geen header om te kiezen. Het team heeft drie rollen: eigenaar en lid mogen beheren, kijker alleen lezen. Een klant ziet alleen de projecten waar hij toegang toe heeft, per onderdeel (Overzicht, Website, Zoeken, Product, Advies, Ads) met een niveau. Vraagt een klant naar een project of onderdeel dat niet van hem is, dan geeft Studio 404 in plaats van 403: een klant hoeft niet te weten dat het bestaat.
Een eigenaar die meekijkt als klant kan niets wijzigen (403 viewing_as_readonly).
Lezen en schrijven
Per onderwerp is er meestal één adres: GET om te lezen, met parameters in de querystring (vaak project_id), en POST met een JSON-body om te schrijven. De body heeft een veld action dat zegt wat er moet gebeuren, bijvoorbeeld {"action": "status", "id": 12, "status": "done"}. Onbekende acties geven 422 unknown_action.
Werk dat lang duurt (crawl, rapport, adviezen verversen, cookiescan) gaat op de achtergrond: het antwoord is 202 met een task_id, en GET /api/task?id=… geeft queued, running, done of failed.
Lijsten hebben meestal een vaste bovengrens (bijvoorbeeld 500 adviezen of 300 pagina's). Pagina's bestaan alleen waar het hieronder staat, met page: contacten (50 per pagina), het logboek van automatiseringen (25) en de contacten in een funnel.
Antwoorden en fouten
Een geslaagd antwoord heeft "ok": true met de gegevens ernaast. Een fout heeft "ok": false, een vaste code in error, soms een leesbare uitleg in detail (Nederlands) en bij formulieren per veld een melding in fields.
Veelvoorkomende codes: 401 unauthorized (geen of ongeldige sleutel), 402 plan_limit of plan_feature (het plan staat het niet toe), 403 forbidden, 404 not_found, 410 (verlopen link of uitnodiging), 422 validation of unknown_action, 429 too_many_requests en 502 als een externe dienst (Google, GitHub) faalt.
Limieten
Per API-sleutel 120 verzoeken per minuut. Openbare adressen hebben hun eigen grenzen: inloggen 5 per minuut per e-mailadres en 20 per IP, deellinks en statuspagina's 30 per minuut per IP, server-naar-server-events 600 per minuut per IP, metingen van het sitescript 60 per minuut per bezoeker, inkomende webhooks van automatiseringen 30 per minuut per adres, sitegebeurtenissen 120 per minuut per adres.
Andere sleutels
Naast de persoonlijke API-sleutel zijn er sleutels voor één doel: een deploysleutel (POST /api/deploys en /api/components), een conversiesleutel per bron (POST /api/events), een terugschrijfsleutel voor de WordPress- of Drupal-module (/api/titles) en adressen met het geheim erin (inkomende webhooks, back-uppings, datafeeds). Die staan bij de routes zelf.
Deze referentie bestaat ook als OpenAPI 3.1: GET /api/openapi.json (Nederlands) of ?lang=en.
Voorbeeld: Home Assistant
GET /api/tech-overview geeft in één antwoord de stand van alle sites. Maak een sleutel met bereik lezen en zet in configuration.yaml:
rest:
- resource: https://instnt.studio/api/tech-overview
headers:
Authorization: !secret studio_token
scan_interval: 300
sensor:
- name: Studio sites offline
value_template: "{{ value_json.kpis.down }}"
- name: Studio certificaten binnen 14 dagen
value_template: "{{ value_json.kpis.certs_14d }}"
- name: Studio projecten met kritiek of hoog lek
value_template: "{{ value_json.kpis.vulns_critical_high }}"
- name: Studio bronnen met aandacht
value_template: "{{ value_json.kpis.sources_error }}"
- name: Studio app-downloads 7 dagen
value_template: "{{ value_json.kpis.app_downloads_7d }}"
In secrets.yaml: studio_token: "Bearer studio_…". Let op: certs_14d, vulns_critical_high en php_outdated tellen projecten, niet certificaten of lekken; vulns_open telt wel lekken.
Account en inloggen
Inloggen, uitnodigingen, wachtwoorden, tweestap en de eigen sleutels. Op een paar na zijn dit routes voor mensen.
Wie is er ingelogd
Met een sessie: de gebruiker, workspace, rol, functies, plan en wat op goedkeuring wacht. Zonder sessie: user: null en wat het inlogscherm nodig heeft. Kijkt niet naar API-sleutels.
- Toegang
- Geen inlog
Antwoord
user | ?object | id, email, name, is_admin, role, can_manage, is_client, two_factor |
workspaces | object[] | id, slug, name, role |
features | object | |
modules | object | Per module of hij aan staat voor de werkruimte (plan en instelling). |
plan | ?object | key, label, limits, usage, trial_ends_at, active, cancel_from, data_delete_on |
approvals_open | int | |
terms | ?object | alleen voor de eigenaar / owner only: version, required, deadline, blocking |
start_page | ?string | |
viewed_by | ?object | |
google_connect | bool | |
setup_required | bool | |
google_login | bool | |
signup_open | bool | |
brand | ?object | |
Inloggen met e-mail en wachtwoord
Zet het sessiecookie. Staat tweestap aan, dan komt er eerst een challenge terug voor /api/login/two-factor. De app voor iOS en macOS stuurt client: app mee en krijgt dan een token in het antwoord in plaats van een cookie; dat gaat mee als Authorization: Bearer studioapp_… en staat onder Account → Apparaten.
- Toegang
- Geen inlog
Body
email* | email | |
password* | string | |
client | app | Alleen de app. |
device_name | string | Naam onder Account → Apparaten; zonder naam "iPhone van <voornaam>". |
device_model | string | iPhone, iPad of Mac. |
Antwoord
two_factor | bool | |
challenge | string | |
token | string | Alleen met client: app, één keer te zien. |
device_name | string | |
POST/api/login/two-factorTweede stap: code uit de app of herstelcode
Na vijf foute codes vervalt de tussenstap. Begon de login in de app, dan komt er een token terug in plaats van een cookie.
- Toegang
- Geen inlog
Body
challenge | string | Uit het antwoord van /api/login; na Google staat hij in een cookie. |
code* | string | |
Antwoord
token | ?string | |
device_name | ?string | |
Inloggen met Google starten
Stuurt de browser door naar Google (OpenID Connect met PKCE). Alleen voor bestaande gebruikers. 404 als Google-inloggen niet is ingesteld. De app start met ?client=app&code_challenge=… (S256, minstens 43 tekens) en komt terug op instntstudio://login?code=…, ?challenge=… (tweestap) of ?error=….
- Toegang
- Geen inlog
- Status
- 302
App: code van na Google inwisselen
Eenmalig en twee minuten geldig; een verkeerde verifier verbruikt de code ook.
- Toegang
- Geen inlog
Body
code* | string | |
code_verifier* | string | Waarvan de app bij de start de S256-hash meegaf. |
Antwoord
token | string | |
device_name | string | |
GET/api/login/google/callbackTerugkeer van Google
Google stuurt de browser hierheen. Een kleine pagina zet de sessie en gaat terug naar de app.
- Toegang
- Geen inlog
Uitloggen
Beëindigt de sessie en wist het cookie.
- Toegang
- Alleen met een sessie in de app, niet met een API-sleutel
Eerste gebruiker aanmaken
Werkt alleen zolang er nog geen gebruikers zijn (installatie); daarna 403 already_installed.
- Toegang
- Geen inlog
Body
email* | email | |
name | string | |
password* | string | Minstens 10 tekens. |
Aanmelden als bureau (proefperiode)
Stuurt een bevestigingsmail. Geeft altijd sent: true, ook als het adres al bestaat. 404 zolang aanmelden dicht staat.
- Toegang
- Geen inlog
Body
email* | email | |
name* | string | |
agency* | string | |
password* | string | Minstens 10 tekens. |
partner | string | Partnercode. |
terms* | bool | Akkoord met voorwaarden en verwerkersovereenkomst; versie en tijd worden vastgelegd. |
Aanmelding bevestigen
Maakt gebruiker en workspace en start een sessie. 410 signup_expired na 24 uur, 409 exists als het adres al een account heeft.
- Toegang
- Geen inlog
Uitnodiging bekijken
- Toegang
- Geen inlog
Antwoord
email | email | |
workspace | string | |
project | ?string | |
existing_user | bool | |
Uitnodiging aannemen
Nieuwe gebruiker: naam en wachtwoord kiezen. Bestaande gebruiker: met het eigen wachtwoord bevestigen, of zonder als je al ingelogd bent als die gebruiker. Je kunt bij meerdere workspaces horen. Start een sessie in de workspace van de uitnodiging.
- Toegang
- Geen inlog
Body
token* | string | |
password* | string | |
name | string | |
Herstellink aanvragen
Antwoordt altijd hetzelfde, zodat niet te zien is welke adressen een account hebben. De link werkt 60 minuten.
- Toegang
- Geen inlog
Nieuw wachtwoord instellen
Beëindigt alle andere sessies en start een nieuwe.
- Toegang
- Geen inlog
Body
token* | string | |
password* | string | Minstens 10 tekens, hooguit 72 bytes, niet uit een bekend datalek. |
Wachtwoord wijzigen
Andere sessies vervallen; deze blijft geldig.
- Toegang
- Alleen met een sessie in de app, niet met een API-sleutel
- Wie
- De ingelogde gebruiker zelf.
Body
current* | string | |
password* | string | Minstens 10 tekens, hooguit 72 bytes, niet uit een bekend datalek. |
Tweestapsverificatie beheren
- Toegang
- Alleen met een sessie in de app, niet met een API-sleutel
- Wie
- De ingelogde gebruiker zelf.
Acties (action)
statusAntwoord: enabled, required, enforced, has_password, recovery_codes_left.
setupNieuw geheim; nog niet actief tot confirm. Antwoord: secret, uri.
confirmcode*Zet tweestap aan en beëindigt andere sessies. Antwoord: recovery_codes.
disablepassword, code*Kan niet als tweestap verplicht is.
password string · Verplicht als je een wachtwoord hebt.
recovery_codespassword, codeAntwoord: recovery_codes.
password string · Verplicht als je een wachtwoord hebt.code string · Verplicht zonder wachtwoord.
Eigen API-sleutels
- Toegang
- Alleen met een sessie in de app, niet met een API-sleutel
- Wie
- De ingelogde gebruiker zelf.
Antwoord
tokens | object[] | id, name, scope, last_used_at, created_at, archived_at, workspace_id, workspace |
API-sleutel maken of intrekken
- Toegang
- Alleen met een sessie in de app, niet met een API-sleutel
- Wie
- De ingelogde gebruiker zelf.
Toestellen voor pushmeldingen
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- De ingelogde gebruiker zelf.
Antwoord
devices | object[] | id, environment, created_at, last_sent_at |
Toestel aan- of afmelden voor push
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- De ingelogde gebruiker zelf.
Acties (action)
registertoken*, environmenttoken string · APNs-toesteltoken, hex.environment sandbox | production
removetoken*
Meekijken als klant
Zolang het meekijken loopt, kan er niets gewijzigd worden.
- Toegang
- Alleen met een sessie in de app, niet met een API-sleutel
- Wie
- Alleen de eigenaar van de workspace.
Acties (action)
startuser_id*user_id int · Een klant van de eigen workspace.
stop
Je eigen account
- Toegang
- Alleen met een sessie in de app, niet met een API-sleutel
- Wie
- De ingelogde gebruiker zelf.
Antwoord
profile | object | name, email, timezone, avatar, has_password, google, created_at |
pending_email | ?object | email, expires_at |
reauth | password | code | google | none | Hoe je je identiteit bevestigt bij een gevoelige actie. |
notify | object[] | key, label, on |
quiet_hours | ?object | Stille uren voor push: from en to, HH:MM in je eigen tijdzone. |
sessions | object[] | key, kind (browser|app), device, network, via, created_at, last_used_at, last_used_label, current |
workspaces | object[] | id, name, role, suspended_at |
delete_blockers | string[] | Workspaces waar je eigenaar van bent; zolang die er zijn, kan je account niet weg. |
timezones | string[] | |
Je account wijzigen
- Toegang
- Alleen met een sessie in de app, niet met een API-sleutel
- Wie
- De ingelogde gebruiker zelf.
Acties (action)
profilename*, timezonetimezone ?string · IANA-naam, bijv. Europe/Amsterdam. Geldt voor tijden in mails en lijsten.
avataravatar*Multipart-formulier. Antwoord: avatar.
avatar file · JPG, PNG, WebP of GIF tot 3 MB; wordt 160 × 160 WebP zonder metadata.
avatar_deleteemailemail*, password, codeStuurt een link naar het nieuwe adres; tot die is geopend blijft het oude gelden. Antwoord: mailed, pending_email.
password string · Je wachtwoord; zonder wachtwoord (alleen Google) een code uit de app, of eerst opnieuw inloggen met Google.
email_cancelnotifyprefs*Antwoord: prefs.
prefs object · Per soort aan of uit: alerts, anomalies, digest, automations. Facturen en beveiliging kun je niet uitzetten.
quiet_hoursfrom, toPushmeldingen komen dan zonder geluid binnen. Antwoord: quiet_hours.
from string · HH:MM; zonder from en to staan de stille uren uit.
session_revokekey*Bij een app ook de pushmeldingen naar dat toestel. Antwoord: sessions.
sessions_revoke_othersAntwoord: revoked, sessions.
reauthpassword, codeBevestigt je identiteit voor tien minuten.
password string · Je wachtwoord; zonder wachtwoord (alleen Google) een code uit de app, of eerst opnieuw inloggen met Google.
leaveworkspace_id*Niet als eigenaar: draag eerst het eigendom over.
delete_accountpassword, codeAnonimiseert je account en logt uit. Niet zolang je eigenaar bent van een workspace.
password string · Je wachtwoord; zonder wachtwoord (alleen Google) een code uit de app, of eerst opnieuw inloggen met Google.
Nieuw e-mailadres bevestigen
De link uit de mail naar het nieuwe adres (24 uur). Het oude adres krijgt een mail met een link om terug te draaien.
- Toegang
- Geen inlog; het geheim zit in het adres
E-mailwijziging terugdraaien
De link uit de mail naar het oude adres (24 uur). Zet het oude adres terug, beëindigt alle sessies en trekt API-sleutels in.
- Toegang
- Geen inlog; het geheim zit in het adres
Projecten en overzicht
Projecten, de overzichten over alle klanten heen, dashboards, doelen, de tijdlijn en uren.
Projecten met het aantal bronnen
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Antwoord
projects | object[] | id, name, color, website (het ingestelde adres, of afgeleid uit uptime of Search Console), website_set, position (eigen volgorde van de gebruiker, of null), brand_terms, template, conversion_value, property_count, app_source_count, search_console_count, access |
templates | object | |
Voorbeeld: Antwoord
{
"ok": true,
"projects": [
{
"id": 5,
"name": "Bakkerij Jansen",
"color": "#3552c9",
"brand_terms": "jansen",
"template": "lokaal",
"conversion_value": 45,
"property_count": 1,
"app_source_count": 0,
"search_console_count": 1,
"access": {
"overview": "manage",
"website": "manage",
"search": "manage",
"product": "manage",
"advice": "manage",
"ads": "manage"
}
}
],
"templates": {}
}
Projecten maken, wijzigen en indelen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Alles in één oogopslag (menubalk en widgets)
Klein genoeg om elke minuut op te vragen. live is null als Google niet bereikbaar is.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Antwoord
projects | object[] | id, name, monitored, down, uptime_30d, live, visitors_today, visitors_yesterday, leads_today, open_advice, open_questions |
totals | object | sites_total, sites_up, uptime_30d, visitors_today, visitors_yesterday, leads_today, open_advice, last_deploy, approvals |
live | ?object[] | project, live |
live_total | ?int | |
down | object[] | project, url, since |
open_questions | ?int | |
new_advice | int | |
proposals | object[] | |
studio | url | |
POST/api/extension/connectSleutel voor de browserextensie maken
Een sleutel met bereik extension: die mag alleen /api/extension/*. Studio geeft hem via de pagina aan de extensie; hij staat daarna bij API-sleutels en is daar in te trekken.
- Toegang
- Alleen met een sessie in de app, niet met een API-sleutel
- Wie
- De ingelogde gebruiker zelf.
Projecten met hun domeinen (extensie)
Registreerbare domeinen per project waarvan je de website mag zien. De extensie telt daar je eigen bezoeken niet mee, als je dat aanzet.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Antwoord
projects | object[] | id, name, domains |
studio | url | |
Het project bij een adres, met cijfers (extensie)
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Antwoord
project | ?object | id, name, link |
visitors_today | ?int | |
visitors_yesterday | ?int | |
uptime | object | monitored, down, uptime_30d |
security_score | ?object | score, previous |
open_advice | ?int | |
last_deploy | ?object | title, at |
refs_today | object[] | ref, visitors |
Wie een post volgt (extensie)
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Queryparameters
url* | url | Link naar een post op Reddit, Hacker News, Bluesky of Mastodon. |
Antwoord
platform | string | |
followed | object[] | id, project (id, name), ref, score, comments, last_checked_at, last_error |
projects | object[] | id, name; waar je hem kunt volgen |
Cijfers van een post die je bekijkt naar Studio (extensie)
Voor Reddit, dat servers weigert: de extensie leest score en reacties van de pagina die je zelf open hebt, na een klik.
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Wie de website van het project mag beheren.
Versies en lekken over alle projecten
PHP, webserver, database, besturingssysteem en CMS per project (21-10-2026), de beste bron eerst: de site zelf (plugin, module, pakket), dan de headers, dan Plesk. Met de status uit endoflife.date: ok, update (er is een nieuwere release in dezelfde lijn), eol (geen beveiligingsupdates meer) of onbekend. Met cve of product + below zie je welke projecten een lek raakt; certain is false als alleen 8.3 bekend is (Plesk).
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
cve | string | Een CVE, bijv. CVE-2026-1234: lekken die Studio al vond plus de geraakte versies uit de NVD. |
product | php | nginx | apache | litespeed | mysql | mariadb | postgresql | wordpress | drupal | |
below | string | |
from | string | |
Antwoord
projects | object[] | project_id, project, items (per product: label, version, source site|header|plesk, detail, state ok|update|eol|onbekend, cycle, latest, eol), vulnerabilities (serious, total) |
products | object | |
checked_at | ?string | |
lookup | object | cve, summary, severity, ranges, projects (project_id, project, product, version, certain, fixed_in, resolved), source nvd|studio|onbekend |
Versies nu controleren
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid.
Technisch overzicht over alle projecten
Per project een score met de punten die aandacht vragen: onbereikbaar, certificaat, domein, lekken, PHP, Web Vitals, headers, back-ups en JavaScript-fouten. Zie het voorbeeld met Home Assistant hierboven.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Antwoord
kpis | object | projects, attention, down, certs_14d, domains_30d, vulns_critical_high, vulns_open, php_outdated, vitals_poor, js_new_7d, sources_error, sources_waiting, app_downloads_total (?int, eerste downloads van alle gekoppelde apps sinds de lancering), app_downloads_7d (?int) |
sources | object[] | bronnen met status error, stale of unknown, met project_name (zie GET /api/inventory) |
projects | object[] | id, name, score, status, issues, sites, down, uptime_30d, ssl, domain, vulns, php, php_outdated, vitals, headers, js_errors_7d, js_new_7d, backup, last_deploy |
apps | object[] | project_id, project, connect, downloads_total, downloads_7d, downloads_30d, downloads_prev_30d, crashes_7d, rating, reviews, version |
Voorbeeld: Antwoord
{
"ok": true,
"kpis": {
"projects": 9,
"attention": 2,
"down": 0,
"certs_14d": 1,
"domains_30d": 0,
"vulns_critical_high": 1,
"vulns_open": 3,
"php_outdated": 0,
"vitals_poor": 0,
"js_new_7d": 4,
"sources_error": 1,
"sources_waiting": 2
},
"projects": []
}
Catalogus van bronnen: aanbevolen en wat nodig is
Voor de catalogus onder Bronnen. recommended: per soort de projecten waar Studio de dienst op de site zag (Wat draait er) zonder koppeling. capabilities: per soort de onderdelen met de rechten die minimaal nodig zijn. De stand per bron staat in GET /api/inventory.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Antwoord
recommended | object | soort → object[]: project_id, project, host, label |
capabilities | object | soort → object[]: key, label, needs, why, write |
Downloads van de app van een project
Uit de verkooprapporten van App Store Connect die Studio bewaart, aangevuld met App Analytics: eerste downloads per dag (365 dagen), per maand (24) en per jaar, het totaal sinds de lancering, landen en de vergelijking met vorig jaar. Voor een dag die App Analytics dekt telt die waarde, net als in App Store Connect; analytics_differs meldt dat het verkooprapport iets anders zegt (vaak een ontbrekend vendornummer). acquisition is het overzicht van App Store Connect per datum: vertoningen (inclusief productpagina's), productpaginaweergaven, eerste downloads, opnieuw gedownload, updates, conversie (downloads ÷ unieke vertoningen), herkomst, en sessies en crashes (alleen opt-in), voor de laatste dag, 7 en 30 dagen. Herdownloads en updates staan apart. null is onbekend, geen nul. Vraagt het onderdeel Product.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Antwoord
apps | object[] | account_id, app_id, name, history_running, analytics_differs, acquisition (last_day, periods (dag, 7d, 30d: impressions, impressions_unique, page_views, page_views_unique, first_downloads, redownloads, updates, sessions, crashes, installs, deletions, conversion, sources, territories, crashes_by_version, from, to), days, covered) of null, total (downloads, redownloads, updates, complete), d7, d30, prev30, days (day, value), months (month, value, running), years (year, value, running), countries, countries_30d, compare (label, previous_label, value, previous), history (pending, fetched) |
Voorbeeld: Antwoord
{
"ok": true,
"apps": [
{
"app_id": "6818309309",
"name": "Kenteken Spel",
"total": {
"downloads": 412,
"redownloads": 37,
"updates": 220,
"complete": true
},
"d7": 58,
"d30": 190,
"prev30": 164
}
]
}
GET/api/app-downloads/totalDownloads van alle apps samen
Het hoogste niveau: alle apps van alle Apple-accounts van de werkruimte, ook apps die niet aan een project hangen.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
include_archived | bool | Ook gearchiveerde apps meetellen; standaard volgens de instelling van de werkruimte. |
Antwoord
apps | int | |
total | ?int | |
d7 | ?int | |
d30 | ?int | |
prev30 | ?int | |
archived_excluded | int | |
include_archived | bool | |
Overzicht van één project: wat aandacht vraagt en de kengetallen van zijn soort
Hooguit zes kengetallen, gekozen op het soort project (webshop, SaaS, lokaal, B2B, content); met een app worden de laatste twee downloads en beoordeling. Een kengetal zonder bron heeft missing: true en connect met wat je moet koppelen. Wat de kijker per onderdeel niet mag zien, valt weg; omzet en ROAS alleen voor het team of een klant die het overzicht mag goedkeuren. Downloads zijn een aantal en volgen het onderdeel Product. Zonder gekozen soort staat er een voorstel in suggested; Studio slaat dat nooit zelf op.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Queryparameters
project_id* | int | |
days | 7 | 28 | 90 | Standaard 28. |
Antwoord
type | ?string | |
suggested | ?object | type, reason |
has_app | bool | |
days | int | |
types | object | |
can_manage | bool | |
attention | object | items (key, tone, text, tab), actions (id, title), checked_at |
kpis | object[] | key, label, value, previous, unit (count|pct|eur|ratio|stars|text), series, tone, hint, invert, of missing en connect (label, kind, tab of href) |
trend | object | visitors, leads, clicks — elk null of een reeks (day, value) met elke dag van de periode |
funnel | ?object[] | label, value — bezoeken, formulier begonnen en verstuurd, leads; alleen stappen met gegevens |
Voorbeeld: Antwoord
{
"ok": true,
"type": "saas",
"suggested": null,
"has_app": true,
"days": 28,
"attention": {
"items": [
{
"key": "ssl",
"tone": "warn",
"text": "Certificaat van voorbeeld.nl verloopt over 12 dagen",
"tab": "uptime"
}
],
"actions": [
{
"id": 41,
"title": "Titels herschrijven voor zoektermen op plek 4 tot 10"
}
],
"checked_at": "2026-10-06 10:41:00"
},
"kpis": [
{
"key": "status",
"label": "Bereikbaar (30 d)",
"value": 99.98,
"unit": "pct",
"hint": "nu bereikbaar"
},
{
"key": "signups",
"label": "Aanmeldingen",
"value": 42,
"previous": 35,
"unit": "count",
"series": [
1,
3,
2
]
},
{
"key": "downloads",
"label": "Downloads",
"missing": true,
"connect": {
"label": "Koppel App Store Connect",
"kind": "appstore_connect"
}
}
]
}
Werkbord: adviezen over alle klanten en de werklast
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
assignee | string | me of een gebruikers-id. |
Antwoord
columns | object | open, planned, done |
workload | object[] | project_id, name, open, planned, overdue, done_30 |
team | object[] | |
me | int | |
today | date | |
health | object[] | |
Projectlijst: één rij per project
De startpagina van het team: per project status (ok, warn, bad) met de punten die aandacht vragen, uptime, tags, klanten, bezoek en het resultaat dat bij het soort project hoort, de app en het laatste rapport. Dezelfde cijfers als Techniek en het projectoverzicht.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
days | 7 | 28 | 90 | Standaard 28. |
Antwoord
projects | object[] | id, name, color, template, suggested, tags, clients (id, name), status, issues, uptime_30d, down, headline (visitors, result: key, label, value, previous, unit), app (downloads_30d, downloads_prev_30d, downloads_total, rating, reviews), report (period, status), open_advice |
kpis | object | projects, attention, visitors, downloads_7d, open_advice |
unassigned_sources | int | |
templates | object | |
days | int | |
Verloop over alle projecten
Bezoek, conversies (GA4 key events plus leads uit het sitescript) en omzet (betaald min terugbetaald, plus winkelomzet) per dag over alle projecten samen, met het totaal, de periode ervoor en de verdeling per project. Een metriek zonder enige bron is null.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
days | 7 | 28 | 90 | Standaard 28. |
Antwoord
days | int | |
metrics | object | visitors, conversions, revenue — elk null of { unit, total, previous, series (day, value), by_project (id, name, color, value) } |
Benchmarks: een project naast vergelijkbare projecten
Mediaan, 25e en 75e percentiel en het aantal projecten per kengetal, plus de waarde en positie van dit project (better_than van others). Elke nacht berekend. Cijfers alleen bij minstens 5 projecten in de groep (enough); gedeeld over werkruimtes heen bovendien uit minstens 3 werkruimtes, en alleen als je werkruimte zelf deelt. Nooit namen of waarden van andere projecten. Zonder project_id: per kengetal over alle projecten van de werkruimte, met de projecten in het zwakste kwart (alleen het team). Een klant krijgt hidden: true tenzij het team benchmarks voor klanten aanzet; eigen tags en gedeelde cijfers ziet een klant nooit.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Overzicht.
Queryparameters
project_id | int | |
period | 28 | 90 | Standaard 28. |
scope | werkruimte | gedeeld | Standaard werkruimte. |
group | string | Sleutel uit groups, bijv. soort:webshop of tech:drupal. Zonder: de meest specifieke groep met de meeste bruikbare kengetallen. |
Antwoord
period | int | |
scope | string | |
group | string | |
groups | object[] | key, label, usable |
metrics | object[] | metric, label, unit, higher_is_better, note, value, n, min, enough, median, p25, p75, position (better_than, others, percentile); zonder project_id: behind (project_id, name, value) in plaats van value en position |
settings | object | Alleen zonder project_id: share, show_clients. |
computed_at | ?string | |
hidden | bool | |
Benchmarks instellen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
settingsshare, show_clientsAntwoord: settings.
share bool · Anoniem meedoen met de vergelijking over werkruimtes heen. Standaard uit.show_clients bool · Klanten zien de positie van hun eigen project. Standaard uit.
Maandrapporten over alle projecten
Per project de stand van het rapport van één maand: ontbreekt, concept (fouten bij het ophalen), klaar, verstuurd of geopend (door een klant, in Studio of via een deellink; alleen een teller, niet wie).
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
period | string | Een afgesloten maand als 2026-09; standaard de vorige maand. |
Antwoord
period | string | |
label | string | |
periods | object[] | period, label |
rows | object[] | project_id, project, color, clients, tags, report_id, status, errors, generated_at, published_at, views, first_viewed_at |
counts | object | ontbreekt, concept, klaar, verstuurd, geopend |
can_manage | bool | |
Concepten maken en klaarstaande rapporten versturen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
generate_missingperiodEen concept voor elk project zonder rapport, op de achtergrond (202). Antwoord: queued, tasks.
publish_readyperiod, idsAlleen status klaar; een concept met fouten blijft staan. Klanten krijgen de rapportmail via de standaardautomatisering. Antwoord: published, notified.
ids int[] · Alleen deze rapporten; standaard alle met status klaar.
Vandaag: wat er over alle projecten aandacht vraagt
Storingen, kritieke en hoge lekken (per pakket en versie over alle projecten samen), certificaten en domeinen die binnen 14 dagen verlopen, bronnen die niet werken, nieuwe fouten na een deploy, een daling in de App Store-beoordeling, acties die op jou wachten en rapporten van vorige maand die als concept klaarstaan. Elk punt heeft een to naar de plek waar je het oplost.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Antwoord
items | object[] | key, group (storing|lek|verloop|bron|fout|beoordeling|actie|rapport), tone (bad|warn|info), title, detail, projects (id, name), to, fix (?object: steps[], links[] (label, url), copy[] (label, value); "Zo los je het op") |
groups | object | |
counts | object | bad, total |
Voorbeeld: Antwoord
{
"ok": true,
"items": [
{
"key": "lek-0",
"group": "lek",
"tone": "bad",
"title": "Drupal core 10.2.3, 3 projecten",
"detail": "2 lekken, ernst kritiek · opgelost in 10.2.4",
"projects": [
{
"id": 3,
"name": "Alpha"
}
],
"to": "/techniek"
}
],
"counts": {
"bad": 1,
"total": 1
}
}
Tags van de projecten
Platform (Web, iOS) en techniek (Drupal 11, Laravel 13, PHP 8.4) herkent Studio zelf, uit koppelingen, lockbestanden, de Drupal-module of WordPress-plugin, de sitecontrole en Plesk; origin en origin_at zeggen waar en wanneer. Eigen tags maakt het team.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
project_id | int | Alleen dit project. |
hidden | bool | Ook uitgezette automatische tags. |
Antwoord
tags | object[] | id, project_id, kind (platform|tech|own), slug, key, label, color, auto, hidden, origin, origin_at |
Tags toevoegen, uitzetten en opnieuw herkennen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Je bewaarde weergaven van de projectlijst
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Antwoord
views | object[] | id, name, filters (client, type, tags, attention) |
Weergaven bewaren en verwijderen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Acties (action)
savename*, filters, view_idAntwoord: view_id.
filters object · client (?int), type (?string), tags (string[], als kind:slug, bijv. tech:drupal), attention (bool).view_id int · Met id: bijwerken.
deleteview_id*
Je persoonlijke voorkeuren
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Antwoord
start_page | ?string | je eigen keuze, null is de standaard |
start_page_default | string | |
options | object | |
Startpagina kiezen, Wat is er nieuw gelezen, taal van de app
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Iedereen voor
locale; de rest alleen het team.
Acties (action)
start_pagestart_pageNull zet de standaard terug: Vandaag voor wie alleen werkt, Projecten voor een team. Antwoord: start_page.
start_page ?overzicht | vandaag | projecten | techniek
changelog_seenversion*Gaat nooit terug in de tijd; /api/me geeft changelog_seen mee. Antwoord: changelog_seen.
version string · Datum van de bovenste versie, jjjj-mm-dd.
localelocale*Taal van de app voor deze gebruiker; /api/me geeft hem mee als user.locale. Standaard nl. Antwoord: locale.
project_orderids*Per gebruiker; ook voor klanten. Projecten die je niet mag zien worden overgeslagen. GET /api/projects en /api/portfolio sorteren erop. Antwoord: ids.
ids int[] · Project-id's in de gewenste volgorde.
Startpagina voor klanten
Per project het resultaat van deze maand tegenover dezelfde dagen vorige maand, doelen, wat gedaan is en wat er komt.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Antwoord
month | string | |
days_so_far | int | |
projects | object[] | id, name, numbers, series (day, value: bezoeken per dag deze maand), goals, done, next, report, weekly_update |
Weekupdate aan of uit
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Klanten met toegang tot het project.
Acties (action)
weeklyproject_id*, on*Antwoord: weekly_update.
Meldingencentrum: wat er is gebeurd
De bel in de app, per gebruiker en werkruimte, van de laatste 30 dagen: storingen en herstel, afwijkingen, nieuw gevonden bronnen, goedkeuringen, vragen van klanten, afgewezen app-versies, bevestigde adviezen en nieuwe formulierinzendingen. Een klant ziet alleen storingen van zijn eigen projecten, antwoorden op zijn vragen en inzendingen als hij Website mag bekijken. Storingen en afwijkingen volgen de meldingsvoorkeuren van het account.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Queryparameters
count | bool | Alleen het aantal ongelezen. |
Antwoord
items | object[] | key, kind (storing|afwijking|nieuw|goedkeuring|vraag|antwoord|app|bevestigd|inzending), tone (bad|warn|info|ok), title, detail, at (?datetime), to, project (?object: id, name), read |
unread | int | |
kinds | object | |
Meldingen als gelezen markeren
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Checklist bij de start van een werkruimte
De stappen waarmee een werkruimte gaat werken, berekend uit de stand van nu: Google, eerste project, soort, bereikbaarheid, script, Search Console, klant, en voor de eigenaar tweestap en factuurgegevens.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Eigenaar en teamleden; voor anderen is checklist null.
Antwoord
checklist | ?object | steps (object[]: key, done, title, why, to, action), done (int), total (int), complete (bool), hidden (bool) |
Checklist verbergen of terughalen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar en teamleden.
Zoeken over projecten, adviezen, zoektermen en pagina's
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Queryparameters
q* | string | Minstens twee tekens. |
Antwoord
results | object[] | kind, title, subtitle, project_id, tab, filter |
Stand van een achtergrondtaak
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Antwoord
status | queued | running | done | failed | |
result | ?object | |
error | ?string | |
Alle bronnen met hun status
GA4, Search Console, eigen systemen, aanvullende diensten en uptime-controles, met per bron of hij werkt.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
project_id | int | Alleen de bronnen van dit project; dan zonder projects. |
Antwoord
items | object[] | key, type, subtype, id, name, detail, project_id, status (ok|error|stale|unknown|off|setup|tracking), status_text, action, fix (?object: steps[], links[] (label, url), copy[] (label, value); "Zo los je het op"), last_ok_at, last_error_at, fetching, can_fetch, can_assign, missing (object[]: id, label, since, since_text; cijfers die de bron eerder meestuurde en al een tijd niet meer) |
projects | object[] | id, name, color, sources, problems, unchecked, clients, open_advice, monitors_down, latest_report |
counts | object | error, waiting, ok |
Een bron nu ophalen, of een ontbrekend cijfer niet meer verwachten
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
fetchtype*, id*Eén API-verzoek (de meeste koppelingen, eigen systemen) meteen; GA4, Search Console, betalingen, Ads en App Store Connect via de wachtrij, met fetching: true tot hij klaar is. Hooguit eens per minuut per bron (429). Antwoord: item.
type ga | search | app | integration
ignore_metricid*Het cijfer is bewust weg: geen signaal meer. Komt het later terug, dan telt het gewoon weer mee. Antwoord: ignored.
id int · Het id uit missing.
Nieuw gevonden bronnen
Wat Studio via een koppeling ziet maar nergens aan hangt (Analytics-properties, Search Console-sites, apps, bedrijfsprofielen en voor beheerders Plesk-domeinen), plus wat genegeerd of gearchiveerd is. Studio beslist zelf niets. Soorten op "verbergen" staan alleen in hidden.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Antwoord
new | object[] | key, type (ga|search|apple|gbp|plesk), ref, name, detail, project_id, project_name, state, decided_at, data_deleted, suggestion {name, template} |
ignored | object[] | |
archived | object[] | |
linked | object[] | |
archived_projects | object[] | id, name, archived_at |
hidden | int | |
notify | int | |
settings | object | modes {ga, search, apple, gbp, plesk: melden|stil|verbergen}, include_archived |
can_manage | bool | |
projects | object[] | id, name |
templates | object[] | key, label |
Koppelen, negeren, archiveren of terughalen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Wat Studio met een koppeling kan
Per onderdeel wat minimaal nodig is, wat de sleutel volgens de laatste meting mag (ja, nee, onbekend) en of het aan staat. Uit betekent dat Studio het helemaal niet ophaalt. minimal zegt welke rechten genoeg zijn voor wat aan staat; warnings noemt sleutels met meer rechten dan nodig.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
subject_type* | string | apple, google, integration, slack of chat. |
subject_id* | int | Id van het Apple-account, de Google-koppeling, de projectkoppeling, de workspace (slack) of het kanaal. |
Antwoord
type | string | |
name | string | |
items | object[] | cap, label, needs, why, write, enabled, have (ja|nee|onbekend), detail, state (aan|uit|niet mogelijk|niet gemeten) |
measured_at | ?string | |
warnings | string[] | |
fix | ?object | Waar je de rechten verlaagt: steps, links (label, url), copy (label, value). |
keys | object[] | key_id, role, role_label, account_key, allowed (alleen Apple) |
minimal | ?string | |
can_manage | bool | |
Onderdeel aan- of uitzetten, of opnieuw meten
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Alle dashboards van de werkruimte
Dashboards over meerdere projecten (zonder project_id) eerst, daarna die per project.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Antwoord
dashboards | object[] | id, name, goal, project_id, project_name, tiles (aantal), scope |
can_edit | bool | |
limit | ?int | |
workspace_count | int | |
Dashboard van een project, of over projecten heen
Met project_id een projectdashboard. Alleen dashboard_id zonder project_id geeft een dashboard over projecten heen (alleen het team): tiles over de projecten in scope, plus losse projecttegels; catalog en project_catalog zijn de keuzes.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Overzicht.
Queryparameters
project_id | int | Leeg voor een dashboard over projecten heen. |
dashboard_id | int | Standaard het eerste. |
Antwoord
dashboards | object[] | id, name, goal |
current | object | id, name, goal |
tiles | object[] | |
chosen | string[] | |
catalog | object | |
goals | object | |
can_edit | bool | |
limit | ?int | |
Dashboards maken, wijzigen en verwijderen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Maanddoelen, prognose en benchmark
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Overzicht.
Queryparameters
project_id* | int | Project-id. |
Antwoord
goals | object[] | metric, label, target, value, projected, status |
metrics | object | |
can_manage | bool | |
suggested | ?object | |
forecast | ?object | |
languages | ?object | |
benchmark | ?object | |
signals | ?object | |
Maanddoel zetten of weghalen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid (beheer van Overzicht); anderen krijgen 404.
Acties (action)
setproject_id*, metric*, target*Antwoord: goals.
metric sessions | key_events | new_users | clickstarget int · Minstens 1.
deleteproject_id*, metric*Antwoord: goals.
metric sessions | key_events | new_users | clicks
Tijdlijn van een project
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Overzicht.
Queryparameters
project_id* | int | Project-id. |
days | int | 1 tot 800; standaard 28. |
Antwoord
annotations | object[] | id, kind, title, detail, url, happened_at |
can_manage | bool | |
Gebeurtenis op de tijdlijn of deploysleutel
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
createproject_id, date, kind, title*, detail, urlproject_id ?int · Null: voor alle projecten.kind notitie | google | meting | deploy
deleteid*deploy_tokenproject_idAntwoord: token, url.
Inrichtingschecklist van een project
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
project_id* | int | Project-id. |
Antwoord
sections | object[] | |
can_manage | bool | |
Checklistpunt afvinken of opnieuw controleren
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Urenbudget per klant
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
month | month | Standaard deze maand. |
Antwoord
month | month | |
projects | object[] | project_id, name, budget, spent, pace |
entries | object[] | id, project_id, project, day, minutes, note, user, advice |
can_manage | bool | |
Uren boeken en budgetten zetten
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Acties (action)
budgetproject_id*, hoursAlleen de eigenaar van de workspace.
hours ?number · Per maand; leeg is geen afspraak.
logproject_id*, day, minutes*, note, recommendation_idStatus 201. Antwoord: id.
day date · Niet in de toekomst.minutes int · 1 tot 1440.
deleteid*Je eigen uren, of als eigenaar die van anderen.
Wat Studio weet over één pagina
Voor de browserextensie: zoekt het project op domein en geeft crawl, zoektermen, adviezen en snelheid voor dat pad, per onderdeel waar je toegang toe hebt.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Antwoord
project | ?object | id, name |
path | string | |
crawl | ?object | |
queries | object[] | |
advice | object[] | |
speed | ?object | |
link | url | |
Domeinen van een project
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Eigenaar of lid (beheer van Website); anderen krijgen 404.
Queryparameters
project_id* | int | Project-id. |
Antwoord
domains | object[] | id, domain, record, verified, via (dns|plugin), plugin, primary, source (auto|manual), verified_at, checked_at |
Domein verifiëren, toevoegen, weghalen of hoofddomein maken
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid (beheer van Website); anderen krijgen 404.
Acties (action)
checkproject_id*, domain*Antwoord: verified, domains.
addproject_id*, domain*Antwoord: verified, domains.
domain string · Een domein of adres; Studio bewaart het domein zelf (zonder www).
removeproject_id*, domain*Het domein komt niet terug, ook niet via een oude Search Console-property. De sitecontrole op dat domein gaat mee. Antwoord: left, domains.
primaryproject_id*, domain*, moveAntwoord: website, domains.
move bool · Standaard true: uptimecontroles verhuizen mee en het oude hoofddomein gaat weg.
Mailfunnels uit andere systemen
Wat een site zelf verstuurt (veld mail_funnels in het metrics-contract), straks ook Mailchimp en Brevo. Alleen aantallen. Zonder project_id alle projecten (alleen het team).
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Het team; met
project_id ook klanten met Mailfunnels.
Queryparameters
project_id | int | |
days | 7 | 30 | 90 | |
Antwoord
days | int | |
funnels | object[] | id, key, project_id, project, origin (site|mailchimp|brevo), name, status (actief|aan|uit|weg), trigger, audience, goal, url (alleen team), seen_at, sent, clicked, converted, unsubscribed, delivered, bounced, complained, revenue, click_rate, conversion_rate, unsubscribe_rate, series (date, sent, clicked, converted, unsubscribed), steps (id, name, subject + dezelfde tellers) |
Gevolgde posts op social media
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Wie de website van het project mag zien.
Queryparameters
project_id* | int | Project-id. |
Antwoord
posts | object[] | id, platform (reddit|hackernews|bluesky|mastodon), url, title, community, author, ref, posted_at, score, comments, ratio, last_checked_at, last_error, series (at, score, comments), visitors, signups, days (day, visitors, signups) |
can_manage | bool | |
Een post volgen, bijwerken of niet meer volgen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Wie de website van het project mag beheren.
Acties (action)
addproject_id*, url*, refAntwoord: id, error.
url url · Link naar een post op Reddit, Hacker News, Bluesky of Mastodon.
updateid*, refrefreshid*deleteid*
Sitegebeurtenissen van een project
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
project_id* | int | Project-id. |
status | ok | opnieuw | dubbel | mislukt | geweigerd | ongeldig | |
entry | int | Eén regel uit het logboek, met runs_detail (automatisering, voorwaarden, acties). |
Antwoord
log | object[] | id, event, event_id, data, private_keys (alleen namen), status, reason, http_status, runs, duration_ms, received_at; de laatste 100 |
hook | ?object | received, last_at, created_at |
events | object[] | event, total, refs (ref, n), days (day, n); 30 dagen |
automations | object[] | id, name, enabled, event |
retrying | int | |
can_manage | bool | |
Adres voor sitegebeurtenissen maken of weghalen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Wat je bij een project nog kunt instellen
Uit de basis, wat Studio op de site ziet maar niet gekoppeld is, en wat minstens de helft van de projecten van dezelfde soort heeft.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
project_id* | int | Project-id. |
all | bool | Ook de weggeklikte. |
Antwoord
tips | object[] | key, source (basis|gezien|soortgelijk), title, why, action {label, to}, peers (?object: count, total, template), dismissed |
Tip wegklikken of terugzetten
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Bronnen en koppelingen
Google-koppelingen, Search Console, eigen systemen (instnt-metrics), aanvullende diensten en inkomende formulieren. Geheimen gaan nooit terug naar de browser; een ingevuld geheim staat als <veld>_configured: true.
Google-koppelingen met hun GA4-properties
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Antwoord
connections | object[] | id, kind, google_email, status, own_key, usable, created_at, properties |
Service-account koppelen, vervangen of weghalen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
createkey*Antwoord: connection_id, google_email, property_count.
key json · De service-account-JSON, als object of tekst. Wordt meteen bij Google getest.
replace_keyconnection_id*, key*Behoudt de koppeling en alle indelingen; de oude sleutel blijft actief als de nieuwe niet werkt. Antwoord: google_email, property_count.
toggleproperty_id*, enabled*refreshLeegt de caches van de workspace, bijvoorbeeld na nieuwe leestoegang in Analytics.
deleteconnection_id*
GET/api/connections/googleKoppelen met Google starten (OAuth)
Stuurt de browser naar Google voor leestoegang tot Analytics, Search Console en het Bedrijfsprofiel. Bedoeld voor de browser.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
- Status
- 302
GET/api/connections/google/callbackTerugkeer van Google na koppelen
- Toegang
- Geen inlog
GET/api/connections/oauth/{provider}Koppelen met Teamleader of Microsoft Advertising starten (OAuth)
provider is teamleader of microsoft_ads. Stuurt de browser naar de dienst; bij terugkeer bewaart instnt studio het refresh-token versleuteld bij de koppeling. Zonder app op de server (client-ID en geheim in .env) gaat de browser terug met oauth=niet-ingericht.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
- Status
- 302
Queryparameters
integration_id* | int | Een koppeling van de soort teamleader of microsoft_ads, eerst aangemaakt met POST /api/integrations. |
GET/api/connections/oauth/{provider}/callbackTerugkeer van Teamleader of Microsoft na koppelen
- Toegang
- Geen inlog
Search Console-properties
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Antwoord
sites | object[] | id, project_id, connection_id, site_url, display_name, status |
Search Console-properties toevoegen en indelen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
availableconnection_id*Antwoord: sites.
createproject_id*, connection_id*, site_url*Antwoord: site_id.
updatesite_id*, display_nameassignsite_id*, project_iddeletesite_id*
Eigen systemen (instnt-metrics)
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Antwoord
sources | object[] | id, project_id, name, url, status |
Eigen systeem koppelen of wijzigen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Aanvullende diensten van een project
oauth staat er alleen bij teamleader en microsoft_ads: connected (er is een token) en available (de server kan koppelen).
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Queryparameters
project_id* | int | Project-id. |
Antwoord
integrations | object[] | id, project_id, kind, name, status, config, oauth |
Dienst koppelen, testen of wijzigen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
createproject_id*, kind*, config*, nameAntwoord: integration_id.
kind string · Bijvoorbeeld clarity, sentry, umami, posthog, mollie, stripe, github, bing, dataforseo, shopify, woocommerce, appstore_connect. De volledige lijst staat in de bronnenmarkt.config object · Voor appstore_connect: account_id en app_id (zie /api/appstore-accounts). Een config met issuer_id, key_id en private_key wordt een Apple-account.
updateintegration_id*, config*config object · Een leeg geheim veld houdt het bestaande geheim.
testintegration_id*Haalt meteen één keer op. Antwoord: testable, passed, metrics, items, error.
appstore_analyticsintegration_id*, key_id*, private_key*Alleen voor een App Store Connect-koppeling: vraagt App Analytics eenmalig aan bij Apple. De Admin-sleutel wordt alleen voor deze aanvraag gebruikt en niet bewaard. Antwoord: analytics.
key_id string · Sleutel-ID van een App Store Connect-sleutel met de rol Admin.private_key string · Inhoud van het .p8-bestand van die sleutel.
deleteintegration_id*
GET/api/appstore-accountsApple-accounts voor App Store Connect
Per account de apps van het team en aan welk project elke app hangt. De .p8-sleutel komt nooit terug.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Antwoord
accounts | object[] | id, name, issuer_id, key_id, vendor_number, key_configured, status, status_message, checked_at, history (running, pending), keys (id, role, role_label, key_id, status, status_message, denied), webhook (url, secret; alleen voor beheerders), apps (id, name, bundle_id, sku, downloads_total, downloads_complete, downloads_30d, project_id, project_name, integration_id, analytics) |
projects | object[] | id, name |
POST/api/appstore-accountsApple-account toevoegen, apps koppelen of App Analytics aanzetten
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
createissuer_id*, key_id*, private_key*, vendor_number, nameTest de sleutel eerst bij Apple door de apps op te halen; een sleutel die Apple weigert wordt niet opgeslagen. Dezelfde issuer en sleutel-ID werken het bestaande account bij. Status 201. Antwoord: account_id, apps.
private_key string · Inhoud van het .p8-bestand (rol Sales and Reports).vendor_number string · Eén of meer vendornummers, gescheiden door een komma.
updateaccount_id*, name, issuer_id, key_id, vendor_number, private_keyissuer_id string · Een gewijzigde ID wordt eerst bij Apple getest.key_id string · Een gewijzigde ID wordt eerst bij Apple getest.vendor_number string · Eén of meer, gescheiden door een komma. Een ander nummer haalt de geschiedenis opnieuw op.private_key string · Leeg houdt de bestaande sleutel.
refreshaccount_id*Haalt de apps opnieuw op bij Apple. Antwoord: apps.
linkaccount_id*, app_id*, project_idEen app hangt aan hooguit één project, en een project heeft één App Store Connect-bron: een nieuwe koppeling vervangt de oude. Antwoord: integration_id.
project_id ?int · Leeg of null ontkoppelt de app.
historyaccount_id*Haalt de ontbrekende verkooprapporten op: jaren (tien jaar terug), maanden en dagen (één jaar). Gebeurt ook vanzelf na het toevoegen en twee keer per dag; een afgesloten periode vraagt Studio nooit opnieuw op. Antwoord: started, pending.
analyticsaccount_id*, key_id*, private_key*, app_idsVraagt App Analytics aan per app. De Admin-sleutel wordt alleen voor deze aanvragen gebruikt en niet bewaard. Antwoord: enabled, failed.
key_id string · Sleutel-ID van een sleutel met de rol Admin.app_ids string[] · Leeg is alle apps van het account.
deleteaccount_id*409 in_use zolang er apps aan projecten hangen.
key_addaccount_id*, role*, key_id*, private_key*Extra sleutel met een eigen rol, van hetzelfde team (zelfde issuer-ID). Wordt eerst bij Apple getest. Studio kiest per onderdeel de sleutel met de minste rechten die het mag, en onthoudt een weigering (403) een week. Developer opent builddetails, feedback uit TestFlight, diagnoses, Xcode Cloud, Game Center en aankopen; Customer Support antwoorden op reviews en naam en ondertitel van de winkelpagina. Status 201.
role sales | developer | customer_support | marketing | app_manager | admin
key_deleteaccount_id*, key_id*key_id int · Het id uit keys, niet de sleutel-ID van Apple.
webhookaccount_id*Nieuw adres en geheim voor meldingen van App Store Connect (Gebruikers en toegang → Integraties → Webhooks). Een oud adres werkt daarna niet meer. Antwoord: webhook.
GET/api/google-play-accountsGoogle Play-accounts
Per account de apps die het service-account ziet, met installaties en aan welk project elke app hangt. De sleutel komt nooit terug, alleen het e-mailadres van het service-account.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Antwoord
accounts | object[] | id, name, client_email, bucket, status, status_message, checked_at, apps (package_name, title, installs_total, installs_30d, project_id, project_name, state) |
projects | object[] | id, name |
can_manage | bool | |
POST/api/google-play-accountsGoogle Play-account toevoegen of apps koppelen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
createkey*, bucket, nameTest de sleutel eerst bij Google door de apps op te halen; een sleutel die niets mag, wordt niet opgeslagen. Hetzelfde service-account werkt het bestaande account bij. Status 201. Antwoord: account_id, apps.
key string · De JSON-sleutel van een service-account uit Google Cloud, uitgenodigd in Play Console.bucket string · Cloud Storage-URI van de rapporten (gs://pubsite_prod_…). Zonder bucket geen installaties.
updateaccount_id*, name, bucket, keykey string · Alleen een nieuwe sleutel van hetzelfde service-account.
refreshaccount_id*Apps en installatierapporten opnieuw ophalen; hooguit eens per minuut. Antwoord: apps, files.
linkaccount_id*, package_name*, project_idEen app hangt aan hooguit één project; daarna volgt meteen een eerste ronde (installaties, vitals, reviews, versies). Antwoord: linked, integration_id.
project_id ?int · Leeg of null ontkoppelt de app.
deleteaccount_id*Haalt ook de koppelingen van de apps bij projecten weg. De opgehaalde installaties gaan mee.
Google Play: installaties, vitals en versies van een app
Per Google Play-app van het project: installaties door gebruikers per dag (365 dagen) en maand uit de maandrapporten in Cloud Storage, actieve toestellen, beoordeling, Android vitals (door gebruikers gemerkte crashes en ANR, gemiddeld over 28 dagen, met de grens van Google) en de versies per track. Een onderdeel dat uit staat bij het account geeft null. null in een dag is onbekend, geen nul. Reviews staan onder /api/reputation. Vraagt het onderdeel Product.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Antwoord
apps | object[] | account_id, package_name, name, store_url, bucket, installs (total (downloads, complete), d7, d30, prev30, uninstalls_30d, active_devices, active_on, rating, days (day, value), months (month, value, running), first_month) of null, vitals (user_crash_rate, user_anr_rate, crash_rate, anr_rate, crash_limit, anr_limit, crash_bad, anr_bad, until, days (day, crash, anr)) of null, tracks (track, label, releases (name, status, version_codes, user_fraction, notes)) of null, tracks_at, fetched_at |
App Store voor makers: versies, TestFlight, reviews, prestaties, abonnementen en winkelpagina
Per app van het project wat App Store Connect weet, opgehaald elk half uur (versies, builds, testgroepen, feedback, reviews) en één keer per dag (de rest). sections geeft per onderdeel de stand: ok, leeg, fout, of sleutel met in message welke rol er nodig is. Abonnementen alleen voor het team of een klant die het overzicht mag goedkeuren. Vraagt het onderdeel Product.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Iedereen in de workspace; een klant ziet alleen zijn eigen projecten.
Antwoord
apps | object[] | account_id, app_id, name, roles, sections, versions, testflight (builds, groups, feedback), reviews (items, count, average, per_rating, open, territories), performance (versions, metrics, insights, diagnostics), subscriptions (events_30d, active, trials, proceeds_30d, days, catalog) of null, store (current, changes), ci, game_center |
can_reply | bool | |
team | bool | |
Reviews beantwoorden, crash als prompt, nu ophalen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
replyproject_id*, review_id*, body*Plaatst of vervangt het antwoord bij Apple. Vraagt een sleutel met de rol Customer Support of App Manager. Antwoord: response.
review_id int · Het id uit reviews.items.body string · Hooguit 5970 tekens.
delete_replyproject_id*, review_id*suggest_replyproject_id*, review_id*Claude schrijft een voorstel in de merkstem; het staat daarna als suggestion bij de review. Nooit automatisch geplaatst. Antwoord: task_id.
promptproject_id*, feedback_id*Prompt voor een Claude Code-sessie in de repo van de app, met de crashlog. Antwoord: prompt.
syncproject_id*Hooguit eens per minuut (429). Status 202. Antwoord: started.
Modules en hun stand
Catalogus van modules met per module of hij in het plan zit, aan staat voor de werkruimte en (met project_id) voor het project, en of de bron die nodig is gekoppeld is. status: aan, uit, plan, project_uit of nodig.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; een klant alleen met project_id, en dan alleen aan of uit per module.
Antwoord
modules | object[] | key, label, uitleg, icon, min_plan, needs_label, scope, plan_allows, workspace_on, project_on, needs_met, projects_ready, status |
can_manage | bool | |
Module aan- of uitzetten
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Bestellingen
Losse bestellingen uit Shopify, WooCommerce en eigen systemen, zonder gegevens van de klant, met een link naar de order in de winkel. Alleen als de module Bestellingen aan staat; alleen voor het team of een klant die het overzicht mag goedkeuren. Met scope=today per project de bestellingen van vandaag.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Overzicht.
Queryparameters
project_id | int | |
scope | today | |
days | int | |
status | open | betaald | verzonden | afgerond | geannuleerd | terugbetaald | mislukt | |
q | string | |
Antwoord
orders | object[] | id, source, number, ordered_at, status, total_cents, currency, items (name, qty), admin_url |
counts | object | |
sold | int | |
total_cents | int | |
module | ?object | |
synced_at | ?datetime | |
projects | object[] | Alleen bij scope=today: project_id, name, count, total_cents, currency, latest. |
Bestellingen nu ophalen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Module Landingspagina's
Aangewezen landingspagina's met bezoek (GA4, anders het sitescript), conversie, advertentiekosten van gekoppelde Ads-campagnes, formulieren, scrolldiepte (Clarity), Search Console en snelheid, plus A/B-vergelijkingen met de kans dat B beter converteert (Beta-Binomiaal, vanaf 100 bezoeken per variant). Alleen als de module aan staat. Advertentiekosten alleen voor het team of een klant die het overzicht mag goedkeuren. Met page_id één pagina met kanalen, zoektermen en verloop.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Queryparameters
project_id* | int | Project-id. |
days | int | Periode in dagen, 7–365; standaard 28. |
page_id | int | |
Antwoord
pages | object[] | id, url, path, name, status, utm_campaign, ads_campaign_ids, thumbnail, visits, visits_source, conversions, conversion_source, conversion_rate, ads, cost_per_conversion_cents, funnel, forms, scroll_depth, search, speed |
tests | object[] | id, name, page_a_id, page_b_id, started_on, ended_on, prob_b_better, min_sessions, verdict |
suggestions | object[] | path, sessions, key_events |
campaigns | object[] | id, name, channel |
module | object | |
can_manage | bool | |
money | bool | |
base_url | ?url | |
page | object | Alleen met page_id: de pagina met channels, queries en series. |
Landingspagina's aanwijzen en vergelijken
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid (beheer van Website); anderen krijgen 404.
Formulierinzendingen
Welk formulier wanneer is verstuurd, op welke pagina, met een link naar de inzending in het CMS of de formuliertool. Nooit wat er is ingevuld. Alleen als de module Inzendingen aan staat. admin_url alleen voor het team of een klant met Website op goedkeuren; anders null. new: na de laatst bekeken inzending van deze gebruiker en van de laatste 30 dagen. Met scope=new de nieuwe inzendingen per project.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Queryparameters
project_id | int | |
scope | new | |
days | int | Periode in dagen, 1–396; standaard 30. |
form | string | |
Antwoord
submissions | object[] | id, source, source_label, form, page, submitted_at, new, admin_url |
forms | object[] | form, count, latest_at |
total | int | |
unread | int | |
can_open | bool | |
module | object | |
projects | object[] | Alleen bij scope=new: project_id, name, count, last_id, latest_at. |
Inzendingen als gezien markeren
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Reputatie: reviews van alle bronnen
Reviews van het Google Bedrijfsprofiel, Trustpilot, Kiyoh en de App Store samen. summary.average en count komen van de platforms zelf waar die bekend zijn (Kiyoh omgerekend van 10 naar 5), de rest uit de bewaarde reviews (de laatste 50 tot 100 per bron). trend per maand over twaalf maanden. Voorstellen van Claude (suggestion) alleen voor het team. Zonder project_id: per project dat je onder Vindbaarheid mag zien.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Zoeken.
Queryparameters
project_id | int | |
source | gbp | trustpilot | kiyoh | appstore | google_play | |
rating | int | Alleen dit aantal sterren, 1–5. |
open | bool | Alleen zonder antwoord. |
Antwoord
summary | object | average, count, new_this_month, answered_pct, open_low, stored |
sources | object[] | source, label, average, count, stored, platform, can_reply |
trend | object[] | month, count, average |
items | object[] | id, source, source_label, rating, score, title, body, author, language, country, url, reviewed_at, reply, can_reply, suggestion |
can_reply | bool | |
team | bool | |
projects | object[] | Alleen zonder project_id: project_id, project, sources, average, count, new_this_month, answered_pct, open_low. |
Reviews beantwoorden
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
replyproject_id*, review_id*, body*Alleen Google en de App Store; Trustpilot en Kiyoh geven 422. Google vraagt "Koppel met Google" met het onderdeel Reviews beantwoorden aan. Antwoord: reply.
review_id int · Het id uit items.body string · Google hooguit 4096 tekens, de App Store 5970.
delete_replyproject_id*, review_id*suggest_replyproject_id*, review_id*Claude schrijft een voorstel in de merkstem; het staat daarna als suggestion bij de review. Nooit automatisch geplaatst. Antwoord: task_id.
Campagnes: UTM, advertenties en mailings bij elkaar
Module Campagnes (vanaf Copiloot). Een campagne telt op wat bij haar regels past: GA4 per UTM-campagne, bron en medium, aanmeldingen en betalingen uit het eigen systeem met dezelfde UTM, Google Ads-, Meta- en LinkedIn-campagnes en mailings uit Mailchimp en Brevo. Regels van dezelfde soort: één moet kloppen; verschillende UTM-soorten: allemaal. previous is een even lange periode direct ervoor. Gebruikers zijn per dag opgeteld. Kosten, omzet, budget, CPC, CPA en ROAS alleen voor het team of een klant die het overzicht mag goedkeuren. Zonder project_id: alle projecten met de module die je mag zien. Met campaign_id ook series, channels, sources, pages, ads en mailings.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Queryparameters
project_id | int | |
campaign_id | int | |
Antwoord
campaigns | object[] | id, project_id, name, starts_on, ends_on, budget, goal, rules, period, current, previous, derived, mail |
suggestions | object[] | UTM-campagnes zonder campagne (90 dagen): value, sessions, sources. Alleen met beheerrecht. |
ignored | string[] | |
linkables | object[] | Wat je als regel kunt koppelen: kind, value, label. |
module | object | |
money | bool | |
can_manage | bool | |
base_url | ?string | |
campaign | object | Met campaign_id. |
projects | object[] | Zonder project_id: project_id, name, campaigns. |
Campagnes beheren
Versturen kan hier niet: dat doe je in Brevo of Mailchimp; instnt studio leest de resultaten.
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid (beheer van Website); anderen krijgen 404.
Klantreis: fasen, kanalen en paden als totalen
Module Klantreis (vanaf Inzicht). Elke nacht opgeteld uit GA4, het sitescript, leads, aanmeldingen uit het eigen systeem en bestellingen; geen reis per persoon. stages: bezoek, betrokken, lead en klant met de bronnen die meetellen (per projecttype, of zoals ingesteld), de vorige even lange periode en from_previous (verhouding van totalen, geen gevolgde groep). channels: kanaal × fase; een fase zonder kanaalinformatie staat in missing. paths: stappen van pagina naar pagina, pagina's met een lead en landingspagina's met belangrijke acties, alleen met minstens k keer; hidden telt wat daaronder bleef. ttc: dagen van aanmelding tot abonnement, alleen met minstens k abonnementen. Zonder module: journey is null.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Queryparameters
project_id* | int | Project-id. |
period | int | 28 of 90; standaard 28. |
Antwoord
module | object | |
can_manage | bool | |
journey | ?object | type, type_label, period, range, stages, trend, channels, paths, ttc, sources, custom, stage_labels, computed_at, k |
Klantreis instellen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid (beheer van Website); anderen krijgen 404.
AI-verkeer en klikken tegenover sessies, per dag
Uit de feitentabellen, elke nacht bijgewerkt. view=ai: sessies uit AI-assistenten (ChatGPT, Perplexity, Gemini, Copilot, Claude …) uit GA4, of zonder GA4 bezoekers uit het sitescript (unit); previous is de even lange periode ervoor. view=search: Search Console-klikken tegenover organische GA4-sessies per dag. Search Console loopt een paar dagen achter; die dagen hebben clicks: null. totals telt alleen dagen waarop beide er zijn.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
view=ai: Bezoek (website) bekijken; view=search: Vindbaarheid (search) bekijken. Anderen krijgen 404.
Queryparameters
project_id* | int | Project-id. |
view | ai | search | |
days | int | 7, 28 of 90; standaard 28. |
Antwoord
days | int | |
source | ?string | Alleen bij ai: ga4, script of null. |
unit | string | |
current | int | |
previous | int | |
series | object[] | day, value (ai) of day, clicks, sessions (search) |
sources | object[] | key, value, previous |
has_search | bool | |
has_ga | bool | |
search_until | ?date | |
ga_until | ?date | Laatste dag met GA4-cijfers; daarna sessions: null. |
totals | object | clicks, sessions, ratio |
404-monitor
Pagina's die niet bestaan maar bezoek of links krijgen, elke ochtend samengevoegd uit GA4 (titel of pad van de foutpagina), het sitescript, de crawler en URL-inspectie van Search Console. De API van Search Console heeft geen lijst met 404's; alleen per inspectie. Een pagina die zeven dagen niet meer is gezien, staat op opgelost; krijgt hij weer bezoek, dan is hij weer nieuw.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Zoeken.
Queryparameters
project_id* | int | Project-id. |
status | nieuw | opgelost | genegeerd | |
Antwoord
status | string | |
counts | object | nieuw, opgelost, genegeerd |
pages | object[] | id, path, status, hits, sources, referrers, first_seen, last_seen, resolved_at |
settings | object | titles, paths, min_hits |
can_manage | bool | |
404-monitor bijwerken
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid (beheer van Zoeken); anderen krijgen 404.
Acties (action)
ignoreproject_id*, id*Antwoord: id, status.
reopenproject_id*, id*Antwoord: id, status.
resolveproject_id*, id*Antwoord: id, status.
settingsproject_id*, titles, paths, min_hitsAntwoord: settings.
titles string[] · Woorden in de titel van de foutpagina, hooguit 10.paths string[] · Paden die altijd als foutpagina tellen, zoals /404.min_hits int · Vanaf zoveel weergaven in 28 dagen telt een nieuwe 404 als melding.
GET/api/conversion-sourcesBronnen voor conversie-events
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
project_id* | int | Project-id. |
Antwoord
sources | object[] | id, app_source_id, name, retention_days |
POST/api/conversion-sourcesConversiesleutel maken
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Inkomende formulieren en afspraken
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Queryparameters
project_id* | int | Project-id. |
Antwoord
hooks | object[] | id, provider, label, signed, received, last_at, url |
providers | object | |
Inkomend adres maken of weghalen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
createproject_id*, provider*, secretStatus 201.
provider typeform | calendly | gravityforms | overig | github | belmetingsecret string · Om de handtekening te controleren; verplicht voor GitHub.
deleteid*
Microsoft Clarity: samenvatting van drie dagen
Drie uur gecachet, want Clarity staat tien verzoeken per dag toe. 422 setup_required zonder token, 502 clarity_unavailable als Clarity faalt.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Antwoord
summary | object | sessions, users, rage_clicks |
days | int | |
Clarity: frictie per pagina over 28 dagen
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Queryparameters
project_id* | int | Project-id. |
Antwoord
pages | object[] | url, sessions, dead, rage, quickback, error_clicks, script_errors, scroll, active_seconds, friction |
days | int | |
Staat de datafeed aan
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Queryparameters
project_id* | int | Project-id. |
Antwoord
active | bool | |
created_at | ?datetime | |
last_used_at | ?datetime | |
Datafeed (CSV) maken of intrekken
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Advies, vragen en AI
Adviezen met hun status, playbooks, tests, vragen van klanten en AI-taken.
Adviezen van een project
Met scope=workspace (alleen team) de tien belangrijkste acties over alle projecten. Elk advies heeft why: de delen van de rangorde (klikken, betrouwbaarheid, moeite, wat het team leerde).
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Advies.
Queryparameters
project_id* | int | Project-id. |
status | open | planned | done | bevestiging | dismissed | expired | all | actief | archief | Standaard open. bevestiging: gedaan, maar nog niet bevestigd door de bron. actief: open en in behandeling. archief: gedaan, afgewezen en verlopen, nieuwste eerst. |
group | page | Met status=actief: ook pages, de adviezen per pagina. |
scope | workspace | |
Antwoord
items | object[] | Hooguit 500, belangrijkste eerst, met impact_euros en confirmation (state confirmed of waiting, by, at, waits_on, overdue, note). |
euro_basis | ?object | |
counts | object | |
tip | ?object | |
last_refresh | ?datetime | |
thresholds | object | |
learned | object[] | |
effect_days | int | |
can_manage | bool | |
has_github | bool | |
progress | object[] | Per categorie: category, done, total (zonder verlopen). |
effect | ?object | Alleen bij archief: done, measured, clicks, impressions (na min vóór, over de gemeten adviezen). |
pages | ?object[] | Alleen bij status=actief&group=page: url, path, ids, count, impact_clicks, categories. |
Status, toewijzen, GitHub-issue, opnieuw controleren, prompt maken
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
statusid*, status*, note, task_urlBij done legt Studio de stand van nu vast om het effect na 14 dagen te meten, en zet het op de tijdlijn. Het advies wacht daarna op bevestiging door de bron (Google, live controle, lockbestand, meting). Antwoord: item.
status open | planned | done | dismissed
assignid*, assignee_id, due_dateToewijzen plant een open advies. Antwoord: item.
issueid*Maakt een issue in de GitHub-repo van het project (502 github als GitHub weigert). Antwoord: url.
recheckid*Status 202. Antwoord: task_id.
refreshproject_id*Draait alle regels opnieuw. Status 202. Antwoord: task_id.
promptproject_id*, ids*, mode, markAlleen het eigen team. Maakt van adviezen die in code of configuratie op te lossen zijn één opdracht, met bewijs, wanneer het klaar is en hoe je het controleert. URL's zonder querystring; geen persoonsgegevens of sleutels. Antwoord: prompt, filename, items.
ids int[] · Hooguit 30; alleen adviezen met fixable: true tellen mee.mode claude | algemeenmark bool · Standaard true: zet de punten op planned met een notitie.
Voorbeeld: Verzoek
{
"action": "status",
"id": 812,
"status": "done",
"note": "Titel aangepast"
}
Playbooks van een project
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Advies.
Queryparameters
project_id* | int | Project-id. |
Antwoord
runs | object[] | |
available | object | |
can_manage | bool | |
Playbook starten en afvinken
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid (beheer van Advies); anderen krijgen 404.
Testlog en hypothesekaarten
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Advies.
Queryparameters
project_id* | int | Project-id. |
Antwoord
experiments | object[] | |
cards | object[] | |
can_manage | bool | |
Test vastleggen of verwijderen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid (beheer van Advies); anderen krijgen 404.
Acties (action)
saveproject_id*, id, title*, hypothesis, metric, page_url, starts_on, ends_on, outcome, resultAntwoord: id.
id int · Zonder id: nieuw.outcome won | lost | neutral
deleteproject_id*, id*
Vragen bij een rapport, advies of project
Geeft disabled: true als vragen uitstaan voor de workspace.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team en klanten met toegang tot het onderwerp;
open=1 alleen het team.
Queryparameters
project_id | int | |
subject_type | report | advice | project | |
subject_id | int | |
open | bool | Alle open vragen over alle klanten. |
Antwoord
questions | object[] | id, label, project_id, project_name, subject_type, subject_id, subject_title, anchor, status (open|wacht_ons|wacht_klant|opgelost|gesloten), link, created_by, updated_at, messages (body, from_team, internal, name, at) |
disabled | bool | |
Vraag stellen, antwoorden of sluiten
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Team en klanten met toegang tot het onderwerp.
Support: tickets
Klantvragen aan het bureau (deel=klant, module Support, vanaf Copiloot) en vragen aan instnt (deel=instnt). Een vraag bij een rapport of advies is ook een ticket. Zonder id een lijst met tellers per status; met id één ticket met het gesprek, bijlagen en voor de behandelaar de projectcontext, interne notities, het team en vaste antwoorden. Een ticket van een andere werkruimte geeft 404.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Klant: eigen tickets (met de module Support). Team: alle klanttickets; kijkers alleen lezen.
deel=instnt: eigenaar of lid. admin=1: alleen platformbeheerders.
Queryparameters
deel | klant | instnt | |
admin | bool | |
id | int | |
sets | bool | Alleen de sets vaste antwoorden om in te laden (team, 13-10-2026). |
lang | nl | en | |
status | actief | te_laat | open | wacht_ons | wacht_klant | opgelost | gesloten | Standaard actief: alles behalve opgelost en gesloten. Leeg voor alles. |
q | string | Zoekt in onderwerp, nummer en berichten. |
project_id | int | |
mine | bool | Alleen aan mij toegewezen. |
Antwoord
tickets | object[] | id, label, number, scope, title, subject_type, anchor, project, requester, status, priority, channel, assigned, due_at, overdue, messages, last_from_team, created_at, updated_at, workspace |
counts | object | |
overdue | int | |
module | object | |
statuses | object | |
priorities | object | |
can_create | bool | |
sets | object[] | Met sets=1: key, label, description, count, titles. |
template_sets | object[] | Voor het team: dezelfde sets. |
settings | object | Alleen voor het team: sla, sla_default, inbound_available, inbound_on, address, can_manage. |
ticket | object | Met id: het ticket plus thread, link, role, can, en voor de behandelaar context, team, templates en projects. |
Support: vragen stellen en behandelen
Bijlagen als multipart files[]: hooguit 5 per bericht en 10 MB per bestand; afbeeldingen (geen SVG), pdf, tekst, csv en Office-bestanden. Het soort volgt uit de inhoud, niet uit de naam.
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Per actie: een klant maakt en beantwoordt zijn eigen tickets; eigenaar en lid behandelen en stellen in; met
admin: true behandelen platformbeheerders vragen aan instnt.
Acties (action)
createdeel*, title*, body*, project_id, priority, filesStatus 201. Antwoord: ticket.
deel klant | instnttitle string · Hooguit 160 tekens.body string · Hooguit 10.000 tekens.project_id int · Klant met meer dan één project: verplicht.priority laag | normaal | hoog | urgent · Alleen bij deel=instnt.
replyid*, template_id, body*, files, adminOp een gesloten ticket alleen de behandelaar. Antwoord: ticket.
template_id int · Het vaste antwoord waar dit uit kwam; heeft het acties (macro, 13-10-2026), dan voert Studio die na versturen uit.
noteid*, body*, files, adminInterne notitie: de aanvrager ziet hem nooit, ook de bijlagen niet. Antwoord: ticket.
statusid*, status*, adminDe aanvrager kan alleen sluiten. Antwoord: ticket.
status open | wacht_ons | wacht_klant | opgelost | gesloten
assignid*, user_id, adminAntwoord: ticket.
priorityid*, priority*, adminRekent een lopende deadline opnieuw uit. Antwoord: ticket.
priority laag | normaal | hoog | urgent
projectid*, project_id, adminAntwoord: ticket.
settingssla, inbound_onAntwoord: settings.
sla object · Uren per prioriteit (laag, normaal, hoog, urgent), elk 1–720.
rotate_addressNieuw adres voor mail naar support; het oude werkt meteen niet meer. Antwoord: settings.
template_saveid, project_id, category, actions, title*, shortcut, body*, buttons, adminDezelfde vaste antwoorden gelden in Support en in de chat. Antwoord: templates.
project_id ?int · Alleen voor dit project (13-10-2026); leeg is voor alle projecten. Hooguit 50 per project en 50 algemeen.category string · Categorie, hooguit 40 tekens (13-10-2026).actions object · Macro (13-10-2026): status (wacht|afgesloten), tags (hooguit vijf), assign_me; na versturen in de chat.shortcut string · Sneltoets voor de chat, zonder schuine streep: kleine letters, cijfers en streepjes, hooguit 30.buttons string[] · Knoppen in de chat, hooguit vier (22-10-2026).
template_deleteid*, adminAntwoord: templates.
template_importset, project_id, sets, only, langEen set vaste antwoorden inladen (13-10-2026). Voegt toe en overschrijft niets: dezelfde naam of sneltoets wordt overgeslagen, boven de 50 stopt het. Eigenaar of lid. Antwoord: templates, imported.
set basis | webshop | diensten | horeca | softwareproject_id int · In dit project in plaats van algemeen.sets string[] · Meerdere sets tegelijk (13-10-2026).only string[] · Alleen deze antwoorden, op naam.lang nl | en
GET/api/support/attachmentBijlage van een ticket
Altijd als download, met X-Content-Type-Options: nosniff.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Wie het ticket mag zien; een bijlage bij een interne notitie alleen de behandelaar.
Chat: gesprekken met bezoekers
De inbox van de chat op de site (module Chat, vanaf Copiloot). Zonder id een lijst met tellers; met id één gesprek met berichten, interne notities, bezoekerscontext (pagina, taal, toestel, eerdere gesprekken), het team en vaste antwoorden met ingevulde variabelen. Een gesprek openen markeert het als gelezen. Met since alleen berichten na dat id, voor polling. Wie de inbox opent, telt anderhalve minuut als online voor het widget. Een gesprek van een ander project of een andere werkruimte geeft 404.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team: gesprekken van projecten met de module Chat; kijkers alleen lezen. Klant: alleen bij een project waar hij Website op goedkeuren heeft.
settings: eigenaar of lid.
Queryparameters
view | open | wachtend | mijn | niet_toegewezen | buiten_tijden | afgesloten | alle | Standaard open: alles wat niet is afgesloten. wachtend: het team is aan zet. |
project_id | int | |
label | string | Alleen gesprekken met dit label. |
sort | wachtend | nieuwste | activiteit | Standaard wachtend: wie het langst op het team wacht bovenaan. |
q | string | Zoekt in naam, e-mail en berichten. |
id | int | |
since | int | |
teller | bool | Alleen de tellers, voor de navigatie en het app-icoon. |
settings | int | Project-id: de instellingen van de chat en de installatiecode. |
Antwoord
conversations | object[] | id, project, name, email, status, offline, assigned, last, unread, tags, page_url, visitor_online, rating, ticket_id, created_at, last_message_at, waiting_since |
counts | object | open, mijn, niet_toegewezen, wachtend, ongelezen; zonder teller ook buiten_tijden, afgesloten, oudste_wacht, per_project (per project-id: open, wachtend) en labels (de vijf meest gebruikte: label, count); met teller=1 ook projects (aantal sites met chat voor deze gebruiker). |
projects | object[] | id, name, enabled, can_reply, notify_after |
sort | string | |
module | object | |
can_manage | bool | |
statuses | object | |
conversation | object | Met id: het gesprek plus messages, visitor, visitor_typing, rating_comment, ticket, can, team, templates en me (het eigen gebruikers-id). Sinds 11-10-2026 heeft visitor ook route (path, title, at: de pagina's van dit bezoek, zonder querystring, hooguit twintig, na 30 dagen zonder bericht weg), read_upto en read_at (tot welk bericht de bezoeker het venster zag); een bericht kan faq (id, title) hebben. Sinds 12-10-2026 bevat visitor.previous (id, status, created_at, last_at, rating, ticket, preview: de eerste zin) ook gesprekken van de andere browsers van de bezoeker, gekoppeld met een code of StudioChat.identify(). Sinds 13-10-2026 viewers (id, name, typing): collega's die dit gesprek ook open hebben. |
settings | object | Met settings: enabled, greeting, offline_message, color, position, hours, allowed_origins, allowed_hosts, prechat, proactive, notify_after, notify_users, snippet, token. Berichten hebben files (bijlagen met een URL die een half uur geldig is); visitor heeft consent_at. |
Chat: antwoorden en instellen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Wie mag antwoorden: eigenaar, lid, of een klant met Website op goedkeuren. Instellingen en verwijderen: eigenaar of lid.
Acties (action)
replyid*, faq_id, buttons, file, body*Wie antwoordt op een gesprek zonder behandelaar, krijgt het. Niet bij een gesprek dat een ticket werd. Antwoord: conversation.
faq_id int · Een gepubliceerde veelgestelde vraag van dit project als kaart onder het bericht (11-10-2026); body mag dan leeg.buttons string[] · Hooguit vier knoppen van 1 tot 40 tekens onder het bericht (22-10-2026); in multipart als JSON-tekst. De bezoeker kiest er één.file file · Bijlage (21-10-2026): afbeelding (jpg, png, webp, gif) of pdf, hooguit 10 MB; de inhoud bepaalt het type. Dan als multipart/form-data; body mag leeg. Ook bij note.body string · Hooguit 2.000 tekens. {naam}, {voornaam}, {project}, {bureau} en {medewerker} worden ingevuld.
noteid*, body*Interne notitie: de bezoeker ziet hem nooit. Antwoord: conversation.
statusid*, status*Antwoord: conversation.
status open | wacht | afgesloten
assignid*, user_idAntwoord: conversation.
tagsid*, tags*Antwoord: conversation.
tags string[] · Hooguit tien, elk hooguit 30 tekens.
filesid*, allow*, limitBijlagen van de bezoeker in dit gesprek toestaan of weer uitzetten. Standaard uit; de bezoeker krijgt een systeembericht en ziet pas daarna de paperclip. Antwoord: conversation.
limit ?int · Hoeveel bijlagen de bezoeker mag sturen voor het weer dicht gaat (13-10-2026); zonder geldt de instelling van de site.
ticketid*Zet het gesprek om naar een ticket in Support (module nodig) en sluit het. Met het e-mailadres van de bezoeker gaat het antwoord per mail. Antwoord: conversation.
typingid*De bezoeker ziet acht seconden "typt…".
readid*activityid*, token*, environment, endLive Activity op de iPhone (12-10-2026): alleen vanuit een app-sessie (anders 403 app_only). Studio werkt de activiteit bij per push bij een nieuw bericht, een antwoord, toewijzen en afsluiten; bij afsluiten of een ticket eindigt hij. Antwoord: state.
token string · Pushtoken van de Live Activity (hex).environment sandbox | productionend bool · Token weghalen: de app volgt dit gesprek niet meer.
deleteid*Gesprek met alle berichten weg, bijvoorbeeld op verzoek van de bezoeker.
identity_secretproject_id*, removeSleutel voor StudioChat.identify() maken of vernieuwen (64 hex-tekens), of met remove weghalen. Oude handtekeningen werken daarna niet meer. Antwoord: settings.
muteid*, muted*Stil zetten: geen push meer voor dit gesprek, alleen voor jou (13-10-2026). Het gesprek geeft muted. Antwoord: conversation.
settingsproject_id*, enabled, auto_close_minutes, rating_aspects, file_types, file_max_mb, file_limit, greeting, offline_message, color, position, greeting_buttons, hide_branding, hours, allowed_origins, prechat, proactive, notify_after, notify_users, widgetAntwoord: settings, widget_options.
auto_close_minutes ?int · Gesprek vanzelf dicht na zoveel minuten zonder reactie van de bezoeker nadat het team antwoordde (5 tot 10080); leeg is nooit (13-10-2026).rating_aspects bool · Naast sterren ook vriendelijkheid, snelheid en deskundigheid laten beoordelen.file_types string[] · Wat een bezoeker mag sturen (13-10-2026): afbeeldingen, pdf en/of documenten.file_max_mb int · 1 tot 10.file_limit ?int · Na zoveel bijlagen gaan bijlagen in dat gesprek weer dicht; leeg is geen grens.position rechts | linksgreeting_buttons string[] · Hooguit vier knoppen onder de groet; een klik begint het gesprek met die tekst.hide_branding bool · Venster zonder instnt studio; alleen met white-label in het plan.hours ?object · Per dag (1 = maandag) een lijst blokken ["09:00","17:00"], in de tijdzone van de werkruimte; leeg is altijd open.allowed_origins string · Extra adressen die het widget mogen laden, naast de domeinen van het project. Over http alleen wat hier staat.prechat object · Formulier vóór het eerste bericht: when (nooit|offline|altijd), name/email/topic (uit|optioneel|verplicht), topics (hooguit tien), privacy (bool) en privacy_url (https). Buiten openingstijden is e-mail altijd verplicht. Vervangt ask_email (21-10-2026).proactive object[] · Hooguit vijf: match (bevat|is), path, delay (0–600 s), message (hooguit 300 tekens), every_days (0–365; 0 = één keer), only_new, only_open.notify_after int · Mail na zoveel minuten zonder antwoord, 1–240.widget object · Het venster (10-10-2026), per groep; wat ontbreekt blijft zoals het was. home: mode (zoeken|samen|chat), contact (altijd|na_zoeken), featured_count (0–8), categories, conversation_card, logo. contact: offline (bericht|faq), alternatives (hooguit drie: type telefoon|email|whatsapp, value, label, text, when altijd|offline), links (hooguit drie: label, https-url). faq: enabled, suggest, feedback, log_misses. team: names (voornaam|volledig|voornaam_foto|bureau), queue. visibility: paths (hooguit tien: match bevat|is, path met /), mobile, offline. launcher: offset_x, offset_y (0–200), label_mobile. texts: per taal (nl, en) greeting, offline, home_title, home_intro, search, contact, reply_time, launcher.
refused_allowproject_id*, origin*Een geweigerd adres toestaan: het komt bij allowed_origins en verdwijnt uit de lijst. Antwoord: settings.
refused_ignoreproject_id*, origin*Een geweigerd adres verbergen; na 7 dagen gaat het vanzelf weg. Antwoord: settings.
rotate_tokenproject_id*Nieuw widget-token; de oude installatiecode werkt meteen niet meer. Antwoord: settings.
Veelgestelde vragen
Artikelen die de bezoeker in het chatvenster doorzoekt. Markdown; html is opgeschoond (geen ruwe HTML, geen afbeeldingen, alleen http(s)- en mailto-links). Met suggest hooguit drie gepubliceerde treffers voor een vraag van de bezoeker, met plain om als antwoord in te voegen.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Zoals de chat: team bij Website op bekijken (concepten alleen voor eigenaar en lid), een klant alleen gepubliceerde artikelen en alleen bij Website op goedkeuren.
Queryparameters
project_id | int | |
q | string | Zoeken in titel, categorie en tekst. |
suggest | string | Vraag van de bezoeker. |
stats | int | Cijfers over zelfhulp over 7, 30 of 90 dagen; alleen wie beheert. |
id | int | Eén artikel met body, html en plain. |
Antwoord
stats | object | Met stats: articles (per id views, yes, no, helpful_pct), views, yes, no, misses (zoektermen zonder resultaat: term, count), conversations_after (gesprekken na zelfhulp), deflection_pct. |
articles | object[] | id, project_id, title, category, language, published, featured, position, views, updated_at, excerpt (met suggest ook body, html, plain) |
article | object | |
can_manage | bool | |
languages | object | |
max_body | int | |
Veelgestelde vragen beheren
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid (Website op beheren);
preview iedereen die de chat ziet.
Chat: rapportage en beschikbaarheid
Met view=report (standaard): gesprekken per dag, per weekdag en uur, eerste reactietijd en afhandeltijd (mediaan en p90, in seconden, alleen binnen de openingstijden), gemist (na 15 minuten zonder antwoord en geen ticket), tickets, tevredenheid (4 of 5 van 5 telt als tevreden), drukste pagina's en per teamlid. Met view=team: de eigen status, het team met status en lopende gesprekken, en per project de verdeling.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Zoals de inbox. Per teamlid en de verdeling alleen voor het team; de verdeling aanpassen: eigenaar of lid.
Queryparameters
view | report | team | |
from | date | Standaard 27 dagen voor to. |
to | date | Standaard vandaag. |
project_id | int | |
Antwoord
report | object | from, to, timezone, totals, days, heatmap, pages, comments, agents, truncated |
projects | object[] | id, name |
me | object | Met view=team: status, chosen, max_chats, open, can_set. |
team | object[] | id, name, status, open, max_chats |
routing | object[] | project_id, name, assign_mode, report_block |
Chat: status en verdeling
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Status: wie ergens mag antwoorden. Verdeling: eigenaar of lid.
AI-taken, teksten, merkstem en AI-zichtbaarheid
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen het team (eigenaar, lid of kijker); klanten krijgen 403.
Queryparameters
project_id* | int | Project-id. |
Antwoord
kinds | object | |
usage | object | used, limit, cost_usd |
worker_seen | ?datetime | |
tasks | object[] | |
texts | object[] | |
voice | ?object | |
opportunities | object[] | |
advice | object[] | |
reports | object[] | |
content | object[] | |
geo | object | questions |
AI-taak aanvragen en teksten beoordelen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
AI-worker: volgende taak claimen
Let op: deze GET claimt de taak (zet hem op running). Alleen voor de worker van instnt.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Alleen platformbeheerders van instnt; anderen krijgen 404 of 403.
Antwoord
task | ?object | id, kind, prompt, schema, model |
AI-worker: resultaat inleveren
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Alleen platformbeheerders van instnt; anderen krijgen 404 of 403.
Uptime en techniek
Uptime-controles, JavaScript-fouten, back-ups, onderhoud, sitecontroles, versies met bekende lekken en de cookiescan.
Uptime, fouten, back-ups en onderhoud
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Queryparameters
project_id* | int | Project-id. |
Antwoord
monitors | object[] | id, url, expect_status, expect_text, interval_minutes, enabled, state, last_checked_at, last_response_ms, last_error, ssl_expires_at, safe_browsing, uptime_24h, uptime_30d, avg_ms_24h, recent, incidents |
errors | object[] | id, message, source, line, col, page, browser, stack, occurrences, first_seen, last_seen, status, last_14_days |
error_key | ?string | |
snippet | ?string | |
script_tag | ?string | |
status_page | bool | |
alert_emails | ?string | |
backups | object[] | |
maintenance | object[] | |
can_manage | bool | |
suggested_url | ?url | |
Controles, statuspagina, onderhoud en back-ups beheren
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Sitecontroles per host
Headers, blootgestelde bestanden, cookievlaggen, CMS, domein, DNSSEC en CAA, mail, tags, derde partijen, robots, AI-crawlers en sitemap.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Queryparameters
project_id* | int | Project-id. |
Antwoord
hosts | object[] | host, checks |
Sitecontroles nu opnieuw
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Acties (action)
runproject_id*Controleert de hosts van het project meteen opnieuw, ook het certificaat van de bewaakte adressen, en berekent de beveiligingsscore opnieuw. Hooguit twee keer per vijf minuten per project; daarna 429. Antwoord: hosts.
Beveiligingsscore
Score 0–100 uit zes onderdelen met een vast gewicht (versleuteling, headers, blootstelling, software, mail en DNS, reputatie), berekend uit de laatste sitecontrole, certificaten, lekken en Safe Browsing. Niet gemeten onderdelen tellen niet mee (score per onderdeel is dan null); met minder dan twee gemeten onderdelen is score zelf null. trend is de dagelijkse score van de laatste 30 dagen. domains zegt per domein of het geverifieerd is en hoe (dns of plugin); het TXT-record staat bij /api/domains.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Queryparameters
project_id* | int | Project-id. |
Antwoord
score | ?int | |
previous | ?int | |
trend | object[] | day, score |
categories | object[] | key, label, weight, description, score (?int), points (status, label, detail) |
method | string | |
domains | object[] | domain, verified, via |
Beveiligingsscore opnieuw berekenen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid (beheer van Website); anderen krijgen 404.
Wat draait er op de site
Herkende techniek per categorie uit de homepage en de headers (CMS, winkel, framework, meten, advertenties, toestemming, betalen, reviews, chat, hosting, lettertypen), wat er de laatste 90 dagen bij kwam of verdween, herkende diensten die nog niet gekoppeld zijn, punten die niet goed staan en gratis voorstellen. Regelwerk; summary is een optionele AI-alinea.
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Queryparameters
project_id* | int | Project-id. |
Antwoord
hosts | string[] | |
checked_at | ?datetime | |
detected | object[] | category, label, items (tech, label, version, evidence, host, since, last_seen, connector, connected) |
changes | object[] | type (added|removed), label, host, at |
connect | object[] | tech, label, connector, url |
gaps | object[] | key, tone, title, detail, url, action |
suggestions | object[] | key, title, detail, url, action |
summary | ?object | status, text, at |
can_manage | bool | |
can_ai | bool | |
Opnieuw bekijken of een samenvatting laten schrijven
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid; kijkers en klanten krijgen 403.
Acties (action)
scanproject_id*Bekijkt de homepage(s) nu opnieuw. Hooguit eens per minuut (429).
summaryproject_id*Alleen het eigen team. Claude schrijft één alinea over de herkenning; die staat daarna als summary in de GET. Status 202. Antwoord: task_id.
Versies en open lekken
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Queryparameters
project_id* | int | Project-id. |
Antwoord
components | object[] | ecosystem, name, version, type, dev, active, reported_at |
reported | object | |
vulns | object[] | ecosystem, name, version, vuln_id, aliases, severity, summary, fixed_in, url, first_seen_at |
resolved_30d | int | |
wordfence | bool | |
Laatste cookiescan met verschil
- Toegang
- Sessie of API-sleutel (lezen of schrijven)
- Wie
- Team; klanten met toegang tot het onderdeel Website.
Queryparameters
project_id* | int | Project-id. |
Antwoord
latest | ?object | |
last_error | ?object | |
findings | object[] | |
gone | string[] | |
has_previous | bool | |
history | object[] | |
can_scan | bool | |
Nu scannen
- Toegang
- Sessie of API-sleutel met schrijfrecht
- Wie
- Eigenaar of lid (beheer van Website); anderen krijgen 404.
Server naar server
Adressen voor andere systemen: conversie-events, deploys, lockbestanden, MCP, inkomende webhooks en het sitescript. Elk heeft een eigen sleutel of een geheim adres.
Conversie-event vanuit je eigen backend
Het project volgt uit de sleutel. event_id is een UUID v4 en moet gelijk zijn aan de header Idempotency-Key; hetzelfde event nog eens sturen geeft 200 met duplicate: true. Hooguit 8 kB.
- Toegang
- Conversiesleutel van de bron:
Authorization: Bearer <sleutel> - Status
- 201
Headers
Idempotency-Key* | string | Gelijk aan event_id. |
Body
event_id* | string | |
event* | website_visited | signup_started | account_created | email_verified | onboarding_completed | activated | subscription_started | payment_succeeded | subscription_canceled | |
occurred_at* | datetime | ISO 8601; niet meer dan 5 minuten in de toekomst. |
account_ref | string | UUID, geen e-mailadres. |
visitor_id | string | |
session_id | string | |
properties | object | source, plan, amount (als "25.00"), currency. |
attribution | object | landing_page, referrer, utm_source, utm_medium, utm_campaign, utm_term, utm_content, gclid, fbclid, msclkid, studio_ref. |
Voorbeeld: Verzoek
{
"event_id": "0b6f1c1e-6f0a-4c51-9d2b-3c1f6f7a8e90",
"event": "payment_succeeded",
"occurred_at": "2026-10-05T14:03:00+02:00",
"account_ref": "6f1d2c3b-1a2b-4c3d-8e9f-0a1b2c3d4e5f",
"properties": {
"plan": "pro",
"amount": "25.00",
"currency": "EUR"
}
}
Voorbeeld: Antwoord
{
"ok": true,
"duplicate": false
}
Deploy op de tijdlijn
Dezelfde commit twee keer is één gebeurtenis; alleen een nieuwe deploy start automatiseringen.
- Toegang
- Deploysleutel:
Authorization: Bearer <sleutel> - Status
- 201
Body
title | string | |
commit | string | |
url | url | |
Lockbestanden voor de lekkencontrole
Met een deploysleutel die bij een project hoort. Elke rapportage vervangt de vorige set van dat ecosysteem. Samen hooguit 5 MB.
- Toegang
- Deploysleutel:
Authorization: Bearer <sleutel>
Body
files* | object | Bestandsnaam naar inhoud: composer.lock, package-lock.json, Package.resolved, Cargo.lock. |
MCP-server voor Claude en andere assistenten
JSON-RPC 2.0 over HTTP (Streamable HTTP zonder SSE), alleen lezen: initialize, ping, tools/list, tools/call. Tools: projecten, stand_van_project, adviezen, belangrijkste_acties, zoektermen. Elke persoonlijke sleutel werkt, ook lezen of schrijven. Koppelen: claude mcp add --transport http studio https://instnt.studio/api/mcp --header "Authorization: Bearer <sleutel>".
- Toegang
- Elke persoonlijke API-sleutel (MCP, lezen of schrijven)
Body
jsonrpc* | string | |
id | int | |
method* | string | |
params | object | |
Antwoord
jsonrpc | string | |
id | int | |
result | object | |
error | object | |
POST/api/hooks/appstore/{token}Melding van App Store Connect (webhook)
Met de header x-apple-signature: hmacsha256=<hex> (HMAC-SHA256 van de body met het geheim). Studio haalt de app daarna meteen opnieuw op, hooguit eens per minuut per account. Verkeerde handtekening 401, onbekend adres 404.
- Toegang
- Geen inlog; het geheim zit in het adres
Body
… | object | Het bericht van Apple. |
Inkomende webhook van een automatisering
Het adres is het geheim. Velden uit de JSON-body (één niveau diep, hooguit 50, tot 500 tekens) zijn variabelen in de acties, zoals {{klant}}. Een onbekend of uitgezet adres geeft 404.
- Toegang
- Geen inlog; het geheim zit in het adres
- Status
- 202
Formulier, afspraak, belmeting of GitHub als lead of tijdlijn
Met een geheim controleert Studio de handtekening: Typeform-Signature, Calendly-Webhook-Signature, X-Hub-Signature-256 (GitHub) of anders de header X-Studio-Secret. GitHub zonder geheim wordt geweigerd.
- Toegang
- Geen inlog; het geheim zit in het adres
Body
… | object | Het bericht van de dienst. |
Back-up gelukt (ping)
GET of POST, zodat curl -fsS in een cronregel volstaat. Met size in bytes ziet Studio ook een back-up die ineens veel kleiner is.
- Toegang
- Geen inlog; het geheim zit in het adres
Back-up gelukt (ping)
- Toegang
- Geen inlog; het geheim zit in het adres
Goedgekeurde titels om door te voeren
Voor de WordPress- of Drupal-module.
- Toegang
- Terugschrijfsleutel:
Authorization: Bearer wb_…
Antwoord
titles | object[] | id, url, title, description |
Titels doorgevoerd
- Toegang
- Terugschrijfsleutel:
Authorization: Bearer wb_…
JavaScript-fout van het sitescript
De sleutel is openbaar (staat in de HTML). Zonder persoonsgegevens: geen IP, geen querystrings. Antwoordt altijd 204.
- Toegang
- Geen inlog
- Status
- 204
Body
message* | string | |
source | string | |
line | int | |
col | int | |
stack | string | |
page | string | |
Web Vitals-meting van het sitescript
- Toegang
- Geen inlog
- Status
- 204
Body
lcp | number | |
inp | number | |
cls | number | |
page | string | |
device | mobile | desktop | |
Formulier of lead-klik van het sitescript
Alleen veldnamen, nooit wat er is ingevuld. Of lead (telefoon, email, whatsapp) voor een klik op een link.
- Toegang
- Geen inlog
- Status
- 204
Body
page | string | |
form | string | |
fields | string[] | |
submitted | bool | |
lead | telefoon | email | whatsapp | |
sr | string | |
Cookieloze paginaweergave
Zonder cookies of opslag; een bezoeker is één dag te herkennen aan een hash met een dagelijks wisselend zout. Bots tellen niet.
- Toegang
- Geen inlog
- Status
- 204
Body
page* | string | |
ref | url | |
qref | string | Waarde van ?ref= of ?source=. |
utm_source | string | |
utm_medium | string | |
utm_campaign | string | |
gclid | string | |
sr | string | |
POST/api/site-events/{token}Sitegebeurtenis ontvangen
Ondertekend met het geheim van het project: X-Studio-Timestamp (Unix-tijd, hooguit 5 minuten afwijking) en X-Studio-Signature = sha256=<hex hmac_sha256(geheim, timestamp + "." + body)>. data mag Studio bewaren en tellen (per ref); private gebruikt Studio alleen tijdens de afhandeling. Met id telt een herhaalde gebeurtenis niet dubbel. 502 als een actie mislukte en Studio het niet zelf opnieuw probeert: probeer het dan later opnieuw.
- Toegang
- Geen inlog
- Status
- 202
Body
event* | string | Kleine letters, cijfers en . _ -, zoals tester.aangemeld. |
id | string | |
data | object | |
private | object | |
Keuze in de cookiebanner
Uit de Consent Mode-update die de banner aan Google doorgeeft. Eén keuze per bezoeker per dag, met dezelfde dagelijkse hash als de weergaven; een latere keuze vervangt de eerdere.
- Toegang
- Geen inlog
- Status
- 204
Body
a | granted | denied | analytics_storage |
d | granted | denied | ad_storage |
GET/api/site-script/{key}.jsHet sitescript
Fouten, Web Vitals, formulieren, leads en cookieloze meting in één bestand. Plaats <script src="…/api/site-script/<sleutel>.js" defer></script>.
- Toegang
- Geen inlog
Het chatwidget
Plaats <script src="…/api/chat-widget.js?p=<widget-token>" defer></script>. Het widget toont zich alleen met de module Chat aan en vanaf een toegestaan domein.
- Toegang
- Geen inlog
Queryparameters
p* | string | Widget-token uit de instellingen van de chat. |
GET/api/chat-widget-home.jsHet startscherm van het chatwidget
Laadt het widget zelf als het project zelfhulp, eigen links of andere contactmogelijkheden gebruikt.
- Toegang
- Geen inlog
GET/api/chat-widget/{token}/beeld/{kind}Logo of teamfoto voor het venster
kind: logo (als de kop het logo toont) of team-<id> (alleen bij "voornaam met foto" en alleen van het team van dat project). Anders 404.
- Toegang
- Geen inlog
POST/api/chat-widget/{token}Het chatwidget: berichten van de bezoeker
Voor het widget zelf. JSON als text/plain, zodat er geen preflight is. Alleen met een Origin van een domein van het project (of een toegevoegd adres); anders 403 origin_not_allowed. Onbekend token of geen Origin: 404. visitor is een willekeurig id uit de browser (20–64 tekens); Studio bewaart alleen een HMAC daarvan en geen IP-adres. Het veld website is een honeypot. Hooguit 15 berichten per minuut per bezoeker en 10 nieuwe gesprekken per uur per IP.
- Toegang
- Geen inlog
Body
action* | hallo | poll | stuur | gegevens | beoordeel | transcript | nieuw | vergeet | geschiedenis | gesprek | kies | koppel | bevestig | identificeer | uitloggen | |
visitor* | string | |
since | int | Alleen berichten na dit id. |
body | string | Bij stuur; hooguit 2.000 tekens. |
name | string | |
email | email | |
page | url | |
title | string | |
typing | bool | |
rating | int | Bij beoordeel: 1–5, alleen na afsluiten. |
website | string | Leeg laten. |
topic | string | Bij een nieuw gesprek: een onderwerp uit de instellingen; wordt een label. |
consent | bool | Akkoord met de privacyverklaring, als het formulier daarom vraagt. |
seen | int | Bij poll: het laatste bericht-id dat de bezoeker in het open, zichtbare venster zag; voor "Gelezen" in de inbox. Gaat nooit terug. |
route | object[] | Bij het eerste stuur: de pagina's die de bezoeker in het laatste half uur bekeek (p = pad, t = titel, at = tijd in ms), hooguit tien; tot dan bleven ze in zijn browser. |
proactive | string | De tekst van het proactieve bericht waarop de bezoeker antwoordt; alleen als die in de regels staat. |
id | int | Bij gesprek: een eerder gesprek van dezelfde bezoeker. Bij kies: het bericht met de knoppen. |
label | string | Bij kies: een van de knoppen onder dat bericht; één keer per bericht, en gaat als bericht van de bezoeker. |
code | string | Bij bevestig: de acht cijfers uit de mail na koppel, alleen geldig in dezelfde browser (visitor), een kwartier en één keer; na vijf foute pogingen vervalt hij. Daarna hangt deze browser aan het adres. Tot 11-10-2026 een link die de aanvrager koppelde aan wie klikte. |
user_id | string | Bij identificeer: het id van de ingelogde gebruiker op de site. |
signature | string | Bij identificeer: HMAC-SHA256 van user_id met de sleutel uit de chatinstellingen, op de server van de site berekend. |
email_signature | string | Bij identificeer: HMAC-SHA256 van "user_id|adres" (adres in kleine letters). Alleen dan telt email als bevestigd. uitloggen maakt de koppeling van deze browser ongedaan. |
file | file | Bij stuur als multipart (payload = de JSON hierboven): afbeelding of pdf, hooguit 10 MB, tien per uur. |
selfhelp | object | Bij een nieuw gesprek: articles (ids die de bezoeker las), searched, unhelpful (id van een artikel met "Nee, hielp niet"). Alleen gepubliceerde artikelen van dit project tellen; het team ziet het als notitie. |
Antwoord
enabled | bool | |
config | object | name, color, position, widget (de instellingen van het venster, teksten in beide talen, contactmogelijkheden als link), greeting, buttons (onder de groet), offline_message, prechat, proactive, files, known, status, privacy (null bij white-label zonder eigen verklaring), identify |
status | online | open | gesloten | |
conversation | ?object | status, name, email, rated, ticket, agent_typing, read (tot welk bericht het team las), files (mag de bezoeker bijlagen sturen), agent (name, initials, photo, of null), queue (plek in de rij zolang het team nog niet antwoordde) |
messages | object[] | id, from, body, at, name, files, buttons, choice, faq (id, title van een gepubliceerd artikel) |
history | object[] | Bij geschiedenis: id, at, last_at, status, ticket, preview. |
error | string | Bij 403: files_not_allowed als het team bijlagen niet toestond, closed als het buiten openingstijden alleen zelfhulp is. Bij 422: validation, email, unverified (transcript: eerst het adres bevestigen met koppel/bevestig), code, file (met detail) of prechat (met field: name, email, topic of consent). |
Bijlage uit de chat
Alleen met de ondertekende URL uit files (expires en signature), een half uur geldig; anders 403. Afbeeldingen inline, een pdf als download, altijd met nosniff.
- Toegang
- Geen inlog
POST/api/chat-widget/{token}/faqHet chatwidget: veelgestelde vragen
Voor het widget zelf, met dezelfde herkomstregels als chat-widget/{token}. Alleen gepubliceerde artikelen van dat project; taal eerst die van de pagina, anders alles. Met de module of het widget uit enabled: false. Hooguit 60 verzoeken per minuut per bezoeker.
- Toegang
- Geen inlog
Body
action* | lijst | zoek | categorie | artikel | feedback | |
q | string | Bij zoek; hooguit 120 tekens. Zonder resultaat bewaart Studio de term zonder bezoeker, 90 dagen (uit te zetten). |
lang | nl | en | |
id | int | Bij artikel en feedback. |
name | string | Bij categorie. |
helpful | bool | Bij feedback: "Hielp dit?". Eén stem per artikel per dag per IP-hash. |
Antwoord
enabled | bool | |
total | int | |
results | object[] | id, title, category, excerpt (bij lijst eerst de uitgelichte) |
categories | object[] | name, count (bij lijst) |
article | object | id, title, category, html, updated_at |
Aanmelden via een formulier op de site van de klant
JSON of een gewoon HTML-formulier. Stuurt een bevestigingsmail (dubbele opt-in). Het veld website is een honeypot. Hooguit 5 per minuut per bezoeker.
- Toegang
- Geen inlog
Body (JSON of een HTML-formulier)
email* | email | |
naam | string | |
toestemming* | string | 1, on, true of ja. |
taal | nl | en | Taal van de aanmelding; zonder die van het formulier. |
website | string | Leeg laten. |