---
title: "Getting Started — AVCodex Docs"
description: "Getting Started — AVCodex documentation for AV integrators, programmers, and ops teams."
lang: en
json-ld:
---

[](/)

Solutions

[Pricing](/pricing)[The Signal](/blog)[Resources](/resources)

Learn

[Free AI Assessment](/scorecard)[Get Started →](/pricing)

[Documentation Home](/docs)

Guides 

Custom Actions 

-   [Overview](/docs/custom-actions/overview)
-   [Getting Started](/docs/custom-actions/getting-started)
-   [Action Collections](/docs/custom-actions/action-collections)
-   [Parameter Configuration](/docs/custom-actions/parameter-configuration)
-   [Variables and Secrets](/docs/custom-actions/variables-and-secrets)
-   [Testing and Debugging](/docs/custom-actions/testing-and-debugging)
-   [Examples](/docs/custom-actions/examples)
-   [Single-Use Custom Actions](/docs/custom-actions/single-use-custom-actions)

Pro Actions 

API 

Builder API 

Agentic Commerce (ACP) 

Integrations 

[Docs](/docs)/ Custom Actions / Custom Actions 

# Getting Started

Last updated · MAR 2026 · [Read as Markdown](/docs/custom-actions/getting-started.md)

# Getting Started with Custom Actions

Stand up your first Custom Action in a few minutes.

* * *

> **Note:** Custom Actions require a Builder plan or higher. [Upgrade to Builder](https://app.avcodex.com/plans)

## [Create your first action# ](#create-your-first-action)

### [1\. Open Custom Actions# ](#1-open-custom-actions)

Go to [app.avcodex.com](https://app.avcodex.com), pick your agent, then **Build** > **Capabilities** > **Add Custom Action**.

### [2\. Basic configuration# ](#2-basic-configuration)

Fill in the basics. Example: a tech-facing action that searches your project database for a room.

\- **Title**: `Search rooms` - **Description**: `Search for a room in the project database by site name, room name, or asset tag` - **Method**: `GET` - **URL**: `https://api.example.com/rooms`

### [3\. Add parameters# ](#3-add-parameters)

Open the **Parameters** tab and add a query parameter.

-   **Source**: Let the AI generate it.
-   **Key**: `query`
-   **Type**: String.
-   **Example**: `1200-market boardroom-4`
-   **AI instructions**: `Search term taken from the user's request, usually a site code, room name, or asset tag.`
-   **Required**: yes.

### [4\. Test the action# ](#4-test-the-action)

Use the built-in tester to confirm the call works.

### [5\. Save and use# ](#5-save-and-use)

Click **Add Action**. Your agent can now search rooms whenever a tech asks.

## [Import from cURL# ](#import-from-curl)

If you already have a cURL command, paste it in. The importer will configure most of the action for you.

### [1\. Paste the cURL# ](#1-paste-the-curl)

For example, posting a status note to a Slack channel:

bash 

```
curl -X POST https://api.example.com/messages \
  -H "Authorization: Bearer {{var.API_KEY}}" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "{{channel}}",
    "subject": "{{subject}}",
    "body": "{{message}}"
  }'
```

### [2\. Parse and configure# ](#2-parse-and-configure)

Click **Parse cURL** to auto-populate:

-   Method: POST.
-   Headers: Authorization, Content-Type.
-   Body parameters with AI placeholders.

### [3\. Configure placeholders# ](#3-configure-placeholders)

For each `{{placeholder}}`:

-   Add an example value (a real Slack channel, a sample subject like "Boardroom 4 commissioning passed").
-   Write AI instructions ("Use the channel the tech mentions, default to #av-ops").
-   Mark required or optional.

## [Using variables# ](#using-variables)

### [Application variables# ](#application-variables)

Define reusable values in the **Variables** tab.

**Define once:**

-   `API_KEY` = `sk-abc123...`
-   `BASE_URL` = `https://api.example.com`

**Use anywhere:**

-   URL: `{{var.BASE_URL}}/rooms`
-   Header: `Authorization: Bearer {{var.API_KEY}}`

### [System variables# ](#system-variables)

System variables give the action runtime context about the current user and conversation. They are available in every action.

**\`{{system.message\_history}}\`**

-   The full conversation as an array.
-   Format: OpenAI Chat Completions API format.
-   Use case: send conversation context to an analysis or escalation API.
-   Example: `[{"role": "user", "content": "Q-SYS Core offline"}, {"role": "assistant", "content": "Which room?"}]`

**\`{{system.user\_id}}\`**

-   The unique ID of the current user.
-   Format: string identifier.
-   Use case: track which tech ran an action, attribute work in your PM tool.
-   Example: `"user_abc123"`

**\`{{system.timestamp}}\`**

-   Current Unix timestamp, in seconds.
-   Format: string number.
-   Use case: log when actions occur, time-stamped commissioning notes.
-   Example: `"1713552052"`

**Example use in the cURL importer:**

bash 

```
curl -X POST https://api.example.com/escalations \
  -H "Content-Type: application/json" \
  -H "X-User-ID: {{system.user_id}}" \
  -d '{
    "timestamp": "{{system.timestamp}}",
    "messages": {{system.message_history}}
  }'
```

Note: `message_history` does not need quotes in the body. It is already a JSON array.

## [Action dependencies# ](#action-dependencies)

Action dependencies let you build multi-step workflows where one action's output becomes the next action's input. The agent runs the actions in the right order automatically.

**How it works**

1.  A tech asks: "What was the last commissioning result for Boardroom 4 at 1200 Market?"
2.  The agent recognizes it needs to:

\- First, call **Find room** to resolve the room ID. - Then, call **Get latest commissioning report** with that ID.

1.  Actions run in sequence.
2.  The agent responds with the final answer.

### [Example: two-step room lookup# ](#example-two-step-room-lookup)

**Step 1, find the room:**

-   Name: `Find room`.
-   URL: `https://api.example.com/rooms?query={{query}}`.
-   Returns: `{"data": {"id": "room_4421", "name": "Boardroom 4"}}`.

**Step 2, get the commissioning report:**

-   Name: `Get latest commissioning report`.
-   URL: `https://api.example.com/rooms/{{roomId}}/commissioning/latest`.
-   Parameter configuration:

\- Source: `Output from another Action`. - Action: `Find room`. - JSONPath: `$.data.id` (extracts `room_4421` from Step 1).

**Result:** when the tech asks about Boardroom 4 commissioning, the agent:

1.  Calls **Find room**, gets `room_4421`.
2.  Calls **Get latest commissioning report** with `room_4421`.
3.  Responds: "Boardroom 4 was commissioned on April 14. All checks passed except the ceiling-mic gate threshold, flagged for review."

**JSONPath examples:**

-   `$.id` - top-level field.
-   `$.data.room.id` - nested field.
-   `$.items[0].name` - first array item.
-   `$.rooms[*].id` - all room IDs.

## [Verb customization# ](#verb-customization)

Improve the in-chat experience with status messages:

-   **Present tense**: "Searching project database."
-   **Past tense**: "Searched project database."

These show while the action runs.

## [Best practices# ](#best-practices)

### [1\. Clear descriptions# ](#1-clear-descriptions)

Write descriptions that help the agent understand when to call the action. "Use when the tech asks about a room's commissioning status" beats "Get commissioning."

### [2\. Realistic examples# ](#2-realistic-examples)

Provide example values that match real AV data. A real site code like `1200-market` is better than `foo`.

### [3\. Test thoroughly# ](#3-test-thoroughly)

Run the tester with several inputs before saving. Try a known-good room, a missing room, an ambiguous query.

### [4\. Use variables# ](#4-use-variables)

Never hardcode sensitive values. Use application variables.

### [5\. Handle errors# ](#5-handle-errors)

Make sure your API returns clear error messages. The agent will surface them to the tech.

## [Next steps# ](#next-steps)

-   [Configure parameters](/docs/custom-actions/parameter-configuration)
-   [Manage variables](/docs/custom-actions/variables-and-secrets)
-   [Test your actions](/docs/custom-actions/testing-and-debugging)
-   [View examples](/docs/custom-actions/examples)

\*AVCodex · Your AV expertise. Amplified by AI.\*

Was this helpful? 

[Edit this page →](#)

[

Previous

Overview

](/docs/custom-actions/overview)[

Next

Action Collections

](/docs/custom-actions/action-collections)

On this page

-   [Create your first action](#create-your-first-action)
-   [1\. Open Custom Actions](#1-open-custom-actions)
-   [2\. Basic configuration](#2-basic-configuration)
-   [3\. Add parameters](#3-add-parameters)
-   [4\. Test the action](#4-test-the-action)
-   [5\. Save and use](#5-save-and-use)
-   [Import from cURL](#import-from-curl)
-   [1\. Paste the cURL](#1-paste-the-curl)
-   [2\. Parse and configure](#2-parse-and-configure)
-   [3\. Configure placeholders](#3-configure-placeholders)
-   [Using variables](#using-variables)
-   [Application variables](#application-variables)
-   [System variables](#system-variables)
-   [Action dependencies](#action-dependencies)
-   [Example: two-step room lookup](#example-two-step-room-lookup)
-   [Verb customization](#verb-customization)
-   [Best practices](#best-practices)
-   [1\. Clear descriptions](#1-clear-descriptions)
-   [2\. Realistic examples](#2-realistic-examples)
-   [3\. Test thoroughly](#3-test-thoroughly)
-   [4\. Use variables](#4-use-variables)
-   [5\. Handle errors](#5-handle-errors)
-   [Next steps](#next-steps)

[](/)

The AI platform built exclusively for professional AV. Build, deploy, and sell AI tools that understand your industry.

### Platform

-   What You Can Build
-   Templates
-   [Pricing](/pricing)

### Services

-   [Done-For-You](/pricing)
-   [Academy](/academy)
-   [Contact](/contact)

### Company

-   About
-   [The Signal](/blog)
-   [Docs](/docs)
-   [LinkedIn](#)

© 2026 AVCodex. A Future Ready Holdings Inc. product. SOC 2 Type II Certified · HIPAA Compliant