Deprecation notice: NxVET is deprecating consultation record support in the near future. New integrations should use transcripts, conversations, webhooks, and other NxVET ecosystem data.

Microsoft Power Automate Integration

Connect NxVET conversations and button recordings to Outlook, Teams, Planner, Microsoft To Do, SharePoint, and other Microsoft 365 services

Last updated: July 29, 2026

Overview

NxVET can notify a Power Automate cloud flow the moment a recording or conversation has finished processing. The flow retrieves the transcript from the NxVET API and uses it to create calendar events, tasks, reminders, email drafts, or any other automated action available in Power Automate.

NxHUB button recording
        ↓
NxVET processes and transcribes it
        ↓
NxVET webhook (new_label / conversation_completed)
        ↓
Power Automate cloud flow
        ↓
Outlook calendar event, To Do task, email draft, Teams message, ...

Example workflow

  1. A user records a voice note using an NxHUB device.
  2. NxVET processes and transcribes the recording.
  3. NxVET sends a webhook event to Power Automate.
  4. Power Automate retrieves the completed transcript from the NxVET API.
  5. Power Automate creates the requested Microsoft 365 action.

The whole setup is point-and-click. You will work in two web dashboards — the NxVET Integrations page and the Power Automate designer — and you never need to write code. The only "technical" parts are copy-pasting a few snippets from this page into form fields, and this guide shows exactly where each one goes.

Prerequisites

  • An NxVET organization and API key
  • Access to the NxVET Integrations page
  • A Microsoft Power Automate account with permission to create cloud flows
  • Access to the Microsoft services used by the flow (Outlook, Teams, etc.)
Licensing: The When an HTTP request is received trigger, the HTTP action, and custom connectors are premium features in Power Automate. Most flows described here require a Power Automate Premium (or other qualifying) license.

Step 1: Create an NxVET API Key

The API key is what lets your Power Automate flow read data from NxVET. Creating one takes a minute:

  1. Sign in to app.nx.vet.
  2. Open the Integrations page from the menu.
  3. Select the API Keys tab at the top.
  4. Click Create API Key and give it a name you'll recognize later, such as Power Automate.
  5. Copy the key that appears — it starts with nxvet_sk_.
The key is shown only once. Paste it somewhere safe right away (a password manager is ideal). If you lose it, don't worry — just delete that key and create a new one.

You will use the key exactly once in this guide, in Step 4, where it goes into a header field written like this — the word Bearer, one space, then your key:

Bearer nxvet_sk_YOUR_API_KEY

See the Authentication guide for more about API keys.

Step 2: Create the Power Automate Flow

A "flow" is the automation itself: a trigger ("when this happens...") followed by actions ("...do this"). Ours starts whenever NxVET sends a notification.

  1. Go to make.powerautomate.com and sign in with your Microsoft work account.
  2. In the left menu, click Create, then choose Automated cloud flow.
  3. A dialog asks you to name the flow and pick a trigger. Give it a name like NxVET voice notes. The trigger we need is not in this list — click Skip at the bottom of the dialog.
  4. In the trigger search box, type http request and select When an HTTP request is received (from the Request connector).
  5. Click the trigger card to open its settings. In the Request Body JSON Schema box, paste the snippet below exactly as-is. This tells Power Automate what a NxVET notification looks like, so fields like labelId show up by name later (it matches the NxVET webhook payload format):
{
  "type": "object",
  "properties": {
    "id": { "type": "string" },
    "type": { "type": "string" },
    "organizationId": { "type": "string" },
    "timestamp": { "type": "string" },
    "data": {
      "type": "object",
      "properties": {
        "labelId": { "type": "string" },
        "conversationId": { "type": "string" },
        "deviceId": { "type": "string" }
      }
    }
  }
}
  1. If you see a Who can trigger the flow? setting, leave it on Anyone — NxVET's servers call this URL directly, without a Microsoft account.
  2. Power Automate won't save a flow that has a trigger but no actions. Add the first action from Step 4 now, or add a placeholder: click + below the trigger, search for Compose, add it, and type anything in its input box.
  3. Click Save (top right).
  4. Reopen the trigger card. The HTTP POST URL field is now filled in (it's only generated after the first save). Click the copy icon next to it — this URL is what you'll give NxVET in the next step. It looks like https://prod-00.westus.logic.azure.com/workflows/...
Treat this URL as a secret. Anyone who has it can trigger your flow. Power Automate cannot easily verify the NxVET HMAC signature inside a plain flow (see Security), so the unguessable URL is your first line of defense.

Step 3: Register the Webhook in NxVET

Now tell NxVET where to send notifications — the URL you just copied. This is done on the same Integrations page where you created the API key:

  1. Sign in to app.nx.vet and open Integrations.
  2. Select the Webhooks tab.
  3. Click to add a new webhook. A form appears with these fields:
    • Payload URL — paste the Power Automate HTTP POST URL from Step 2.
    • Description (optional) — something like Power Automate — voice note reminders.
    • Event types — tick only the events you want (see the table below). Leaving every box empty sends all events, which triggers your flow more often than you need.
  4. Click Create Webhook. Your webhook appears in the list below the form.

Which event type to tick

Use case Event type Data fields
Button-triggered voice notes on an NxHUB device New Label (new_label) { labelId }
Completed NxHUB ambient conversations Conversation Completed (conversation_completed) { conversationId, deviceId }

Confirm it works

  1. In the webhooks list, find your new webhook and click its Test action. NxVET immediately sends a harmless ping event to your flow.
  2. Back in Power Automate, open My flows, click your flow, and look at the 28-day run history. A new run should appear within a few seconds.
  3. If no run appears, double-check that the Payload URL matches the HTTP POST URL exactly (re-copy it from the trigger card) and that the flow is turned On.

NxVET also shows delivery status next to each webhook (the Failures column), so you can see from either side whether events are getting through.

Step 4: Retrieve the Transcript

The notification NxVET sends contains only IDs — not the transcript itself. So the flow's first real job is to go back to NxVET and fetch the full data. This whole step happens inside the Power Automate flow designer, using the built-in HTTP action.

Two small skills you'll use below:

Picking dynamic content: when your cursor is in an action's field, a panel offers Dynamic content (lightning-bolt icon) — values from earlier steps, by name. Fields like labelId appear there because of the schema you pasted in Step 2.

Pasting an expression: in the same panel, switch to the Expression (fx) tab, paste the snippet from this page, and click OK/Add. The field then shows a small fx token.

Button recording (New Label)

Add the HTTP action that fetches the recording's details:

  1. Click the + below the trigger and choose Add an action (older designer: New step). If you added a placeholder Compose action in Step 2, you can delete it now.
  2. Search for HTTP and pick the plain HTTP action (green globe icon, publisher Microsoft) — not "HTTP with Microsoft Entra ID".
  3. Method: select GET.
  4. URI: type https://app.nx.vet/api/labels/ and then, with the cursor right after the final /, pick labelId from Dynamic content.
  5. Headers: expand the headers section and add two rows:
    KeyValue
    AuthorizationBearer nxvet_sk_YOUR_API_KEY  (the word Bearer, one space, then your key from Step 1)
    Content-Typeapplication/json

The response bundles the transcript together with other notes in a list called ownedPatientNotes. Pull out the transcript with a Filter array action:

  1. Add another action and search for Filter array (under Data Operation).
  2. From: paste this expression:
    body('HTTP')?['ownedPatientNotes']
  3. In the condition row: left box → paste the expression item()?['type'], middle dropdown → is equal to, right box → type the word Transcript (plain text, capital T).

From here on, whenever a later action needs the transcript text, paste this expression into its field:

first(body('Filter_array'))?['content']
Tip: Transcription takes a short while after the recording ends, so the transcript may not exist yet when the new_label event arrives. Add a Delay action (search "Delay", set it to 1–2 minutes) between the trigger and the HTTP action — or also tick Label Updated in Step 3, which fires again when the transcript is added.

Completed conversation (Conversation Completed)

Same idea, different address. Add the HTTP action exactly as above, but build the URI from three parts: type https://app.nx.vet/api/nxhub/conversations/, pick deviceId from Dynamic content, type /, then pick conversationId. The finished URI looks like:

https://app.nx.vet/api/nxhub/conversations/ [deviceId] / [conversationId]

Use the same two headers as above. This response is simpler — the transcript is directly in a field called transcriptText. No Filter array needed; wherever a later action needs the transcript, paste:

body('HTTP')?['transcriptText']

See the API Reference for full response details.

Step 5: Create a Microsoft 365 Action

This is the payoff: turning the transcript into something in your Microsoft world. Add one more action to the flow:

  1. Click +Add an action and search for the thing you want to create. Some useful ones:
    To create a...Search for this action
    Calendar eventCreate event (V4) — Office 365 Outlook
    To-do / reminderAdd a to-do (V3) — Microsoft To Do
    Team taskCreate a task — Planner
    Email draftSend an email (V2) — Office 365 Outlook (or save as draft)
    Teams messagePost message in a chat or channel — Microsoft Teams
    List entryCreate item — SharePoint
  2. The first time you use each connector, Power Automate asks you to Sign in — use the same Microsoft work account (this is how the flow gets permission to your calendar or tasks; NxVET never sees those credentials).
  3. Fill in the action's fields. For a quick first version, put the transcript expression from Step 4 straight into the event or task title — you'll refine it in the next section.
  4. Click Save, then press the button on the NxHUB device, record a short note, and watch the run history.

Example

Voice note recorded on an NxHUB button:

"Remind me tomorrow morning to speak with Cindy about her vacation request."

Resulting Power Automate action:

Outlook calendar event
Title: Speak with Cindy about vacation request
Date:  Tomorrow
Time:  9:00 AM

Interpreting the Voice Note

A raw transcript like the example above needs to be turned into structured fields — a title, a date, a person — before the flow can create a sensible calendar event. An AI step in the middle of the flow does this.

The point-and-click option is AI Builder: add the action Create text with GPT using a prompt (search "GPT" in the action picker), put the transcript expression from Step 4 into the prompt along with an instruction like "Extract the reminder from this voice note and reply only with JSON in this exact shape:", followed by:

{
  "action": "create_calendar_event",
  "title": "Talk to Cindy about vacation",
  "date": "2026-07-30",
  "time": null,
  "person": "Cindy"
}

Then add a Parse JSON action on the AI response (it turns the JSON into named fields you can pick from Dynamic content), and a Switch on the action field to branch: one path creates the calendar event, another the task, another the email draft. Azure OpenAI or another approved AI service works the same way via an HTTP action, if your organization prefers that.

Start simple: a perfectly good first version skips the AI step entirely and just creates a To Do task whose title is the raw transcript. Get that working end-to-end first, then add the AI step to make the results smarter.

Security

API key handling

  • Do not place NxVET API keys directly in visible flow fields when avoidable — they can appear in run history.
  • Use Power Automate's secure inputs/outputs settings on the HTTP action, environment variables, Azure Key Vault, or a custom connector with API-key authentication.

Webhook signature verification

NxVET webhooks include an HMAC-SHA256 signature in the X-NerveX-Signature header, computed over the raw request body (see Signature Verification). Production integrations should verify this signature before processing sensitive data.

Implementing exact raw-body HMAC verification inside a plain cloud flow is awkward. Options, strongest first:

  1. Front the flow with a small Azure Function or API Management endpoint that verifies the NxVET HMAC and forwards valid requests to Power Automate. This is the recommended production setup.
  2. Build an NxVET custom connector with webhook registration and verification.
  3. For prototypes and hackathons, treat the generated HTTP trigger URL as a secret and restrict the trigger to expected callers where your plan supports it.

Reliability

  • Duplicates: Webhook events may be delivered more than once. Deduplicate by the event id or the X-NerveX-Delivery header before creating calendar events or tasks.
  • Ordering: Events may arrive out of order. Use the webhook timestamp field when ordering matters.
  • Respond fast: NxVET retries on timeouts and 5xx responses (see Delivery & Retries). The HTTP trigger responds automatically, but keep long-running work after a Response action if your flow adds one.

Custom Connector

For a reusable, shareable integration, build a Power Automate custom connector instead of hand-configured HTTP actions. Power Automate can import an OpenAPI definition to create a custom connector, and custom connectors can expose both REST actions and webhook triggers.

Start from the NxVET OpenAPI spec (note: the custom-connector import currently expects OpenAPI 2.0/Swagger, so the 3.0 spec needs conversion). An NxVET connector would typically expose:

  • Trigger: When a button recording is ready
  • Trigger: When a conversation is completed
  • Action: Get label / recording transcript
  • Action: Get conversation
  • Action: List devices
  • Action: Create a conversation
  • Action: Get device timeline

Custom connectors support API-key authentication in a request header, including headers whose value must start with Bearer .

Licensing reminder: Custom connectors and premium connectors generally require Power Automate Premium or another qualifying license.

Implementation Checklist