# Microsoft Fabric: ingest row

The **Microsoft Fabric: ingest row** Point template streams one row into an Eventhouse (KQL) table through the Fabric ingest API.

Unlike the other Integrations points that take their own token, this one authenticates through an Entra ID application connected once for the whole account — there's no token field on the point itself.

## Before you start

Connect an Entra ID application under **Settings > 3rd-party integrations > Microsoft Azure**:

1. Register an application in your Entra ID directory and create a client secret for it.
2. In **Directory (tenant) ID**, enter your tenant, for example `contoso.onmicrosoft.com`.
3. In **Application (client) ID**, enter the app registration's client ID.
4. In **Client secret**, paste the secret. It's stored write-only: Pushwoosh never shows it again, so paste a new one to replace it.
5. Click **Connect Azure**.

Without a connected application, the point can't send its request.

<Aside type="caution">
A client secret has its own expiration date, set when you created it in Entra ID. On the day it expires, the point starts failing and the Control Panel just shows a generic "reconnect the integration" state — nothing points at the secret specifically. Put a reminder on the secret's expiration date so you rotate it before that happens, not after.
</Aside>

Three things also need to be in place on the Eventhouse side, or the request fails:
* The target table needs a JSON ingestion mapping — streaming ingestion of JSON doesn't work without one.
* The app registration needs the `ingestor` role on the Eventhouse. There's no button for this in the Fabric UI — grant it by running this in the Eventhouse's query window:
  ```
  .add database ['<database name>'] ingestors ('aadapp=<Application (client) ID>;<Directory (tenant) ID>')
  ```
* The KQL database needs its streaming ingestion policy enabled. Run this in the same query window:
  ```
  .alter database ['<database name>'] policy streamingingestion enable
  ```

Keep the `['...']` around the database name in these commands if it contains a hyphen — a bare hyphenated name fails to parse.

## Configure the point

1. Drag **Microsoft Fabric: ingest row** from the **Integrations** section of the left panel onto the canvas.
2. Double-click the point and enter a **Step Name**.
3. In **Query URI host**, enter your Eventhouse's host from its **Query URI**, on the Eventhouse's **System overview** page. Don't include `https://`, for example `trd-abc123.z9.kusto.fabric.microsoft.com`.
4. In **KQL database**, enter the target database's name.
5. In **Table**, enter the target table's name.
6. In **Ingestion mapping**, enter the name of the JSON mapping created on that table.
7. In **Columns**, add the column name mapped to the value to write — see [key/value fields](/product/customer-journey/journey-elements/integrations/#configuring-list-and-keyvalue-fields).
8. Click **Save**.

This point doesn't map any response data back into the journey.

## Reading a failed request

Open [Calls log](/product/customer-journey/journey-elements/channels/webhook/#calls-log) in the point's drawer and check the response:

* **401 or 403** — the connected Entra ID application's credentials or its `ingestor` role are wrong or missing.
* **520 with `StreamingIngestionException: Failed to initialize cursor tracker...`** — the KQL database's streaming ingestion policy isn't enabled. The error's own `permanent: false` flag reads as "retry later," but retrying doesn't fix this. Run `.alter database ['<database name>'] policy streamingingestion enable` in the Eventhouse's query window (see [Before you start](#before-you-start)).

A failed request drops the traveler from the journey — see [Errors and failed requests](/product/customer-journey/journey-elements/integrations/#errors-and-failed-requests).