# Axiom

Stream formulier-analyticsevents en optioneel volledige antwoorden van respondenten naar een Axiom-dataset.

> ℹ️ **Available on the Free plan.**


## Axiom

Query ruwe formulierevents met APL, bouw dashboards en monitors, en stuur optioneel volledige ingediende antwoorden.

<h2 id="connect">Axiom verbinden</h2>

<p>
  De twee regio-opties zijn <strong>US East 1 (AWS)</strong> en <strong>EU Central 1 (AWS)</strong>. Kies de regio waarin je
  Axiom-organisatie zich bevindt — Formstep leidt hier het ingest-eindpunt van af, en ingesten naar de verkeerde regio wordt geweigerd.
</p>

<h2 id="event-stream">Analytics-events</h2>

<p>
  Het koppelen van Axiom zet het doorsturen van antwoordvrije events aan voor elk formulier in de workspace. Records gebruiken de eventnamen{' '}
  <code>form_view</code>, <code>form_engaged</code> en <code>form_submit</code>, met dezelfde parameters die worden gedocumenteerd in{' '}
  <a href="/nl/integrations/analytics-streaming#event-contract">Analytics streaming</a>.
</p>

<pre>
  <code>{`['your-dataset']
| where ['event'] in ('form_view', 'form_engaged', 'form_submit')
| summarize events=count() by ['event']`}</code>
</pre>

<p>
  Elk record haalt de eventparameters naar het hoogste niveau, zodat <code>form_id</code>, <code>source</code>, <code>device</code> en de
  rest gewone kolommen zijn waarop je kunt filteren en samenvatten.
</p>

<p>
  Het doorsturen van events is best-effort en wordt niet opnieuw geprobeerd. Schakel het voor één formulier uit onder{' '}
  <strong>Formulierinstellingen → Integraties → Analytics streaming → Stuur analyse-events door</strong>.
</p>

<h2 id="answers">Antwoorden van respondenten</h2>

<p>
  Axiom kan ook één volledig record per voltooide inzending ontvangen. Deze stream staat <strong>standaard uit</strong> en moet apart worden
  ingeschakeld voor elk formulier met <strong>Stuur antwoorden van respondenten</strong>.
</p>

<p>
  Een antwoordrecord is dezelfde event-envelop als wat een <a href="/nl/integrations/webhooks">aangepaste webhook</a> ontvangt, plus een
  Axiom-veld <code>_time</code>: het event-id, het type, <code>createdAt</code>, <code>apiVersion</code> en <code>test</code>, en onder{' '}
  <code>data</code> het formulier, de inzending (id, e-mailadres van de respondent, tijdstip van indiening, PDF-link, taal), een{' '}
  <code>answers</code>-object met de <a href="/nl/requests/field-keys">veldsleutel</a> als key en een <code>display</code>-object met
  dezelfde keys als leesbare tekst. Inzendingen die een verzoek hebben beantwoord bevatten ook een <code>request</code>-blok met je externe
  id en metagegevens. De volledige vorm staat in de <a href="/nl/developers/webhooks-reference#payload">webhookreferentie</a>.
</p>

<p>
  Antwoorden worden gestreamd zodra een inzending is voltooid en opnieuw wanneer een respondent deze bewerkt. Verlaten concepten bereiken
  Axiom op deze manier nooit — antwoordstreaming heeft geen inactiviteitsvenster.
</p>

> ⚠️ **Antwoordrecords bevatten persoonsgegevens**
> <p>
>     Een volledige inzending kan namen, e-mailadressen, vrije tekst, bestanden, handtekeningen en andere gevoelige antwoorden bevatten.
>     Gebruik een afgeschermde dataset, houd de tokenscope beperkt en stel bewaar-/toegangsregels in voordat je deze stream inschakelt.
>   </p>

<h2 id="delivery">Bezorging en mislukkingen van antwoorden</h2>

<p>
  Antwoordrecords lopen mee met de bezorgingswachtrij van inzendingen: tot 5 pogingen met exponentiële uitstel. Na 20 opeenvolgende
  mislukkingen stopt de bestemming met in de wachtrij worden geplaatst, zodat een ongeldig token of een geweigerde dataset niet bij elke
  nieuwe inzending een mislukte bezorging veroorzaakt. Het opslaan van een nieuw API-token wist de fout en hervat de bezorging.
</p>

<p>
  Het doorsturen van events en antwoordstreaming hebben onafhankelijke schakelaars. Je kunt per formulier antwoorden zonder events
  versturen, events zonder antwoorden, beide, of geen van beide.
</p>

<h2 id="troubleshooting">Problemen oplossen</h2>

<h2 id="next-steps">Volgende stappen</h2>

<div class="not-prose grid gap-3 sm:grid-cols-2">
  - [Analytics streaming](/nl/integrations/analytics-streaming) — Gedeeld schema, standaardinstellingen en privacy
  - [Integratiegezondheid](/nl/integrations/health-monitoring) — Begrijp retries en automatisch pauzeren
</div>
