# Home

Welcome to your team’s developer platform

<h2 align="center">Delphi Help Center</h2>

<p align="center">Learn how to build, train, and share your digital mind</p>

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><h4><i class="fa-bolt">:bolt:</i></h4></td><td><strong>The Basics</strong></td><td>Everything you need to launch</td><td><a href="https://docs.delphi.ai/the-basics">https://docs.delphi.ai/the-basics</a></td><td></td></tr><tr><td><h4><i class="fa-brain">:brain:</i></h4></td><td><strong>Advanced</strong></td><td>Take your Delphi to the next level</td><td><a href="http://docs.delphi.ai/advanced">http://docs.delphi.ai/advanced</a></td><td></td></tr></tbody></table>

### Join a Live Webinar

See demos, learn tips from the team, and get your questions answered in real time.

<a href="https://luma.com/with_delphi" class="button primary" data-icon="calendar-check">See upcoming events</a>

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td><h4><i class="fa-comment-dots">:comment-dots:</i></h4></td><td><strong>Chat with a Delphi</strong></td><td>Learn how to chat with any Delphi</td><td><a href="/spaces/QrQFSyT66S3iBYDFX0ph/pages/gO1IcDTu9du47IyTiYaS">/spaces/QrQFSyT66S3iBYDFX0ph/pages/gO1IcDTu9du47IyTiYaS</a></td><td></td></tr></tbody></table>


# Chat with a Delphi

**What is Delphi?**

Delphi is a platform where creators, founders, coaches, and thought leaders build AI versions of themselves — called a Delphi — that you can have real conversations with anytime, day or night. It's not a chatbot; it's a digital mind trained on someone's actual knowledge, voice, and perspective. Think of it as having access to a person's brain on demand.

***

**Finding Someone to Talk To**

If you don't already have a link to someone's Delphi, head to [delphi.ai/explore](https://delphi.ai/explore) to browse the platform. The Explore page features a rotating spotlight of creators at the top, plus a full grid you can filter by category - Marketing, Tech, Health, Business, Life, and more.

If you already have someone's direct link, just paste it into your browser - each person's Delphi lives at `delphi.ai/[their handle]`. Their profile shows their name, bio, Mind Score \[link], and a set of suggested questions to help you get started.

***

**Text Messaging**

**How to chat**

On a Delphi profile, you'll see the person's bio and a set of suggested questions. Enter your first message in the input bar at the bottom of the screen to open the conversation. Type your message and hit Enter — their Delphi will respond in real time.

**Pinned and suggested questions**

Every Delphi profile may display suggested questions below the person's bio — these are questions the creator has highlighted as great conversation starters. Click any of them to send instantly.

**Attaching files**

In the chat interface, tap the **+** button to the left of the text input to attach a file. You can share documents or images and ask the Delphi questions about them.

**Starting a new conversation**

To start fresh with a Delphi you've chatted with before, click the plus icon in the top right corner.

**Voice**

Prefer to talk rather than type? Most Delphi’s supports voice calls. In the chat interface, click the green **Call** button in the bottom-right corner. You'll land on a dedicated call page — click **Start a call** to connect. During the call you'll see the Delphi's profile image, a live status indicator showing whether it's listening or speaking, a mute button, and a hang-up button. Note that voice calls may have a time limit — you'll see a countdown on screen so you know how much time you have left. These time limits reset at varying times depending on on the Delphi owner set them up.

**Viewing All Your Chats**

To see a history of every Delphi you've chatted with, you'll need to complete Delphi's quick onboarding. Once done, go to [studio.delphi.ai/conversations](https://studio.delphi.ai/) to access your full Conversations page.

The Conversations page has two tabs. The **Me** tab shows every Delphi you've talked to, listed by recency with a preview of your last message — click any conversation to pick up right where you left off.

***

**Want to Build Your Own Delphi?**

Now that you've experienced what it's like to talk to someone's digital mind, you can create one of your own. Whether you're a creator, entrepreneur, coach, or expert in anything, Delphi lets you scale your knowledge and stay accessible to your audience around the clock. Completing the onboarding is the first step — head to [delphi.ai](https://delphi.ai/) and click **Sign up** to get started.

***

**FAQ**

**Does the Delphi remember our conversations?**\
Yes — Delphi keeps memory of your past conversations with each person's Delphi, so over time it can reference things you've previously discussed and the experience feels more personal and continuous. Your full conversation history is visible in the Conversations page once you've completed onboarding.

**Are there limits to how much I can message or call?**\
Text messaging and voice call limits vary depending on the creator's settings.

**Can I delete a conversation?**\
At this time, conversations can't be deleted from your history. However, you can always start a new conversation with any Delphi whenever you'd like to begin fresh.


# Edit Your Profile

Your profile is your public-facing page on Delphi. It is the first thing visitors see when they come to talk to your Delphi. You can personalize your profile image, headline, bio, pinned questions, and social links to share your story and expertise.

### Editing Your Profile

Start by clicking the Edit button in the top right on your Profile.

Here you can update any of the following fields:

* **Organization and Role** - Your company or organization name and your title. Both are optional.
* **Headline** - A short tagline that introduces who you are.
* **Bio** - This can be a longer description about your story, your work, and your expertise. You can write anything you want here or click Generate Bio to have Delphi magically draft one for you.
* **Bio Highlights** - Draw attention to specific words or phrases in your bio by highlighting them and attaching suggested questions. When a visitor clicks a highlighted term, they'll see questions related to that topic.\
  \
  For example, if you include a hobby like "surfing," visitors can click it to see questions they can ask about surfing. This helps guide conversations toward topics that matter to you and create a better experience with your Delphi.\
  \
  To create a highlight, select a word or phrase while editing and click "Highlight". A popup will appear with suggested questions that you can edit, add to, or delete.
* **Pinned Questions** - These are conversation starters that appear below your bio. Use them to highlight your expertise and make it easy for people to ask the questions you’re most often asked. Click Add question to create a new one or the X icon to remove. You can have up to 5 pinned questions.
* **Social Links** - Add links to your favorite accounts like LinkedIn, your personal website, or other platforms so visitors can follow you wherever you’d like. Click **Add link** to add one or the X icon to remove.
* **Profile Video** - When this is turned on, your profile picture will animate with actions based on the information in your bio. You can toggle this on or off at any time based on your preference.

### FAQs

**How do I change my name?**\
Delphi requires you to use your real name. If you need to make a change, please contact support and provide proof of your name. Our team will review your request and update it if approved.

**Can I create a Profile for someone else?**\
With their consent, yes. Email <support@delphi.ai> and our team will guide you through the process.

**Why isn't the Generate Bio button working?**\
The Generate Bio feature uses the information you've uploaded to your Delphi's Knowledge to draft a bio. If your Knowledge is empty, your Delphi does not have enough information to generate one. Add some content and try again. If it still isn't working, it may need a moment to load. Please wait and try again later.

**How do I change my profile URL?**\
Your profile URL is based on your handle. Go to Settings > Change Handle to update it.

**Why can't I upload my new profile image?**\
Make sure the file is under 5MB and is in a JPG or PNG format.

**I deleted a highlight, how do I get it back?**\
Unfortunately deleted highlights are not saved. You will need to create the highlight again.

**How do I change my organization logo?**\
Unfortunately, it is not possible to update the logo.


# Add Content & Train Mind

To give your Delphi more topics to talk about and help it truly represent you, upload content to your Delphi's Knowledge. Your Knowledge is the foundation that powers your Delphi, and everything you add teaches it how to respond.

You can train your Delphi with documents, websites, social media accounts, and more.

Don't have much content? Read more about training mode below.

### How to Add Content&#x20;

Start by clicking the Knowledge button in the left side navigation and then press the Add Knowledge button in the top right corner. From there, you can easily upload any type of content to your Knowledge. Below is an overview of each type.

#### Suggested

Under the Suggested tab, you’ll find the most popular ways to add content to your Knowledge:

* **File:** Upload videos, audio files, documents, and more. Maximum 5GB per file.
* **Q\&A:** Quickly add answers to questions you’re often asked by typing the question and your response into the provided fields. If you have many to add at once, you can upload them in bulk using a CSV file.
* **YouTube Video:** Add any YouTube video by pasting the link.
* **Quick Note:** Capture a thought or idea your Delphi should know.
* **URL:** Add a single webpage by pasting the link.
* **Podcast Episode:** Search by episode name to add any podcast episode.

#### Accounts

In the Accounts tab, you can connect your social media account to automatically keep its content up to date.

Supported sources include your website, X (Twitter), Instagram, TikTok, Substack, YouTube channel, and Podcast series. Click on any in the list and follow the displayed instructions to add them.

#### Files & Notes

In the Files & Notes tab, you can connect files from the Google Drive, Notion, Granola, and Obsidian to automatically keep them up to date with any changes.

Click either option, select your files, and submit.

### Improve Your Delphi with Training Mode

Training Mode allows you to improve your Delphi just by talking to it. You can give feedback in plain language (like “be more concise” or “that’s wrong”), and your Delphi will offer helpful actions to apply your change.

#### How to use Training Mode

Start by opening a chat with your Delphi. Make sure the Training/Preview setting above the text input is set to Training. Then begin asking your questions.

If your Delphi gives an incorrect or uncertain response, you can improve it in one of two ways:

* Reply with a direct correction (for example, “That’s wrong” or “Instead, say…”), or
* Click the “Improve this response” button below the message.

Your Delphi will then prompt you to revise the response using a form. After submitting your changes, you can ask the question again, test the updated response, and continue refining it as needed.

### How to Manage Content

To manage your content navigate to the Knowledge tab in the left side menu.

Here you can organize, adjust settings, and delete all content you have added to your Delphi.

#### Organize Content

The best way to organize your content is by using folders. To create a folder, click the **+** icon in the top right corner of the Knowledge page.

There are three ways to add content to a folder:

1. **During upload:** When adding content in the Add to Mind popup, select a folder from the dropdown menu. The content will be added to that folder after training.
2. **Move a single item:** In the Knowledge tab, click on a piece of content to open the settings panel on the right. Use the folder dropdown to move it.
3. **Move multiple items:** On the Knowledge page, select the checkboxes next to multiple content items. A toolbar will appear in the bottom right. Click **Move**, then choose the folder from the dropdown to move them all at once.

#### Content Settings

There are a number of useful settings you can adjust on each piece of content (the availability of these settings varies based on the content type).

**Name:** Edit the title to make the content clearer and more descriptive.

**Context:** Add a short description explaining what the context is and why it matters. This helps your Delphi better understand how to use it.

**Author:** Keep this checked if the content is by or about you. If it’s external content, such as a book you recommend but did not write, uncheck this box.

**Citation URL:** If citations are enabled, visitors can click them in your Delphi’s responses to see the source. You can update the citation URL here or hide it entirely. For example, if you upload a book you wrote but don’t want to provide free access, you can link the citation to the Amazon listing instead.

#### Delete Content

If you no longer want a piece of content included in your Delphi’s Knowledge, you can delete it in two ways:

* **Single item:** On the Knowledge page, find the content item in the list. Click the ••• icon on the right side of the row, then select Delete from the menu.
* **Multiple items:** On the Knowledge page, select the checkboxes next to the content items you want to remove. A toolbar will appear in the bottom right. Click the trash can icon to delete them.

**How to Remove Synced Content or Accounts** On the Knowledge page, switch from the Content tab to the Feed tab. You’ll see a list of your connected feed sources. Click the ••• icon on the right side of the item, then select Delete from the menu.

### FAQ

**Why isn’t my website syncing?**\
Only publicly accessible pages can be synced. Pages that are password-protected, behind a login, or configured to block crawlers cannot be accessed and therefore won’t sync.

**Why can I not upload a certain file type?**\
Delphi supports PDF, DOC, DOCX, TXT, and other common formats. For unsupported file types, copy and paste the text directly as a Q\&A or plain text entry.

**Why is my Instagram or YouTube content is not syncing?**\
Make sure your account is public and connected properly under the Feeds tab. Reconnecting the integration sometimes resolves sync issues.

**If I delete a synced feed, will it delete the content it previously uploaded?**\
No, deleting a feed won't remove any previously uploaded content. To delete that content, remove the content from the Knowledge page.

**If I delete a folder that was created from a synced feed - will this also delete an associated feed?**\
Yes, the folder and its contents will be permanently deleted; any linked sync feeds will also be removed.

**How do I filter my content?**\
You can filter your content using the filter buttons.


# Voice Calling

Voice Calling lets your audience call your Delphi and have a real-time conversation using a cloned version of your voice. Callers visit your public profile and click the Call button to connect. Your Delphi responds live, just like a phone call.

Voice Calling is separate from text chat. It requires a voice sample to be uploaded so Delphi can clone your voice.

### How to set up Voice Calling

{% hint style="info" %}
*If you are on the Scaler plan or have purchased Pro Voice, your requirements will be different. You can read the full details* [*here*](https://docs.delphi.ai/advanced)*.*
{% endhint %}

Go to the Voice page from the Settings tab on the left-side bar.

Next, upload a 10-second recording of your voice speaking in a natural, conversational tone. You can either upload an existing audio file or record directly by clicking Start Recording. For best results, record in a quiet environment and speak clearly.

Once you’re done, go to your Profile and click the Call button to call yourself and test it.

#### Custom Pronunciations

No problem. You can easily teach Delphi how to say it correctly.

Go to the Voice page and click the gear icon in the top right. Scroll down to Custom Pronunciations and click Open.

Type the word or name that’s being said wrong. Then enter how it should sound. You can use CMU Arpabet, or you can simply spell it out the way it sounds, like DEL-fy for Delphi. This is called a phonetic spelling.

Save it and press the play button to hear it.

It may take a few tries to get it just right, so feel free to adjust and test it. Also, acronyms are not always pronounced reliably, so you may need to add custom pronunciations for those too.

### FAQ

**Should I upload more than one voice sample?**\
No. If you want to upload a new sample, delete your current one first, then upload the new one.

**How can I get a Pro Voice?**\
You can sign up for Pro Voice for $150 per month on the Settings page, or get it as part of the Scaler tier.

**How do I edit my voice settings?**\
Click the settings icon to adjust the speed and choose between two voice models.

**If I upload a recording longer than 10 seconds, will it be used?**\
Only the first 10 seconds will be used.

**My voice is pronouncing my name wrong, what can I do?**\
Open Custom Pronunciations under Voice Settings.

**My voice doesn’t sound like me, what can I do?**\
Try deleting the current uploaded voice and uploading a new 10 second clip. Adjust the Voice settings options until it feels like your voice.

**What’s the best way to test my Voice?**\
Navigate to the Profile page and have a call with your Delphi.

**How long should my voice recording be?**\
If you are on Free or Builder plan you only need 10 seconds of audio. If you purchased the Pro Voice add-on or are on the Scaler or Immortal plan you'll need a minimum of 30 minutes or 3 hours for best results.


# Audience, Conversations, Insights & Analytics

Once you start sharing your Delphi, you’ll begin to see activity from people who chat with it. To keep track of everything, there are three main pages you should check: Audience, Conversations, Insights & Analytics. These pages help you see who is interacting with your Delphi, what they’re saying, and how it’s performing.

### Audience

The Audience page is your member directory. It shows everyone who has interacted with your Delphi, along with helpful details like message count, tags, last active date, and individual usage. This is where you can add new members, manage access, and filter your list.

You can find the page from the left-side navigation menu.

At the top of the page, you can see your full member list and how many contact slots you’re using, such as 10 of 10,000 contacts used.

When you click on a person’s name, a side panel opens with more details. You can view all of their past conversations with your Delphi, see their contact information and saved conversation memory, and check their monthly message and call usage, including when it resets.

You can invite new members by email or upload up to 1,000 contacts at once using a CSV file. If you’re on the Scaler tier, you can also sync Delphi contacts directly to your CRM.

To quickly find specific people, use the filter bar to sort by tags, status, access group, SMS, messages, or last interaction.

### Conversations

You can find the Conversations page by clicking the chat bubble icon on the left side navigation. This page shows every chat your Delphi has had with users. It helps you understand what people are asking and how your Delphi is responding.

*At the top of the page, make sure you are on the My Delphi tab, not the Me tab. The My Delphi tab shows conversations your audience has had with your Delphi.*

You’ll see a list of conversations on the left side. Click on any one to open the full chat and read the entire thread.

If a message includes citations, you can click on them to see the sources that were used to create the response.

As you review conversations, you may notice ways your Delphi could improve. If you want to update a response, right click the answer and select “Edit This Answer.” This will open a popup where you can revise the response for next time.

When you save your changes, the revision is stored as a Q\&A content item in your Mind.

You can also continue improving your Delphi by adding more content to its knowledge or by using Training Mode to teach it in more detail.

### Insights & Analytics

You can find the Insights page from the left-side navigation menu by clicking the Insights tab.

When you open the page, you’ll see your Mind Score and a small Analytics summary showing recent activity, such as Active Visitors, Total Messages, and Average Session Duration for the last 30 days.

This page helps you understand how often people are using your Delphi and how engagement is growing over time.

### FAQ

**How do I revoke someone's access?**\
Open the member's profile in your Audience list, then click the Revoke Access button in their side panel.

**How can I export my audience list?**\
You can't export audience lists directly. If you're on the Scaler tier or above, you can sync with your CRM instead.

**I can't see a user I invited in my Audience. Where are they?**\
Make sure the Status filter is set to "Invited."

**Can I customize my Analytics dashboard?**\
No, but you can filter by different time frames.

**How do I filter my Audience by Tags or Groups?**\
Use the filter buttons at the top of the page.

**How do I add a Tag?**\
Select one or more checkboxes next to the relevant audience member's name, then click Edit Tags at the bottom of the page and apply the tag.

**How do I create a Tag?**\
Select a checkbox, click Edit Tags at the bottom of the page, then choose the option to create a new tag in the popup.

**How do I edit an audience member's Group?**\
Select one or more checkboxes next to the relevant audience member's name, click Edit Access Group at the bottom of the page, and assign them to Insider or Public.


# Settings

You can find the Settings page by clicking  Settings in the left-side navigation. This page is where you manage your voice and response settings, and account, team, plan, and billing information.

#### Preferences

In Preferences, you can:&#x20;

* Manage your notifications and choose whether you receive product update emails.
* Change your handle
* Control your visibility, such as whether your Delphi is public or private
* Manage SSO settings (Immortal Tier Only)&#x20;

> Public Delphi's are discoverable via Delphi.ai
>
> Private Delphi's are only able to be accessed via integration, embed, or adding users to your audience&#x20;

{% hint style="info" %}
The *share conversation* option is only avaiable if your Delphi is public&#x20;
{% endhint %}

#### Configuration <a href="#h_cdfe2986d2" id="h_cdfe2986d2"></a>

* Edit response settings to change the way your Delphi replies
* Create/edit your voice clone
* Get a sharable link to share your Delphi with others in
  * Email signature
  * Calendly Event descriptions
  * Slack profile
  * GitHub profile
  * iPhone contact card
  * YouTube channel
  * Instagram bio
  * LinkedIn profile
  * X (Twitter) bio
  * Linktree

#### Billing

Under Billing, click Plan to view and manage your subscription.

* At the top, you’ll see your current plan and whether you have any upcoming payments. You can click Manage to make changes to your subscription. You can press Downgrade to move your subscription to cancel your current subscription and move to Free tier.
* In the Usage section, you can track how much of your plan you’ve used, including word count, actions, collaborators, web embeds, and products. Some features may be unlimited depending on your plan.
* You can also explore available add-ons, such as Pro Voice, an SMS number, or a Built-For-You setup. Each add-on shows pricing and lets you purchase or request access.
* You can update your payment method.
* You can view previous invoices.

#### Access

Under Access, you can manage your team.

* The Team page shows everyone who has access to your Delphi and their role. The Creator is the owner of the Delphi. Collaborators can help manage and improve it. If someone has been invited but hasn’t accepted yet, their status will show as Pending. Collaborators are available on Builder (1), Scaler (3) and Immortal (unlimited).
* You can invite new team members by clicking Add and entering their email address. You can also update roles or change email if needed.

#### Referral Program&#x20;

You can also join the Referral Program from the Settings page.

Invite other experts, creators, or friends to build their digital mind. When someone signs up using your referral, you earn 30% of their monthly subscription for 24 months.

This is a simple way to share Delphi and earn recurring rewards.

#### Logout

At the bottom of the page, you can log out of your account.

### FAQs

**How do I make my Delphi public?**\
Go to Settings and click Visibility. Switch it to Public and save.

**Why am I not getting notification emails?**\
Go to Settings > Notifications and check your settings. Also check your spam folder.

**How do I change my email?**\
Visit Settings > Change Email and then follow the steps to verify the change.

**How do I cancel my subscription?**\
Go to Settings > Plan to cancel or change your subscription. You can press the downgrade button to move to the free plan

**How do I see what plan I am on?**\
Go to Settings > Plan. Your plan and what it includes are shown there.

**What happens to my subscription when I transfer ownership?**\
Your current subscription will end, and the new owner will need to activate their own to take over the Delphi.

**How do you know I referred someone to Delphi?**\
You can invite them by entering their email address, or you can share your unique Delphi referral URL.

**A member of my team recently departed and I no longer want to have collaborator access can I remove them?**\
Yes you can remove any of your collaborators at any time on the Team tab.


# Data, Privacy, & Security

Your Knowledge, Your Control

At Delphi, protecting your data is foundational to how we build and operate our platform. This page provides a high-level overview of our practices. For the full legal details, please refer to our [Terms of Use](https://www.delphi.ai/terms), [Creator Terms of Use](https://www.delphi.ai/terms-creator), [Privacy Policy](https://www.delphi.ai/privacy), and [Biometric Consent](https://www.delphi.ai/biometric-consent).

#### Content Ownership

You maintain full ownership of all content you upload to create your Digital Mind. Your intellectual property remains exclusively yours. Creator content is stored in its own private index and is not shared or used to train any external models.

#### **Data Protection Measures**

* **Encryption:** When data travels over the internet (e.g., when you log in or send a message), we encrypt it using TLS 1.2+. All stored customer data is locked and encrypted.
* **Daily Backups:** We save copies of our data every night, so if anything goes wrong, we can restore lost information.
* **Private Subnet (Data Isolation):** Customer data is processed in a private, separate section of our cloud environment that cannot be accessed by the public internet.
* **DDoS Protection (Defending Against Attacks):** We use Cloudflare and AWS Shield to protect against attacks that use excessive traffic.
* **Web Application Firewall (WAF):** This system monitors and blocks harmful internet traffic, preventing threats before they reach our platform.

**Monitoring and Compliance**

* **Automated Security Monitoring:** We use tools like [Sentry.io](http://Sentry.io), Axiom, and Logfire to continuously check our system’s health. If anything unusual happens, an alert is sent to our security team immediately.
* **Audit Logs:** Every action in our system is recorded using AWS CloudTrail, ensuring a clear record of who accessed what, when, and why.

**Application Security:**&#x20;

* **Penetration Testing:** Delphi has yearly penetration tests to ensure our security standards. If any weaknesses are found by expert security testers, they are fixed immediately.
* **Vulnerability Scanning:** We use tools like Snyk and AWS GuardDuty to scan for weaknesses in our system and update any outdated security measures before they become a risk.

**Secure Access and Identity Protection**

* **Role-Based Access Control (RBAC):** Employees and system users only get access to the data they need.
* **Credential Management (Protecting Passwords and Secrets):** We use AWS Key Management Service (KMS) and 1Password to securely store passwords and secret access keys, ensuring they’re encrypted and only accessible to authorized people

#### Biometric Data

When Creators upload audio or video recordings to generate their Digital Mind, Delphi may derive limited biometric information (such as voiceprints) from that content. Full details are in our [Biometric Consent](https://www.delphi.ai/biometric-consent) Form.&#x20;

#### Incident Response

If a security event occurs, we follow a structured protocol:

* **Incident Response Plan:** Our team follows a defined process to detect, analyze, and respond to security issues immediately.
* **Root Cause Analysis (Preventing Recurrence):** After any security event, we investigate what caused it and take steps to ensure it doesn't happen again.

#### Further Rights

Depending on where you live, you may have rights to access, correct, delete your personal data. EU/UK residents have additional rights under GDPR. For full details on what rights apply to you and how to exercise them, see our [Privacy Policy](https://www.delphi.ai/privacy).

*For any questions related to privacy or security, please reach out to* [*support@delphi.ai*](mailto:support@delphi.ai)


# Common FAQs

Common Questions about your Delphi

## FAQs for Dara’s Delphi Training

### Access Groups

**Can an external webhook control access groups?**

Unfortunately, this isn't possible. If you want more customized options, you can sign up for our Immortal tier at <immortal@delphi.ai>

**What is the difference between access groups and usage limits?**

They work together. **Access groups** are named tiers like "Just Me," "Insider," "Public," and "Anonymous." **Usage limits** are the number of messages that can be sent within each access group.

### Free Tier

**I couldn't sign up with \[insert] country for Free Tier - what can I do?**

At present Free tier sign-ups are limited to those based in Canada, UK and the US. All other countries can sign up for a paid subscription.

**Can I move to the Free Tier and keep all my data?**

Unfortunately, we're not able to pause all of Delphi's features without an active subscription at this time. You can switch to the Free tier and build your Advanced features back up later if you decide to return.

**How do I move to the Free Tier?**

You can move to the Free Tier by navigating to the left side of the screen ... > Settings > Billing (Plan) > Downgrade. Please let us know if you have any feedback on why you are downgrading.

### Immortal

**I couldn't sign up with \[insert] country for Free Tier - what can I do?**

At present Free tier sign-ups are limited to those based in Canada, UK and the US. All other countries can sign up for a paid subscription.

**Can I get API access?**

API access is available on the Immortal tier. If you're currently on this tier, reach out to your Account Manager for assistance. If you're on a different tier, API access is reserved exclusively for Immortal subscribers.

### Integrations

**Can I link to Zapier?**

We don't have a direct Zapier integration, but you can set up an Action with an API webhook (like Zapier) to send information about the conversation.

**Can I embed on Skool?**

Unfortunately, Skool doesn't currently support standard embeds. However, you can share the link to your Delphi profile and invite users to the Insiders Access Group/Usage Limits so they can access the full Delphi experience.

To do this, navigate to **Audience > Add Users**. Once the users are added, remove any filters (such as Active or Invited), check the box next to their name, click **Edit Access Group** at the bottom of the page, and assign them to the **Insiders Access Group.**

I'm sorry there isn't a direct integration available at the moment. If Skool introduces standard embedding in the future, this should become possible.

**Getting an Error on my Embed?**

Embeds are case-sensitive - ensure when you are listing your domain that the website is listed in all lower case.

**Why does my embed/Integration look different from my Delphi URL?**

Embeds will not show your bio in the same way the Profile page does on the direct Delphi URL.

### Response Settings

**I have the correct name on my Delphi but it's introducing itself with the wrong name?**

Check the Initial Message by going to **Settings > Response Settings** and updating the Initial Message.

### Miscellaneous

**Will my Delphi automatically pull content in from Thinkific, Kajabi, Uscreen, or Mighty Networks?**

No - you will need to upload the content manually.

### Monetizing

**When my users hit their message limit, how can I prompt them to upgrade to my paid offering?**

A: Monetization isn't built into Delphi, but you can set up your own. Here are two approaches to prompt users to upgrade:

#### Option 1: Set Expectations Upfront (Recommended)

Include the upgrade link directly in the **initial message for this specific embed**. This sets clear expectations from the start.

For example:

> "Just a heads up: you have **10 free messages** here. Want **unlimited access**? Sign up at **\[your link]** and come right back to continue."

This way, users see the upgrade path immediately.

#### Option 2: Use an Action

You can also set this up as an **Action** triggered by message count. Keep in mind that Actions apply **globally** across your entire Delphi experience, not just one embed.

A sample message could be:

> "You've sent 9 messages. If you're on a paid plan, feel free to continue. If you're on the free tier, upgrade here for unlimited access: \[your link]"

### Name

**Can I update my name?**

Your name must reflect your real first name and last name. If you are creating a Delphi for another person and would like to update the name please have them send an email giving clear permission.

### Onboarding

### Profile

**I have the correct name on my Delphi but it's introducing itself with the wrong name?**

Check the Initial Message by going to **Settings > Response Settings** and updating the Initial Message.

### Sales

Could you please share available time slots or a calendar link to book a call?

If you'd like to discuss purchasing a Built-for-You or Immortal package please email <immortal@delphi.ai>

### Voice

**I've added a custom pronunciation and it's still not working.**

A: First, make sure you're adding Custom Pronunciations only in Voice > Settings > Custom Pronunciations, this is the only place they'll work. Second, try updating your initial message (you can change it back afterward, but it needs to be refreshed to apply the pronunciation update). Note: if you've updated your voice sample, you'll need to re-add your custom pronunciations.gain.

**Can users speak to a Delphi in any language even if the Pro Voice model was trained in only one language?**

A: Yes - it can reply in up to 40 languages.


# Pro Voice

{% hint style="info" %}
Note this feature is reserved for Delphis on the Scaler, and Immortal tiers. Free and Builder Delphis that would like to use Pro Voice will need to upgrade or purchase as an add-on.
{% endhint %}

### What is Pro Voice?

Pro Voice is a premium add-on that gives your Delphi a cloned version of your voice for real-time calls. Once set up, your audience can call your Delphi from your public profile and have a natural, live conversation that sounds like you.

### How to set up Pro Voice

#### Step 1: Send your audio to Delphi

Email your voice recording to [**support@delphi.ai**](mailto:support@delphi.ai). You have two options:

**Option A: Send an existing recording** - Podcast episodes, YouTube videos, or any other audio or video where you are speaking clearly work great. The longer and higher quality, the better.

**Option B: Record something new** - If you do not have an existing recording, follow the Audio Recording Specifications below.

#### Step 2: Delphi builds your voice clone

Once the Delphi team receives your audio, they will process it and set up your voice clone. You will be notified when it is ready.

#### Step 3: Call yourself

Once it is done, go to your Profile and click the Call button to call yourself and test it.

***

## **Audio Recording Specifications**

To ensure the best possible voice clone for Pro Voice, please adhere to the following specifications when gathering audio:

### **Recording Length**

The duration of the audio recording is crucial for capturing a comprehensive vocal profile.

* **30 minutes:** This is a good minimum length.
* **1 hour:** This is better and provides more data.
* **2 hours:** This is ideal and will allow for the most accurate and nuanced voice clone.

### **Recording Style**

The nature of the recording should reflect natural conversational speech.

* **Conversation/Interview:** The recording should ideally capture *only* your side of a back-and-forth conversation, similar to an interview. This allows us to understand their natural speaking patterns, intonation, and rhythm in a dynamic exchange, without the other person's voice.
* **Avoid:**
  * Speeches
  * Readings
  * Memorized lines
  * Recordings of simply talking in an attempt to generate a clip

These types of recordings often lack the natural conversational flow, which can result in a voice clone that sounds "off" or unnatural. If this is all you have it can still be great.

### **Speaking Tone**

The client should be speaking in their normal, everyday voice.

* **Normal Speech:** The recording should capture the client speaking normally, without any exaggerated or specific emotions in their tone.
* **Avoid:** Recordings where the client is speaking in a strange context or with a heightened emotional tone, as this can lead to an unrepresentative voice clone.

### **Audio Quality**

Clean audio is essential for accurate voice cloning.

* **Clean Audio:** Please ensure the audio is as clean as possible. This includes removing or minimizing:
  * Room echo
  * Random noises
  * Audio glitches
  * Background chatter from other people
* **Audio Cleaning:** You are encouraged to clean the audio if necessary to remove any unwanted disturbances.
* **Professional Equipment:** For the best voice clone quality, use professional recording equipment to minimize background noise, echoes, and other audio disturbances, ensuring a cleaner and more accurate vocal profile..

### **Authenticity**

Preserve natural speech patterns.

* **Do Not Cut Out Authenticity:** It is important to retain natural speech elements that contribute to an authentic voice. Avoid editing out disfluencies such as "uh," "um," pauses, and other natural conversational fillers or hesitations to maintain the authentic flow of speech.

These elements are vital for capturing the true cadence and personality of the client's voice.

### FAQs

**How can I train my Pro Voice?**\
Contact <support@delphi.ai> and we'll train your Pro Voice for you.

**Can I purchase Pro Voice if I'm on Builder?**\
Yes. Pro Voice is available as a $150/month add-on for Builder and is included in Scaler.

**Can I use a podcast recording to train my Pro Voice?**\
Yes, you can use pre-recorded content. However, we can only accept recordings where you're the only speaker—other voices will result in poor training.

**How do I update my voice clone with a new recording?**\
Email <support@delphi.ai> with your new audio file and ask them to update your voice clone.

**Why is my Delphi still mispronouncing my name even though I trained a Pro Voice?**\
You can set custom pronunciations in the Voice settings on your Voice page.


# Integrations

{% hint style="info" %}
This feature is reserved for Delphis on the Builder, Scaler, and Immortal tiers. Free Delphis that would like to use these integrations will need to upgrade.
{% endhint %}

Integrations let you connect your Delphi to other platforms so your audience can access it wherever they are. You can embed your Delphi on your website, connect it to a learning platform like Kajabi or Thinkific, or set it up as a Telegram bot or SMS number.

To access them go to the Integrations page from the left-side navigation menu.

### Available integrations

Integrations are organized into three tabs: All Integrations, Learning Platforms, and Messaging & Community.

**Website integrations:**

* **Your own website** - Embed your Delphi as a chat widget on any website using a code snippet.

**Learning platforms:**

* **Kajabi** - Add your Delphi to your Kajabi course or community.
* **Thinkific** - Embed your Delphi inside your Thinkific course.
* **Mighty Networks** - Add your Delphi to your Mighty community.
* **Substack** - Embed your Delphi to your Substack publication.

**Messaging and community:**

* **SMS** - Give your Delphi a phone number. People can text it directly. (This is for the Immortal Tier Only)
* **Telegram** - Create a Telegram bot powered by your Delphi. (This is for the Scaler and Immortal Tiers Only)
* **Slack** - Connect your Delphi to a Slack workspace.&#x20;

Click on any of the integrations and follow the on screen instructions to set it up.

***

### FAQs

**How can I set different behavior for different pages of my site?**\
Create separate embeds for different domains or pages and customize the Behavior tab for each. Use a unique link path for each embed, reusing a path will trigger an error.

**Why isn't the Chat Bubble appearing on my site?**\
Make sure you copied the Chat Bubble snippet from Step 2 of the Installation Guide, not just the main embed snippet. Paste it before the `</body>` tag on every page where you want it to appear.

**My Slack integration is pending approval, is this normal?**\
Yes. Our team reviews applications and approves them within 48 hours.

**How many integrations can I set up?**\
Builder offers 2 Integrations. Scaler offers 10 Integrations

**What happens if I don't customize the Behavior section?**\
If you don't customize the Behavior settings, your integration will use your main Delphi settings by default.

**I want to embed my Delphi on another platform that I use for paid subscribers, do I need to add all of these users to the Insiders Group?**\
No. In the Integration Settings, click the Configuration tab and toggle off **Enforce Usage Limits**.

**What if I want everyone accessing a specific integration to have access to Insider Content?**\
Toggle on Grant Insider Access. Everyone who uses the integration will be added to the Insider Group.

**Where can I embed my Delphi?**\
Our embed code is standard and works across most sites, please note some platforms have restrictions on embedding.

**Can I remove the Delphi branding from my website embed?**\
Yes, if you're on the Scaler tier. Go to the Style tab in the Integration Settings.

**My integration is showing "Configuration Not Found" -what can I do?**\
This error appears when the correct domain isn't added to the Website Domain field in your integration settings. Make sure you've entered the right domain.


# Broadcasts

{% hint style="info" %}
Note this feature is reserved for Delphis on the Builder, Scaler, and Immortal tiers. Free Delphis that would like to use Broadcasts will need to upgrade.
{% endhint %}

Broadcasts let you send a message from your Delphi directly to members of your audience. It is a great way to proactively reach out, share updates, or start conversations. Each broadcast can be sent to your full audience or a filtered segment.

To access them go to the Broadcasts page from the left-side navigation menu.

### How to create and send a Broadcast

**Name** - Give your broadcast an internal name so you can identify it later.\
**Message** - Write the message your Delphi will send to recipients. This is the opening message that starts the conversation.\
**Recipients** - Choose who receives the broadcast. You can send to your full audience or filter by tags, access group, or other criteria.\
**Schedule** - Choose to send it immediately or schedule it for a future time.

Review your settings and click Send (or Schedule if sending later).

### How to read Broadcast results

Once a broadcast is sent, it appears in your Broadcasts list with the following columns:

* **Name** - the internal name you gave the broadcast
* **Progress** - a visual indicator of delivery progress
* **Recipients** - the number of people it was sent to
* **Status** - shows as Sent, Draft, or Scheduled

Click on a broadcast to see more details about delivery and engagement.

### FAQs

**Why didn't some users get my broadcast?**\
Make sure the users you're sending to have a working email or phone number. Also check if they have enough messages left in their limit.

**Why don't I see any replies after I sent my broadcast?**\
When users reply to your broadcast, those conversations will show up on your Conversations page. Look for new conversations that started around when you sent the broadcast.

**How do I delete a broadcast?**\
Click the ••• button next to the broadcast and choose delete.

**How do I send an SMS broadcast?**\
This feature costs extra and is only available on the Immortal plan. Email <immortal@delphi.ai> to learn more.


# Products

{% hint style="info" %}
Note this feature is reserved for Delphis on the Builder, Scaler, and Immortal tiers. Free Delphis that would like to use Products will need to upgrade.
{% endhint %}

Products let you recommend affiliate products, services, or offerings directly within your Delphi conversations. When a relevant topic comes up in chat, your Delphi can mention the product and share a link. This is a great way to drive traffic to your recommendations without needing to intervene manually.

To access them go to the Products page from the left-side navigation menu.

### How to add a Product

1. Click Add Product in the top right corner.
2. Fill in the product details:

**Product Image** - Upload an image to represent the product. Click the image placeholder and the + button to add one.

**Product Name** - The name of the product or service you are recommending.

**Link** - The URL where users can find or purchase the product (for example, <https://www.website.com/product>).

**Description** - A short explanation of what the product is and why you recommend it.

**Keywords** - Words or phrases that should trigger this product to be mentioned. Click the + button to add keywords. For example, if your product is a meal planning guide, add keywords like "meal prep," "nutrition," and "diet."

**When to promote** - Choose how often Delphi mentions the product:

* **Every Mention** - Delphi recommends the product every time a relevant keyword comes up.
* **Once Per User** - Delphi mentions it only once per unique user, even if the topic comes up again.
* **Once Per Conversation** - Delphi mentions it once per conversation session.

### How to manage Products

Your Products list shows each product with its name, number of mentions, and an enable/disable toggle. Use the toggle to turn a product on or off without deleting it. Click the ••• menu on any product to edit or delete it.

The header shows how many products you have created out of your plan limit (for example, "0 of 5 products used").

You can also click Import to bulk-import products from a file.

### FAQs

**Why is my product not being mentioned in conversations?**\
Make sure the product is toggled on (enabled). Also review your keywords. If they are too narrow or misspelled, they may not be triggering. Try adding more keyword variations.

**How can I stop my product being mentioned so often?**\
Change the When to promote setting from "Every Mention" to "Once Per User" or "Once Per Conversation" to reduce frequency.

**How can I see how often my Product has been mentioned?**\
This is listed under Mentions on the Products page.

**I don’t have any physical Products for sale, should I use the Products page?**\
Yes! The Products page is a great way to seamlessly introduce links to any offering you have e.g. coaching, meeting booking link, events.

**How many Products can I add?**\
Builder offers 5 Products. Scaler offers 20 Products.


# Integrations Usage Limits

{% hint style="info" %}
Note this feature is reserved for Delphis on the Builder, Scaler, and Immortal tiers. Free Delphis that would like to use Usage Limits will need to upgrade.
{% endhint %}

### What are Usage Limits?

Integration Usage Limits let you control how many messages and call minutes each segment of your audience can use per month.&#x20;

All Public Delphi's are discoverable and adhere to Delphi's Platform Limits for a unified visitor experience.

### How audience groups work

Your audience is divided into four groups by default:\
**Just Me** - You and any collaborators on your account. Always set to Unlimited.\
**Insiders** - Members who have been personally invited and have a Delphi account.\
**Public** - Users who have logged in using their email.\
**Anonymous** - Visitors who chat without logging in or creating an account.

### How to edit a group's limits

1. Click the ••• menu on the group you want to edit.
2. In the edit modal, set the following:

**Messages** - Choose Limited and enter a monthly allowance (for example, 10), or choose Unlimited to remove the cap.

**Voice Minutes** - Choose Limited and enter a monthly minute allowance, Unlimited, or Disabled to turn off voice calling for that group entirely.

Limits reset on the same day each month (shown in each member's Usage tab).

### How to edit a group's access to content

Start by visiting the Knowledge page from the left-side navigation menu (click ••• → Knowledge).

Then click on the content item you’d like to control access to. Scroll down to the ‘Access Groups’ dropdown and select the group that should have access to it.

### FAQs

**Why can't Anonymous Users chat with my Delphi?**\
By default, Anonymous is set to 0 messages. Go to Usage Limits, edit the Anonymous group, and increase the message allowance to allow anonymous visitors to chat.

**Can I create new Groups?**\
The four default groups (Just Me, Insiders, Public, Anonymous) are the current options. Custom group creation beyond these is not available at this time.

**Can I add more members of my team to the "Just Me" Group?**\
The "Just Me" Group is just for you and your collaborators.

**How can I give a specific user unlimited access?**\
Invite them to your Insiders group, which defaults to Unlimited. You can invite members by going to Audience > Add Users > Invite by email and assigning them to Insiders.

**How do I give some users unlimited access and others limited access?**\
Move trusted users to the Insiders group (which defaults to Unlimited) and set a limited allowance for the Public group.

**If I want some users to have Unlimited Access and others to have limits, how do I set this up?**\
Move trusted users to the Insiders group (which defaults to Unlimited) and keep the Public group at a limited allowance.

**Do all Groups have distinct content?**\
The Just Me Group will have access to content assigned to Just Me, Insiders and Public. The Insiders Group will have access to content assigned to Insiders and Public. The Public and Anonymous Groups will have access to content assigned to Public.

**Can I assign different content to Anonymous and Public Groups?**\
No - these Groups will share the same content.


# Response Settings

{% hint style="warning" %}
Most people never need to touch Response Settings.

Delphi already does a lot behind the scenes to automatically match your purpose and style. When you edit Response Settings, you are overriding that.

Only change these settings if you are trying to fix something specific. If you do make changes, do it thoughtfully and iterate. Small edits, then test, then adjust. Poorly written settings can degrade the experience for visitors.
{% endhint %}

### What Response Settings Do

Response Settings define how your Delphi shows up in conversation.

To access it, go to **Settings** from the left-side navigation menu, then open **Response Settings**.

### The Settings

**Purpose**\
Purpose is the intention you want your Delphi to drive toward across conversations. Good Purposes are specific and practical. They should reflect why people come to your profile.

Examples:

* “Help visitors understand your point of view quickly, using your content.”
* “Help visitors apply your framework to their situation.”

**Custom Instructions**\
Custom Instructions are your hard rules.

Save these for instructions that are extremely important and not reliably followed when included in Purpose.

Keep them minimal. We suggest a maximum of three. The more you add, the more their power gets diluted.

**Style**\
Style is how your Delphi writes.

Use this to set tone and format. For example, short paragraphs, a direct voice, or a more conversational style.

**Initial Message**\
The Initial Message is the first message your Delphi sends when someone opens the chat.

Use it to set expectations and suggest what a visitor can ask.

**Message on No Answer**\
This is what your Delphi says when it does not have enough information to answer.

Use it to suggest a different question the visitor can ask.

**Response Length**\
How long your Delphis’ responses should be.

* Intelligent means Delphi chooses the best length for the question.
* Concise means it stays short and to the point.
* Explanatory means it goes deeper and more comprehensive.
* Custom lets you pick a midpoint.

**Creativity**\
How strictly your Delphi should adhere to your uploaded content.

* Strict means it only says things it is trained on that directly answer the question.
* Adaptive means it can infer how you might answer new situations based on your training data.
* Creative means it can augment responses with outside knowledge.

**Show citations**\
Toggles whether visitors can open the cited sources used to generate a response.

**Disclaimer**\
A message shown at the top of your Delphi profile page, that can be dismissed by the user.

**Recency Bias (Always On)**\
Prioritizes ideas and information from your most recent content.

***

### Response Settings best practices

#### **Use simple and precise language**

Bad example (vague):\
“Be professional but also friendly, and keep things engaging.”

Good example:\
“Be direct and warm. Use plain language. Avoid hype. Avoid filler. If you are unsure, say what you know and what you do not know.”

***

#### **Create separate, focused rules**

One behavior per rule. If you find yourself using "and", split it.

Bad example (bundled):\
“Be friendly, ask clarifying questions, and solve every problem in the world.”

Good example (split):

* Tone: “Write like a smart operator. Direct, calm, and human.”
* Clarification: “If a key detail is missing, ask exactly one question.”

***

#### **Address the Delphi as “you”**

Bad:\
“My Delphi should ask clarifying questions.”

Good:\
“If a key detail is missing, you ask exactly one clarifying question before answering.”

***

#### **Give complete instructions**

Bad:\
“When someone is vague.”

Good:\
“When a visitor is vague, ask one clarifying question that would change your answer.”

***

#### **Offer an alternative**

If you forbid something, say what to do instead.

Bad:\
“Do not be vague.”

Good:\
“Do not be vague. If you cannot answer specifically, say what information is missing and ask for it.”

***

#### **Avoid contradictions**

Conflicting rules create unpredictable behavior. Delete or rewrite until there is one clear default.

Example conflict:

* “Always ask follow-up questions.”
* “Never ask follow-up questions.”

Pick one default, and then add a single exception if needed.

***

#### **Use emphasis sparingly**

Use emphasis only for product experience details you genuinely want to force.

Examples:

* “IMPORTANT: Keep answers in short paragraphs.”
* “IMPORTANT: Ask at most one question.”
* “IMPORTANT: Do not use bullet points unless the visitor asked for a list.”

#### **Continuously refine**

Think of Response Settings as an ongoing process. Start with essential instructions and improve them over time based on real interactions.

### FAQs

**My Delphi sounds great, do I have to adjust the Response Settings?**\
No. Response Settings are optional. Only edit them if needed.

**Why isn't my Delphi following Custom Instructions?**\
Make sure you've used simple language and that your Custom Instructions don't contradict each other or the Purpose section.

**Where can I add guardrails to my Delphi?**\
Add them in the Custom Instructions section. We recommend keeping the number of Custom Instructions small for better results.

**How do I set up a Disclaimer Message?**\
This can be set up under the Integrations setting only. Profiles do not support Disclaimer Messages.

**I can't find the Response Settings, where do I access them?**\
Go to **Settings** from the left-side navigation menu, then open **Response Settings**.

**Why is my Delphi talking about topics its not trained on?**\
Check your creativity settings and set to strict for your Delphi to only say things it is trained on that directly answers the question.


# Mind Score

*Your Mind Score measures how much your Delphi knows, and how well it knows it.*

It doesn't measure how long your uploads are. It measures how many different things your Delphi can speak to, and how confidently it can go deep on each one. Think of it as your Delphi's intellectual range within your world of expertise.

It's not about word count. It's about breadth and depth.

***

**Quick Optimizations to Check First**

Before you start uploading everything you have, make sure you're building in the right direction:

* **Find your score** - Your Mind Score lives on your profile, directly under your name. Check it now so you have a baseline before you start adding material.
* **Start with what you know best** - Your core expertise should be the foundation. If your Delphi doesn't have a strong grasp of your primary topic yet, start there before branching anywhere else.
* **Look for the natural edges of your expertise** - The goal isn't to add random new topics. It's to follow the threads that already live at the edges of what you teach. The adjacent ideas, the supporting concepts, the context that makes your core work make more sense.

***

**How to Execute**

There are three ways to grow your Mind Score:

* **Add depth to what you already cover** - If your Delphi knows your main topic, strengthen it. Upload different angles on the same ideas: interviews, essays, contrarian takes, case studies, personal notes. The more dimensions it has on a subject, the more nuanced its answers become.
* **Branch into adjacent territory** - This is where your score grows fastest. Think about the topics that inform your work or naturally come up in your content. If you teach productivity, that might mean psychology or habit science. If you teach business strategy, that might mean history or decision-making. These aren't new niches, they're the intellectual context that makes your expertise richer.
* **Use the Delphi's training mode** - This is one of the most effective ways to raise your score. It captures your personal perspectives, opinions, and experiences - the thoughts and experience no upload can replicate. Your takes, your stories, and your reasoning are what make your Delphi sound like you.

***

**Why Your Score Grows Slower Over Time**

As your Delphi learns more, each new upload adds a little less to your total. That's not a bug, it's a sign your Delphi is becoming more sophisticated in the areas it already knows well.

If your score feels stuck, it means your Delphi has strong footing in your core territory. The next move is to follow a natural thread outward, to go one layer deeper into the ideas that sit just beneath the surface of what you already teach.


# Actions

{% hint style="info" %}
Note these feature are reserved for Delphis on the Builder, Scaler, and Immortal tiers. Free Delphis that would like to use Actions will need to upgrade.
{% endhint %}


# API (Immortal Only)

Build custom integrations with your Delphi using the REST API.

The Delphi API lets you integrate your Digital Mind directly into your own app, platform, or workflow. You have control to the full experience — create conversations, stream responses, manage tags, and track usage through simple HTTP requests.

**Base URL:** `https://api.delphi.ai`

**Current version:** v3

## Getting started

{% stepper %}
{% step %}

### Get an API key

API access is available on the **Immortal** plan. To get started, reach out to your Delphi contact or email **<support@delphi.ai>**.

> **Important:** Store your key securely. It is only shown once and cannot be retrieved later.
> {% endstep %}

{% step %}

### Authenticate

Include your API key in the `x-api-key` header on every request:

```bash
curl https://api.delphi.ai/v3/conversation/list?email=user@example.com \
  -H "x-api-key: YOUR_API_KEY"
```

{% endstep %}

{% step %}

### Start a conversation

```bash
curl -X POST https://api.delphi.ai/v3/conversation \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"user_email": "user@example.com"}'
```

This returns a `conversation_id` and the clone's initial greeting.
{% endstep %}
{% endstepper %}

## Authentication

All endpoints require an API key passed in the `x-api-key` header. The key is scoped to a single clone — you can only interact with conversations and users belonging to that clone.

| Header      | Value        |
| ----------- | ------------ |
| `x-api-key` | Your API key |

## Rate limits

* **120 requests** per **60 seconds** per API key
* Rate limiting is applied across all endpoints
* If you exceed the limit, you'll receive a `429 Too Many Requests` response

## Available endpoints

* [**Audience**](/advanced/actions/api-immortal-only/audience) - Store and manage contextual information about users in your audience.
* [**Conversations**](/advanced/actions/api-immortal-only/conversations) — Create conversations, stream responses, view history, and manage conversation lifecycle.
* [**Clone**](/advanced/actions/api-immortal-only/clone) - Retrieve your clone's public profile information.
* [**Questions**](/advanced/actions/api-immortal-only/questions) — Retrieve suggested questions configured for your clone.
* [**Tags**](/advanced/actions/api-immortal-only/tags) — Create tags and organize your audience.
* [**Usage**](/advanced/actions/api-immortal-only/usage) — Track consumption metrics and access tiers for your users.
* [**Voice**](/advanced/actions/api-immortal-only/voice) — Stream voice responses as real-time PCM audio.


# Audience

Store and retrieve contextual information about users in your audience. This data is embedded into your clone's memory, allowing it to personalize responses based on what you know about each user.

### List Users

Retrieve a paginated list of all users in your audience.

**Endpoint:** `GET /v3/users`

**Query parameters:**

| Parameter | Type    | Required | Description                                           |
| --------- | ------- | -------- | ----------------------------------------------------- |
| `limit`   | integer | No       | Page size (1–1000, default 50)                        |
| `cursor`  | string  | No       | Cursor from previous response's `next_cursor`         |
| `active`  | boolean | No       | Filter by active (`true`) or revoked (`false`) status |

**Example request:**

```bash
curl "https://api.delphi.ai/v3/users?limit=20" \
  -H "x-api-key: YOUR_API_KEY"
```

**Example response:**

```json
{
  "users": [
    {
      "user_id": "u-123",
      "email": "fan@example.com",
      "name": "Jane Fan",
      "phone_number": "+14155552671",
      "tags": ["VIP", "newsletter"],
      "tier": "PUBLIC",
      "active": true,
      "date_joined": "2025-06-15T10:30:00.000Z"
    },
    {
      "user_id": "u-456",
      "email": "subscriber@example.com",
      "name": "Alex Sub",
      "phone_number": null,
      "tags": [],
      "tier": "INTERNAL",
      "active": true,
      "date_joined": "2025-06-10T08:00:00.000Z"
    }
  ],
  "next_cursor": "2025-06-10T08:00:00.000000+00:00|u-456",
  "has_more": true
}
```

**Response fields:**

| Field         | Type    | Description                                                           |
| ------------- | ------- | --------------------------------------------------------------------- |
| `users`       | array   | List of user objects                                                  |
| `next_cursor` | string  | Pass as `cursor` to fetch the next page (`null` when no more results) |
| `has_more`    | boolean | Whether additional pages exist                                        |

**User object fields:**

| Field          | Type      | Description                                     |
| -------------- | --------- | ----------------------------------------------- |
| `user_id`      | string    | UUID of the user                                |
| `email`        | string    | User's email (may be `null`)                    |
| `name`         | string    | Display name (may be `null`)                    |
| `phone_number` | string    | Phone in E.164 format (may be `null`)           |
| `tags`         | string\[] | Tag names applied to this user                  |
| `tier`         | string    | Access tier: `PUBLIC`, `INTERNAL`, or `PRIVATE` |
| `active`       | boolean   | Whether the user currently has access           |
| `date_joined`  | string    | When the user first interacted (ISO 8601)       |

To page through all results, pass `next_cursor` from each response as the `cursor` query parameter until `has_more` is `false`. The cursor is opaque — do not parse or construct it manually.

***

### Lookup User

Find a user by email or phone number. Returns the user's ID, email and phone if they exist.

**Endpoint:** `POST /v3/users/lookup`

**Request body:**

| Field          | Type   | Required | Description                  |
| -------------- | ------ | -------- | ---------------------------- |
| `email`        | string | No       | Email address to look up     |
| `phone_number` | string | No       | Phone number in E.164 format |

Exactly one of `email` or `phone_number` must be provided.

**Example request (by email):**

```bash
curl -X POST "https://api.delphi.ai/v3/users/lookup" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "fan@example.com"}'
```

**Example request (by phone):**

```bash
curl -X POST "https://api.delphi.ai/v3/users/lookup" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"phone_number": "+14155552671"}'
```

**Example response:**

```json
{
  "user_id": "u-123",
  "email": "fan@example.com",
  "phone_number": "+14155552671"
}
```

**Response fields:**

| Field          | Type   | Description                         |
| -------------- | ------ | ----------------------------------- |
| `user_id`      | string | UUID of the matched user            |
| `email`        | string | User's email (may be `null`)        |
| `phone_number` | string | User's phone number (may be `null`) |

### Create User Info

Add a piece of information about a user from your audience.

**Endpoint:** `POST /v3/users/{user_id}/info`

**Path parameters:**

| Field     | Type   | Description      |
| --------- | ------ | ---------------- |
| `user_id` | string | UUID of the user |

**Request body:**

| Field       | Type   | Required | Description                            |
| ----------- | ------ | -------- | -------------------------------------- |
| `info`      | string | Yes      | The information text                   |
| `info_type` | string | Yes      | Category of the info (see table below) |

**Info types:**

| Value                 | Description                               |
| --------------------- | ----------------------------------------- |
| `GOAL`                | Something the user is trying to achieve   |
| `PREFERENCES`         | User preferences or likes/dislikes        |
| `INTERESTS`           | Topics or areas the user is interested in |
| `PERSONAL_INFO`       | General personal details                  |
| `EXPERTISE`           | Skills or areas of knowledge              |
| `SITUATION`           | Current context or circumstances          |
| `BELIEF`              | Values or beliefs                         |
| `COMMUNICATION_STYLE` | How the user prefers to communicate       |
| `EMOTIONAL_STATE`     | Current emotional context                 |
| `RELATIONSHIP`        | How the user relates to you or your work  |
| `WHY_DELPHI`          | Why the user interacts with your clone    |
| `HOW_DELPHI`          | How the user uses your clone              |
| `JOURNAL`             | Freeform notes                            |

**Example request:**

```bash
curl -X POST "https://api.delphi.ai/v3/users/u-123/info" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "info": "Wants to improve their public speaking skills",
    "info_type": "GOAL"
  }'
```

**Example response:**

```json
{
  "id": "info-001",
  "text": "Wants to improve their public speaking skills",
  "created_at": "2025-06-15T10:30:00.000Z",
  "updated_at": "2025-06-15T10:30:00.000Z",
  "message_id": null,
  "source": "API",
  "info_type": "GOAL"
}
```

***

### Get User Info

Retrieve all stored information for a user who has interacted with your digital mind.

**Endpoint:** `GET /v3/users/{user_id}/info`

**Path parameters:**

| Field     | Type   | Description      |
| --------- | ------ | ---------------- |
| `user_id` | string | UUID of the user |

**Example request:**

```bash
curl "https://api.delphi.ai/v3/users/u-123/info" \
  -H "x-api-key: YOUR_API_KEY"
```

**Example response:**

```json
{
  "user_id": "u-123",
  "info_items": [
    {
      "id": "info-001",
      "text": "Wants to improve their public speaking skills",
      "created_at": "2025-06-15T10:30:00.000Z",
      "updated_at": "2025-06-15T10:30:00.000Z",
      "message_id": null,
      "source": "API",
      "info_type": "GOAL"
    },
    {
      "id": "info-002",
      "text": "Prefers short, actionable advice",
      "created_at": "2025-06-14T08:00:00.000Z",
      "updated_at": "2025-06-14T08:00:00.000Z",
      "message_id": null,
      "source": "API",
      "info_type": "PREFERENCES"
    }
  ],
  "total_count": 2
}
```

Items are sorted by newest first.

***

### Update User Info

Update a specific piece of information about a user. You can change the text, the info type, or both.

**Endpoint:** `PATCH /v3/users/{user_id}/info/{info_id}`

**Path parameters:**

| Field     | Type   | Description                   |
| --------- | ------ | ----------------------------- |
| `user_id` | string | UUID of the user              |
| `info_id` | string | ID of the info item to update |

**Request body:**

| Field       | Type   | Required | Description                                           |
| ----------- | ------ | -------- | ----------------------------------------------------- |
| `info`      | string | No       | Updated information text                              |
| `info_type` | string | No       | Updated category (see info types in Create User Info) |

At least one of `info` or `info_type` must be provided.

**Example request:**

```bash
curl -X PATCH "https://api.delphi.ai/v3/users/u-123/info/info-001" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "info": "Wants to improve their public speaking and storytelling skills",
    "info_type": "GOAL"
  }'
```

**Example response:**

```json
{
  "id": "info-001",
  "text": "Wants to improve their public speaking and storytelling skills",
  "created_at": "2025-06-15T10:30:00.000Z",
  "updated_at": "2025-06-16T14:22:00.000Z",
  "message_id": null,
  "source": "API",
  "info_type": "GOAL"
}
```

**Response fields:**

| Field        | Type   | Description                                     |
| ------------ | ------ | ----------------------------------------------- |
| `id`         | string | ID of the info item                             |
| `text`       | string | The updated information text                    |
| `created_at` | string | When the info was originally created (ISO 8601) |
| `updated_at` | string | When the info was last updated (ISO 8601)       |
| `message_id` | string | Associated message ID (may be `null`)           |
| `source`     | string | Origin of the info (`API`, `MESSAGE`, etc.)     |
| `info_type`  | string | Category of the info                            |

The `created_at` timestamp is preserved from the original record. Only `updated_at` changes on update.

### Delete User Info

Remove a specific piece of information about a user.

**Endpoint:** `DELETE /v3/users/{user_id}/info/{info_id}`

**Path parameters:**

| Field     | Type   | Description                   |
| --------- | ------ | ----------------------------- |
| `user_id` | string | UUID of the user              |
| `info_id` | string | ID of the info item to delete |

**Example request:**

```bash
curl -X DELETE "https://api.delphi.ai/v3/users/u-123/info/info-001" \
  -H "x-api-key: YOUR_API_KEY"
```

**Example response:**

```json
{
  "success": true,
  "message": "User info deleted successfully",
  "deleted_info_id": "info-001"
}
```


# Conversations

## Create a conversation

Start a new conversation with your clone. Returns a conversation ID and the clone's initial greeting.

**Endpoint:** `POST /v3/conversation`

**Request body:**

<table><thead><tr><th width="199.74609375">Field</th><th width="110.4453125">Type</th><th width="110.48046875">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>slug</code></td><td>string</td><td>No</td><td>Which Mind to start the conversation with. Defaults to the API key's Mind.</td></tr><tr><td><code>user_email</code></td><td>string</td><td>No</td><td>Email of the user starting the chat</td></tr><tr><td><code>overrides</code></td><td>object</td><td>No</td><td>Per-conversation experience overrides. See the table below.</td></tr></tbody></table>

> If `user_email` is provided, the conversation is linked to that user. Otherwise, it's created as an anonymous conversation.

**`Overrides` object:**

<table><thead><tr><th width="200.328125">Field</th><th width="108.25390625">Type</th><th width="110.3984375">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>purpose</code></td><td>string</td><td>No</td><td>Overrides the Mind's default purpose/instructions for this conversation only. Max 10,000 characters.</td></tr><tr><td><code>default_language</code></td><td>string</td><td>No</td><td>BCP-47 language code the Mind should respond in by default (e.g. <code>"es"</code>, <code>"fr"</code>, <code>"pt-BR"</code>).</td></tr><tr><td><code>multiple_languages</code></td><td>boolean</td><td>No</td><td>When <code>false</code> <strong>and</strong> <code>default_language</code> is set, the Mind always answers in <code>default_language</code> regardless of the language the user writes in. Defaults to allowing the Mind to match the user's language.</td></tr></tbody></table>

> Overrides are per-conversation and merge on top of the Mind's channel-level settings — any key you set here wins; keys you omit fall back to the Mind's defaults.

**Example request:**

<pre class="language-bash"><code class="lang-bash">curl -X POST "https://api.delphi.ai/v3/conversation" \
<strong>  -H "Content-Type: application/json" \
</strong>  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "user_email": "customer@example.com",
    "overrides": {
      "purpose": "You are helping the user with a billing issue. Be concise and direct.",
      "default_language": "es",
      "multiple_languages": false
    }
  }'
</code></pre>

**Example response:**

```json
{
  "conversation_id": "b3d1c0a2-5e4f-4a1b-9c8d-7e6f5a4b3c2d",
  "created_at": "2026-07-22T18:00:00.000Z",
  "initial_message": "Hi, ask me anything."
}
```

## Ask a one-off question

**Endpoint:** `POST /v3/conversation/ask`

Generate a single answer **without creating or using a conversation**. Use this for stateless Q\&A. If you pass `user_email`, the Mind loads that visitor's memory (summary, known facts, cross-conversation context) for the answer.

**Request body:**&#x20;

<table><thead><tr><th width="200.05078125">Field</th><th width="109.56640625">Type</th><th width="110.46484375">Requires</th><th>Descriptions</th></tr></thead><tbody><tr><td><code>question</code></td><td>string</td><td><strong>Yes</strong></td><td>The question to answer. 1–50,000 characters.</td></tr><tr><td><code>slug</code></td><td>string</td><td>No</td><td>Which Mind to ask. Defaults to the API key's Mind.</td></tr><tr><td><code>user_email</code></td><td>string</td><td>No</td><td>Loads this visitor's memory into the answer. Omit for a fully anonymous, memory-free answer.</td></tr><tr><td><code>file_urls</code></td><td>array of string</td><td>No</td><td>Up to 10 file URLs. Indexed the same way as chat uploads before the answer is generated.</td></tr></tbody></table>

**Response:**

<table><thead><tr><th width="200.49609375">Field</th><th width="109.99609375">Type</th><th>Descriptions</th></tr></thead><tbody><tr><td><code>answer</code></td><td>string</td><td>The Mind's answer. </td></tr><tr><td><code>citations</code></td><td>array of object</td><td>Sources backing the answer (same citation shape as conversation history — see below).</td></tr></tbody></table>

**Citation fields** (each item in `citations`)

<table><thead><tr><th width="199.98046875">Field</th><th width="109.9765625">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>type</code></td><td>string</td><td>Citation type.</td></tr><tr><td><code>text</code></td><td>string</td><td>Cited text/snippet.</td></tr><tr><td><code>title</code></td><td>string</td><td>Source title (nullable).</td></tr><tr><td><code>url</code></td><td>string</td><td>Source URL (nullable).</td></tr><tr><td><code>citation_url</code></td><td>string</td><td>Direct link to the cited location (nullable).</td></tr><tr><td><code>page_num</code></td><td>number</td><td>Page number for document sources (nullable).</td></tr><tr><td><code>timestamp</code></td><td>number</td><td>Timestamp for audio/video sources (nullable).</td></tr><tr><td><code>tweet_id</code></td><td>string</td><td>Tweet ID for tweet sources (nullable).</td></tr><tr><td><code>created_at</code></td><td>string</td><td>When the source was created (nullable).</td></tr></tbody></table>

**Example request:**

```bash
curl -X POST "https://api.delphi.ai/v3/conversation/ask" \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "question": "What is your refund policy?",
    "user_email": "customer@example.com"
  }'
```

**Example response:**

```json
{
  "answer": "Refunds are available within 30 days of purchase...",
  "citations": [
    {
      "type": "content",
      "text": "Customers may request a full refund within 30 days.",
      "title": "Refund Policy",
      "url": "https://example.com/refund-policy",
      "citation_url": "https://example.com/refund-policy#section-2",
      "page_num": null,
      "timestamp": null,
      "tweet_id": null,
      "created_at": null
    }
  ]
}
```

## Stream a response

Send a message and receive the clone's response as a real-time stream (Server-Sent Events).

**Endpoint:** `POST /v3/stream`

**Request body:**

<table><thead><tr><th width="199.7890625">Field</th><th width="110.10546875">Type</th><th width="109.72265625">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>conversation_id</code></td><td>string</td><td>Yes</td><td>UUID of the conversation</td></tr><tr><td><code>message</code></td><td>string</td><td>Yes</td><td>The user's message</td></tr><tr><td><code>file_urls</code></td><td>string[]</td><td>No</td><td>URLs of user-uploaded files for context</td></tr><tr><td><code>slug</code></td><td>string</td><td>No</td><td>Your clone's slug</td></tr></tbody></table>

**Example request:**

```bash
curl -X POST https://api.delphi.ai/v3/stream \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "conversation_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "message": "What are your top 3 tips for getting started?"
  }'
```

**Response format:** `text/event-stream`

The response is a stream of Server-Sent Events. Each event contains a chunk of the clone's response. The stream ends with a `[DONE]` event.

## List conversations

Retrieve all conversations for a specific user.

**Endpoint:** `GET /v3/conversation/list`

**Query parameters:**

| Parameter | Type   | Required | Description              |
| --------- | ------ | -------- | ------------------------ |
| `email`   | string | Yes      | The user's email address |

**Example request:**

```bash
curl "https://api.delphi.ai/v3/conversation/list?email=user@example.com" \
  -H "x-api-key: YOUR_API_KEY"
```

**Example response:**

```json
{
  "conversations": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "title": "Getting started tips",
      "created_at": "2025-06-15T10:30:00.000Z",
      "medium": "API"
    },
    {
      "id": "f9e8d7c6-b5a4-3210-fedc-ba9876543210",
      "title": null,
      "created_at": "2025-06-14T08:15:00.000Z",
      "medium": "API"
    }
  ]
}
```

> Conversations are sorted by newest first. Only active (non-deleted) conversations are returned.

## Get conversation history <a href="#get-conversation-history" id="get-conversation-history"></a>

Retrieve the full message history for a conversation.**Endpoint:** `GET /v3/conversation/{conversation_id}/history`**Path parameters:**

| Parameter         | Type   | Description              |
| ----------------- | ------ | ------------------------ |
| `conversation_id` | string | UUID of the conversation |

**Query parameters:**

<table data-header-hidden><thead><tr><th>Parameter</th><th>Type</th><th width="110.46484375">Required</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>include_citations</code></td><td>boolean</td><td>No</td><td>false</td><td>Include source citations</td></tr></tbody></table>

**Example request:**

```bash
curl "https://api.delphi.ai/v3/conversation/a1b2c3d4/history?include_citations=true" \
  -H "x-api-key: YOUR_API_KEY"
```

**Example response:**

```json
{
  "messages": [
    {
      "id": "msg-001",
      "text": "Hey! How can I help you today?",
      "sender": "CLONE",
      "created_at": "2025-06-15T10:30:00.000Z",
      "citations": []
    },
    {
      "id": "msg-002",
      "text": "What are your top 3 tips?",
      "sender": "USER",
      "created_at": "2025-06-15T10:30:15.000Z",
      "citations": []
    },
    {
      "id": "msg-003",
      "text": "Great question! Here are my top 3 tips...",
      "sender": "CLONE",
      "created_at": "2025-06-15T10:30:20.000Z",
      "citations": [
        {
          "url": "https://example.com/article",
          "text": "Relevant excerpt from source",
          "type": "WEB",
          "title": "Source Article Title",
          "created_at": "2025-06-15T10:30:20.000Z"
        }
      ]
    }
  ]
}
```

**Citation fields** (when `include_citations=true`):

<table><thead><tr><th width="199.62890625">Field</th><th width="110.48046875">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>url</code></td><td>string</td><td>Source URL</td></tr><tr><td><code>text</code></td><td>string</td><td>Relevant excerpt</td></tr><tr><td><code>type</code></td><td>string</td><td>Source type: <code>WEB</code>, <code>PDF</code>, <code>TWITTER</code></td></tr><tr><td><code>title</code></td><td>string</td><td>Source title (nullable)</td></tr><tr><td><code>page_num</code></td><td>number</td><td>PDF page number (nullable)</td></tr><tr><td><code>timestamp</code></td><td>number</td><td>Video/audio timestamp (nullable)</td></tr><tr><td><code>tweet_id</code></td><td>string</td><td>Tweet ID (nullable)</td></tr><tr><td><code>citation_url</code></td><td>string</td><td>Direct citation link (nullable)</td></tr></tbody></table>

> Messages are returned in chronological order (oldest first).

## Get insights for a conversation

**Endpoint:** `POST /v3/conversation/{conversation_id}/insights`

Returns the insight cards generated for a conversation, newest first. Insight cards are surfaced by Delphi's synthesis (e.g. a notable testimonial, or a user worth meeting) and are attached to the conversation they came from.

**Path parameters:**

<table><thead><tr><th width="200.3671875">Field</th><th width="108.828125">Type</th><th width="109.94140625">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>conversation_id</code></td><td>string</td><td><strong>Yes</strong></td><td>The conversation's ID.</td></tr></tbody></table>

**Response:**&#x20;

Returns an object with an `insights` array. Each item:

<table><thead><tr><th width="200.3671875">Field</th><th width="109.62109375">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>string</td><td>Insight ID.</td></tr><tr><td><code>created_at</code></td><td>string</td><td>When the insight was created (ISO 8601).</td></tr><tr><td><code>data</code></td><td>object</td><td>The insight card. Fields below.</td></tr></tbody></table>

**`Data` (insight card) fields:**&#x20;

<table><thead><tr><th width="200.3671875">Field</th><th width="109.62109375">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>type</code></td><td>string</td><td>Card type: <code>"testimonial"</code> or <code>"user_worth_meeting"</code>.</td></tr><tr><td><code>description</code></td><td>string</td><td>Human-readable summary of the insight.</td></tr><tr><td><code>reasoning</code> </td><td>array of string</td><td>Why this insight was surfaced.</td></tr><tr><td><code>items</code></td><td>array of string</td><td>Supporting bullet points (nullable).</td></tr><tr><td><code>ctaType</code></td><td>string</td><td>Suggested call-to-action type (e.g. <code>share_socials</code>, <code>reply_to_user</code>, <code>view_conversation</code>).</td></tr><tr><td><code>ctaLabel</code></td><td>string</td><td>Display label for the CTA.</td></tr><tr><td><code>ctaData</code></td><td>object</td><td>Arbitrary data for the CTA.</td></tr><tr><td><code>evidence</code></td><td>array of object</td><td>Supporting evidence. Each has a <code>type</code> of <code>CONVERSATION</code>, <code>USER</code>, or <code>CONTENT</code> plus fields for that type.</td></tr><tr><td><code>compositeScore</code></td><td>number</td><td>Confidence/priority score between 0 and 1.</td></tr><tr><td><code>period</code></td><td>string</td><td>The time period the insight covers.</td></tr><tr><td><code>createdAt</code></td><td>string</td><td>Card creation timestamp (ISO 8601).</td></tr></tbody></table>

**Example request:**

```bash
curl "https://api.delphi.ai/v3/conversation/b3d1c0a2-5e4f-4a1b-9c8d-7e6f5a4b3c2d/insights" \
  -H "x-api-key: YOUR_API_KEY"
```

**Example response:**

```json
{
  "insights": [
    {
      "id": "insight_01H...",
      "created_at": "2026-07-22T18:30:00.000Z",
      "data": {
        "type": "testimonial",
        "description": "Customer praised the onboarding experience.",
        "reasoning": ["Strong positive sentiment", "Names a specific outcome"],
        "items": ["Loved the setup flow", "Would recommend to peers"],
        "ctaType": "share_socials",
        "ctaLabel": "Share this testimonial",
        "ctaData": {},
        "evidence": [
          {
            "type": "CONVERSATION",
            "threadId": "b3d1c0a2-5e4f-4a1b-9c8d-7e6f5a4b3c2d",
            "threadSessionId": "sess_123",
            "summary": "User described a smooth onboarding.",
            "sourceMessageId": "msg_456"
          }
        ],
        "compositeScore": 0.82,
        "period": "2026-07",
        "createdAt": "2026-07-22T18:30:00.000Z"
      }
    }
  ]
}
```

## Update conversation title

Set or update the title of a conversation.

**Endpoint:** `PUT /v3/conversation/{conversation_id}/title`

**Path parameters:**

| Parameter         | Type   | Description              |
| ----------------- | ------ | ------------------------ |
| `conversation_id` | string | UUID of the conversation |

**Request body:**

| Field   | Type   | Required | Description                  |
| ------- | ------ | -------- | ---------------------------- |
| `title` | string | Yes      | New title (1–500 characters) |

**Example request:**

```bash
curl -X PUT "https://api.delphi.ai/v3/conversation/a1b2c3d4/title" \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"title": "Getting started tips"}'
```

**Example response:**

```json
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "title": "Getting started tips",
  "updated_at": "2025-06-15T11:00:00.000Z"
}
```

## Append a clone message

Add a clone message to an existing conversation. Useful for seeding conversations or injecting a custom clone message mid-conversation.&#x20;

**Endpoint:** `POST /v3/conversation/{conversation_id}/append-clone-message`

**Path parameters:**

| Parameter         | Type   | Description              |
| ----------------- | ------ | ------------------------ |
| `conversation_id` | string | UUID of the conversation |

**Request body:**

| Field  | Type   | Required | Description                        |
| ------ | ------ | -------- | ---------------------------------- |
| `text` | string | Yes      | Message text (1–50,000 characters) |

**Example request:**

```bash
curl -X POST "https://api.delphi.ai/v3/conversation/a1b2c3d4/append-clone-message" \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"text": "Welcome! Here are some things you can ask me about."}'
```

**Example response:**

```json
{
  "message_id": "1dababb1-ef17-4f9f-8ab6-a5d7c4291c12",
  "conversation_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "text": "Welcome! Here are some things you can ask me about.",
  "sender": "CLONE",
  "created_at": "2025-06-15T10:30:00.000Z"
}
```

## Delete a conversation

Soft-delete a conversation. It will no longer appear in list results.

**Endpoint:** `DELETE /v3/conversation/{conversation_id}`

**Path parameters:**

| Parameter         | Type   | Description              |
| ----------------- | ------ | ------------------------ |
| `conversation_id` | string | UUID of the conversation |

**Example request:**

```bash
curl -X DELETE "https://api.delphi.ai/v3/conversation/a1b2c3d4" \
  -H "x-api-key: YOUR_API_KEY"
```

**Example response:**

```json
{
  "status": "archived"
}
```

> This is a soft delete — the conversation is hidden, not permanently removed.


# Clone

Retrieve your clone's public profile information.

### Get Clone Profile

**Endpoint:** `GET /v3/clone`&#x20;

**Example request:**

```bash
curl "https://api.delphi.ai/v3/clone" \
  -H "x-api-key: YOUR_API_KEY"
```

**Example response:**

```json
{
  "clone": {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "Alex Thompson",
    "slug": "alex-thompson",
    "description": "AI researcher and educator",
    "headline": "Making AI accessible to everyone",
    "purpose": "Help visitors understand AI concepts quickly",
    "tags": ["AI", "Education", "Research"],
    "imageUrl": "https://imagedelivery.net/example/public",
    "initial_message": "Hey! I'm Alex. Ask me anything about AI."
  }
}
```

**Response fields:**

| Field             | Type           | Description                         |
| ----------------- | -------------- | ----------------------------------- |
| `id`              | string         | Clone UUID                          |
| `name`            | string         | Clone display name                  |
| `slug`            | string         | Clone URL slug                      |
| `description`     | string \| null | Clone bio/description               |
| `headline`        | string \| null | Short headline                      |
| `purpose`         | string \| null | Clone's configured purpose          |
| `tags`            | string\[]      | Clone topic tags                    |
| `imageUrl`        | string \| null | Profile image URL                   |
| `initial_message` | string \| null | Greeting message shown to new users |


# Questions

### Get questions <a href="#get-questions" id="get-questions"></a>

Retrieve the suggested questions configured for your clone. These are the conversation starters shown on your clone's profile.

**Endpoint:** `GET /v3/questions`

**Query parameters:**

| Parameter   | Type    | Required | Default    | Description                            |
| ----------- | ------- | -------- | ---------- | -------------------------------------- |
| `type`      | string  | No       | `"pinned"` | Filter: `pinned`, `unpinned`, or `all` |
| `count`     | integer | No       | `5`        | Number of questions to return (1–100)  |
| `randomize` | boolean | No       | `false`    | Return questions in random order       |

**Type values:**

| Value      | Description                             |
| ---------- | --------------------------------------- |
| `pinned`   | Visible questions shown on your profile |
| `unpinned` | Backlog questions not currently visible |
| `all`      | Both pinned and unpinned questions      |

**Example request:**

```bash
curl "https://api.delphi.ai/v3/questions?type=pinned&count=3" \
  -H "x-api-key: YOUR_API_KEY"
```

**Example response:**

```json
{
  "questions": [
    {
      "id": "q-001",
      "index": 2,
      "question": "What's your best advice for beginners?",
      "pinned": true,
      "user_edited": false,
      "created_at": "2025-06-01T12:00:00.000Z",
      "updated_at": "2025-06-01T12:00:00.000Z"
    },
    {
      "id": "q-002",
      "index": 1,
      "question": "How did you get started in your career?",
      "pinned": true,
      "user_edited": true,
      "created_at": "2025-05-20T09:00:00.000Z",
      "updated_at": "2025-06-10T14:30:00.000Z"
    }
  ]
}
```

**Response fields:**

| Field         | Type    | Description                                    |
| ------------- | ------- | ---------------------------------------------- |
| `id`          | string  | Question UUID                                  |
| `index`       | integer | Display order index                            |
| `question`    | string  | The question text                              |
| `pinned`      | boolean | Whether the question is visible on the profile |
| `user_edited` | boolean | Whether the question was manually edited       |
| `created_at`  | string  | ISO 8601 timestamp                             |
| `updated_at`  | string  | ISO 8601 timestamp                             |

{% hint style="info" %}
By default, questions are ordered by `index` descending. Use `randomize=true` to shuffle the order.
{% endhint %}


# Tags

### Create a tag <a href="#create-a-tag" id="create-a-tag"></a>

Create a new tag for organizing your audience.

**Endpoint:** `POST /v3/tags`

**Request body:**

| Field   | Type   | Required | Description                         |
| ------- | ------ | -------- | ----------------------------------- |
| `name`  | string | Yes      | Tag name (must be unique per clone) |
| `color` | string | No       | Tag color (defaults to `"default"`) |

**Example request:**

```bash
curl -X POST https://api.delphi.ai/v3/tags \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"name": "VIP", "color": "blue"}'
```

**Example response:**

```json
{
  "id": "tag-001",
  "name": "VIP",
  "color": "blue",
  "created_at": "2025-06-15T10:00:00.000Z",
  "updated_at": "2025-06-15T10:00:00.000Z"
}
```

> Returns `409` if a tag with the same name already exists.

## List all tags

Retrieve all tags for your clone.

**Endpoint:** `GET /v3/tags`

**Example request:**

```bash
curl "https://api.delphi.ai/v3/tags" \
  -H "x-api-key: YOUR_API_KEY"
```

**Example response:**

```json
{
  "tags": [
    {
      "id": "tag-001",
      "name": "VIP",
      "color": "blue",
      "created_at": "2025-06-15T10:00:00.000Z",
      "updated_at": "2025-06-15T10:00:00.000Z"
    },
    {
      "id": "tag-002",
      "name": "Free Trial",
      "color": "default",
      "created_at": "2025-06-14T08:00:00.000Z",
      "updated_at": "2025-06-14T08:00:00.000Z"
    }
  ],
  "total_count": 2
}
```

> Tags are sorted by newest first.

## Tag a user

Apply a tag to a user in your audience.

**Endpoint:** `POST /v3/users/{user_id}/tags/{tag_name}`

**Path parameters:**

| Parameter  | Type   | Description      |
| ---------- | ------ | ---------------- |
| `user_id`  | string | UUID of the user |
| `tag_name` | string | Exact tag name   |

**Example request:**

```bash
curl -X POST "https://api.delphi.ai/v3/users/u-123/tags/VIP" \
  -H "x-api-key: YOUR_API_KEY"
```

**Example response:**

```json
{
  "success": true,
  "tag_id": "tag-001",
  "tag_name": "VIP",
  "user_id": "u-123",
  "message": "Tag applied successfully"
}
```

> This operation is idempotent — tagging a user who already has the tag will succeed without error.

## Untag a user

Remove a tag from a user.

**Endpoint:** `DELETE /v3/users/{user_id}/tags/{tag_name}`

**Path parameters:**

| Parameter  | Type   | Description      |
| ---------- | ------ | ---------------- |
| `user_id`  | string | UUID of the user |
| `tag_name` | string | Exact tag name   |

**Example request:**

```bash
curl -X DELETE "https://api.delphi.ai/v3/users/u-123/tags/VIP" \
  -H "x-api-key: YOUR_API_KEY"
```

**Example response:**

```json
{
  "success": true,
  "tag_id": "tag-001",
  "tag_name": "VIP",
  "user_id": "u-123",
  "message": "Tag removed successfully"
}
```

> This operation is idempotent — untagging a user who doesn't have the tag will succeed without error.


# Usage

## Get user usage

Retrieve usage metrics for a specific user, including quotas and remaining allowances for the current billing period.

**Endpoint:** `GET /v3/users/{user_id}/usage`

**Path parameters:**

| <p><br>Parameter</p> | Type   | Description      |
| -------------------- | ------ | ---------------- |
| `user_id`            | string | UUID of the user |

**Example response:**

```json
{
  "period": {
    "start": "2025-06-01T00:00:00.000Z",
    "end": "2025-06-30T23:59:59.000Z",
    "days_remaining": 15
  },
  "quota": {
    "messages": 1000,
    "voice_seconds": 3600.0,
    "video_seconds": 1800.0
  },
  "usage": {
    "messages": 250,
    "voice_seconds": 900.0,
    "video_seconds": 120.0
  },
  "remaining": {
    "messages": 750,
    "voice_seconds": 2700.0,
    "video_seconds": 1680.0
  }
}
```

**Response fields:**

| Field                     | Type    | Description                     |
| ------------------------- | ------- | ------------------------------- |
| `period.start`            | string  | Billing period start (ISO 8601) |
| `period.end`              | string  | Billing period end (ISO 8601)   |
| `period.days_remaining`   | integer | Days left in current period     |
| `quota.messages`          | integer | Total message allowance         |
| `quota.voice_seconds`     | number  | Total voice seconds allowance   |
| `quota.video_seconds`     | number  | Total video seconds allowance   |
| `usage.messages`          | integer | Messages used this period       |
| `usage.voice_seconds`     | number  | Voice seconds used              |
| `usage.video_seconds`     | number  | Video seconds used              |
| `remaining.messages`      | integer | Messages remaining              |
| `remaining.voice_seconds` | number  | Voice seconds remaining         |
| `remaining.video_seconds` | number  | Video seconds remaining         |

***

## Get user tier

Retrieve the current access tier for a specific user.

**Endpoint:** `GET /v3/users/{user_id}/tier`

**Path parameters:**

| Parameter | Type   | Description      |
| --------- | ------ | ---------------- |
| `user_id` | string | UUID of the user |

**Example request:**

```bash
curl "https://api.delphi.ai/v3/users/u-123/tier" \
  -H "x-api-key: YOUR_API_KEY"
```

**Example response:**

```json
{
  "tier": "GROWTH"
}
```

{% hint style="info" %}
The default tier is `"JUST ME"` if no custom tier has been assigned.
{% endhint %}


# Voice

Stream voice responses from your clone as raw PCM audio.

### Stream Voice Response

Send a text message to your clone and receive the response as a real-time audio stream.

**Endpoint:** `POST /v3/voice/stream`

**Prerequisites:**

* The clone must have a voice configured.
* A conversation must already exist (create one with `POST /v3/conversation` first).

**Request body:**

| Field             | Type   | Required | Description                          |
| ----------------- | ------ | -------- | ------------------------------------ |
| `conversation_id` | string | Yes      | UUID of an existing conversation     |
| `message`         | string | Yes      | User message (1 - 10,000 characters) |

**Example request:**

```bash
curl -X POST "https://api.delphi.ai/v3/voice/stream" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "conversation_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "message": "What are your thoughts on AI safety?"
  }' \
  --output response.pcm
```

**Response:**

Binary stream of raw PCM audio data (`application/octet-stream`).

**Response headers:**

| Header                    | Value               | Description             |
| ------------------------- | ------------------- | ----------------------- |
| `X-Audio-Format`          | `pcm_24000_16_mono` | Audio format identifier |
| `X-Audio-Sample-Rate`     | `24000`             | Sample rate in Hz       |
| `X-Audio-Bits-Per-Sample` | `16`                | Bit depth               |
| `X-Audio-Channels`        | `1`                 | Mono audio              |

**Playing the audio:**

```bash
# Convert PCM to WAV using ffmpeg
ffmpeg -f s16le -ar 24000 -ac 1 -i response.pcm response.wav
```

### Synthesize Voice

Convert raw text to audio using your clone's configured voice. Unlike Voice Stream, this does not\
generate a clone response — it speaks the exact text you provide.

**Endpoint:** `POST /v3/voice/synthesize`

**Prerequisites:**

* The clone must have a voice configured.

#### Request body

| Parameter | Type   | Required | Description                              |
| --------- | ------ | -------- | ---------------------------------------- |
| `text`    | string | Yes      | Text to synthesize (1–10,000 characters) |

#### Query parameters

| Parameter | Type    | Required | Default | Description                          |
| --------- | ------- | -------- | ------- | ------------------------------------ |
| `stream`  | boolean | No       | `false` | Stream raw PCM bytes instead of JSON |

#### Example request (batch)

```bash
curl -X POST "https://api.delphi.ai/v3/voice/synthesize" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Hello, this is a test of the synthesis endpoint."
  }'
```

#### Example response

```json
{
  "audio": "8/8AABcAHAAhAC8AKQAmADkALAA2AEgANwArACI..."
}
```

The `audio` field is base64-encoded raw PCM data (24 kHz, 16-bit signed, mono, little-endian).

#### Decoding the audio

```bash
echo "<base64_audio>" | base64 -d > output.pcm
ffmpeg -f s16le -ar 24000 -ac 1 -i output.pcm output.wav
```

#### Example request (streaming)

```bash
curl -X POST "https://api.delphi.ai/v3/voice/synthesize?stream=true" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Hello, this is a test of the streaming synthesis endpoint."
  }' \
  --output synthesized.pcm
```

#### Response

Binary stream of raw PCM audio data (`application/octet-stream`).

#### Response headers

| Header                    | Value               | Description             |
| ------------------------- | ------------------- | ----------------------- |
| `X-Audio-Format`          | `pcm_24000_16_mono` | Audio format identifier |
| `X-Audio-Sample-Rate`     | `24000`             | Sample rate in Hz       |
| `X-Audio-Bits-Per-Sample` | `16`                | Bit depth               |
| `X-Audio-Channels`        | `1`                 | Mono audio              |

#### Playing the audio

```bash
ffmpeg -f s16le -ar 24000 -ac 1 -i synthesized.pcm synthesized.wav
```


# Search

Search your clone's digital mind for relevant chunks or content. Use these endpoints to power custom search experiences, RAG pipelines, or content discovery features.

Search for relevant data from your clone's digital mind. Supports semantic search, keyword/phrase matching, and optional scoping to specific content sources.

Endpoint: `POST /v3/search/query`

Request body:

| Field        | Type      | Required | Description                                                              |
| ------------ | --------- | -------- | ------------------------------------------------------------------------ |
| `query`      | string\[] | Yes      | Semantic search strings (e.g. questions or topics)                       |
| `keywords`   | string\[] | No       | Keyword or phrase strings for exact-match (BM25) boosting                |
| `content`    | string\[] | No       | Content descriptions to scope results to matching sources                |
| `contentIds` | string\[] | No       | Direct content IDs to filter results to specific sources                 |
| `limit`      | number    | No       | Max chunks to return (1–50, default 10)                                  |
| `tag`        | string    | No       | Access tier tag (e.g. `PUBLIC`, `PREMIUM`). Defaults to broadest access. |

> **How search works:** `query` strings are used for semantic (meaning-based) search. `keywords` are routed through hybrid search for better exact-phrase matching via BM25. When both are provided, results are merged and deduplicated, keeping the highest-scoring passages.

> **Content scoping:** Use `content` to describe the sources you want to search within (e.g. `["Series A fundraising podcast"]`). The API resolves these descriptions to matching content and restricts the chunk search to those sources. Alternatively, pass `contentIds` directly if you already know the content IDs.

Example request:

```bash
curl -X POST https://api.delphi.ai/v3/search/query \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "query": ["What is your advice on building a startup?"],
    "keywords": ["fundraising", "Series A"],
    "limit": 5
  }'
```

Example response:

```json
{
  "chunks": [
    {
      "text": "When it comes to fundraising, the most important thing is to have a clear vision and a solid team. Investors want to see that you've thought deeply about the problem...",
      "sources": [
        {
          "contentId": "c1a2b3c4-d5e6-7890-abcd-ef1234567890",
          "title": "Startup Fundraising Masterclass"
        }
      ],
      "createdTime": "2025-06-15T10:30:00.000Z",
      "editedTime": "2025-06-15T10:30:00.000Z"
    },
    {
      "text": "For a Series A, you typically need to show strong product-market fit, a growing user base, and a path to revenue...",
      "sources": [
        {
          "contentId": "c1a2b3c4-d5e6-7890-abcd-ef1234567890",
          "title": "Startup Fundraising Masterclass"
        }
      ],
      "createdTime": "2025-06-10T08:00:00.000Z",
      "editedTime": "2025-06-10T08:00:00.000Z"
    }
  ],
  "content": [
    {
      "contentId": "c1a2b3c4-d5e6-7890-abcd-ef1234567890",
      "title": "Startup Fundraising Masterclass",
      "contentType": "podcast",
      "summary": "A deep dive into fundraising strategies for early-stage startups.",
      "metaData": {},
      "createdTime": "2025-05-01T00:00:00.000Z",
      "editedTime": "2025-05-01T00:00:00.000Z"
    }
  ]
}
```

Response fields:

| Field                          | Type      | Description                                                       |
| ------------------------------ | --------- | ----------------------------------------------------------------- |
| `chunks`                       | object\[] | Matching passages from the knowledge base                         |
| `chunks[].text`                | string    | The passage text                                                  |
| `chunks[].sources`             | object\[] | Content sources this passage belongs to                           |
| `chunks[].sources[].contentId` | string    | Unique ID of the content source                                   |
| `chunks[].sources[].title`     | string    | Title of the content source                                       |
| `chunks[].createdTime`         | string    | When the passage was created                                      |
| `chunks[].editedTime`          | string    | When the passage was last updated                                 |
| `content`                      | object\[] | Deduplicated list of all content sources referenced by the chunks |

> The `content` array includes full metadata for every content source that appears in the chunk results. Use this to display source cards, links, or attribution without making additional API calls.

#### Example: scoped search

Search only within specific content by providing descriptions:

```bash
curl -X POST https://api.delphi.ai/v3/search/query \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "query": ["What do you think about AI?"],
    "content": ["podcast episode about artificial intelligence"],
    "limit": 3
  }'
```

Or filter by known content IDs:

```bash
curl -X POST https://api.delphi.ai/v3/search/query \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "query": ["What do you think about AI?"],
    "contentIds": ["c1a2b3c4-d5e6-7890-abcd-ef1234567890"],
    "limit": 3
  }'
```

### Search content sources

Search for content sources (documents, articles, podcasts, etc.) in the knowledge base by title or description. Use this to discover what content is available before performing a chunk search.

Endpoint: `POST /v3/search/content`

Request body:

| Field   | Type      | Required | Description                                                              |
| ------- | --------- | -------- | ------------------------------------------------------------------------ |
| `query` | string\[] | Yes      | Content search strings (titles, descriptions, topics)                    |
| `tag`   | string    | No       | Access tier tag (e.g. `PUBLIC`, `PREMIUM`). Defaults to broadest access. |

Example request:

```bash
curl -X POST https://api.delphi.ai/v3/search/content \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "query": ["fundraising", "startup advice"]
  }'
```

Example response:

```json
{
  "content": [
    {
      "contentId": "c1a2b3c4-d5e6-7890-abcd-ef1234567890",
      "title": "Startup Fundraising Masterclass",
      "contentType": "podcast",
      "summary": "A deep dive into fundraising strategies for early-stage startups.",
      "metaData": {},
      "createdTime": "2025-05-01T00:00:00.000Z",
      "editedTime": "2025-05-01T00:00:00.000Z"
    },
    {
      "contentId": "d2b3c4d5-e6f7-8901-bcde-f12345678901",
      "title": "My Top 10 Startup Lessons",
      "contentType": "article",
      "summary": "Key lessons learned from building and scaling three companies.",
      "metaData": {},
      "createdTime": "2025-04-15T00:00:00.000Z",
      "editedTime": "2025-04-15T00:00:00.000Z"
    }
  ]
}
```

Content item fields:

| Field         | Type   | Description                                                 |
| ------------- | ------ | ----------------------------------------------------------- |
| `contentId`   | string | Unique identifier for the content source                    |
| `title`       | string | Title of the content                                        |
| `contentType` | string | Type of content (e.g. `podcast`, `article`, `pdf`, `video`) |
| `summary`     | string | Brief summary of the content (may be null)                  |
| `metaData`    | object | Additional metadata (varies by content type)                |
| `createdTime` | string | When the content was added                                  |
| `editedTime`  | string | When the content was last updated                           |

> Use content search to build a content catalog or let users browse available sources before diving into specific passages with `/v3/search/query`.


# Webhooks

A webhook is a way for one app to automatically send information to another the instant something happens. When something occurs with your Digital Mind, like a conversation wrapping up or a new contact arriving, Delphi packages up the full details of that event and delivers them straight to another tool of your choosing, in real time.

People use webhooks to keep everything in sync without lifting a finger: add every new contact to your CRM the second it appears, post to a Slack channel when someone important reaches out, or kick off an automation when a conversation ends. You pick what to listen for, and you pick where the news goes.

#### How to set one up

Setting up a webhook takes just a few minutes. Here is each step.

**1. Give it a name**

This is simply a label for your own reference, so you can recognize it later in your list. For example, "New contacts to HubSpot."

**2. Add your endpoint URL**

This is the web address where Delphi will send the information, and it is the bridge to your other tool. You can paste in a webhook URL from Zapier or Make, or point it at your own app or server. The address has to start with `https://` for security.

**3. Choose the events to listen for**

Events are the specific things that can happen with your Digital Mind. Pick one or more to act as the trigger for this webhook:

| Event                           | Fires when                                                                                     |
| ------------------------------- | ---------------------------------------------------------------------------------------------- |
| **Thread Session Ended**        | A conversation has settled and the full session is ready to fetch.                             |
| **Visitor Message Sent**        | A visitor sent a message in chat. This is the only event that carries the actual message text. |
| **Contact Created**             | A new contact was created from an import, the API, or conversation capture.                    |
| **Contact Updated**             | A contact's profile, tags, or custom properties changed.                                       |
| **Contact Deleted**             | A contact was removed from the owner account.                                                  |
| **Alert Triggered**             | An alert's condition matched a conversation.                                                   |
| **Affiliate Product Mentioned** | An affiliate product was recommended in an assistant message.                                  |
| **Phone Number Captured**       | A linked contact gained a phone number.                                                        |
| **Contact Became Inactive**     | A contact crossed a whole-day inactivity threshold that you set.                               |

**4. Add filters (optional)**

By default, every event of the type you picked is delivered. If you only care about some of them, add a filter so Delphi sends just the ones that match. Each event gets its own filter, with two modes:

* **Simple** is the no-code option. For most events, you can deliver only when the person has certain tags, matching ANY of the tags you list or ALL of them. For Alert Triggered, you instead pick which specific alerts count, like "Founder Pitch" or "Customer Request"
* **Advanced** is for fine-grained control, where you write an expression that spells out exactly what to match. Your Simple choices actually build this expression for you behind the scenes, so you can start Simple and peek at the Advanced version anytime.

Filters are checked the moment you save, so a typo gets caught right away. And if a filter ever fails, Delphi skips that delivery rather than sending you everything, so you never get a surprise flood.

**5. Test against a sample event**

Before you rely on it, click **Test Against a Sample Event**. Delphi sends a realistic example to your endpoint URL so you can confirm the connection works and your other tool receives what you expect. No need to wait for a real conversation to happen.

**6. Save, then watch the delivery log**

Once saved, your webhook is live. Every delivery is recorded in the delivery log, where you can see whether each one was delivered, failed, or skipped by a filter, along with the timing and the exact data that was sent. It is the place to confirm things are flowing, and the first place to look if they are not.

#### Frequently asked questions

* How do I know a webhook really came from Delphi?

  The first webhook you create generates a signing secret, shown only once. Your app uses it to confirm each delivery genuinely came from Delphi and not someone pretending to be us, so save it somewhere safe. You can rotate it later, with a 72-hour overlap so nothing breaks mid-switch.
* What happens if my endpoint is down when an event fires?

  Delphi keeps trying. If your endpoint is briefly down, Delphi retries up to 12 times with growing gaps between attempts, and your endpoint has 60 seconds to respond each time. After 5 failures in a row, it is paused as "unhealthy" until you turn it back on, so a broken tool cannot pile up forever.
* Could I receive the same event more than once?

  Yes, on rare occasions. Delphi promises to deliver at least once, which sometimes means a duplicate. Each delivery carries a unique event id, so your tool can safely ignore one it has already seen. Zapier and most tools handle this for you.
* How long can I see past deliveries?

  Each delivery record, including what was sent and what came back, is kept for 7 days in the delivery log.


# Activity

Activity is your single log for everything the Developer Platform does. Every webhook delivery and every hosted action run is recorded here, in one place, so you always know what happened, when, and whether it worked. Think of it like a live tracking page for all of your integrations at once.

**See your health at a glance.** Pick a time window (it opens on the last 24 hours) and the top of the page shows the key numbers for that period: how many events came through, your success rate, how many were delivered, how many failed, and the typical response time (labeled p50 latency, which is just the middle of the pack). It is a quick gut-check that things are running smoothly.

**Inspect any single item.** Below the stats is the log itself: every run, delivery attempt, and skip, with the newest first. Click any row to open the full picture, including the exact request that was sent, the response that came back, the headers, the status, and how long it took. This is where you confirm something went through, or work out why it did not.

**Filter down to what matters.** You can narrow the log by source (webhook deliveries or hosted action runs), endpoint, event type, outcome, and time range, so you can find one contact's activity or every failure in seconds.

Every attempt is sorted into one of three outcomes:

* **Delivered:** it went through successfully.
* **Failed:** it did not, along with the reason, for example a timeout or an error returned by your endpoint.
* **Skipped:** a filter decided this event was not a match, so it was intentionally not sent.


# Hosted Actions

Hosted Actions are small automations that Delphi runs for you, on Delphi's own servers. If a webhook is about sending information out to another tool, a Hosted Action is the automation itself, living inside Delphi, so there is nothing for you to host or keep online. You set up the instructions once, and Delphi runs them reliably for as long as you want.

The real superpower is that an action can wait. Something like "wait three days after someone goes quiet, then send a friendly follow-up, unless they have already replied" is not possible with a plain webhook, but it is a natural fit here. Hosted Actions are great for follow-up sequences, recurring routines, and automatically tagging or syncing your audience, all without standing up a server of your own.

#### Three ways an action can run

An action can be triggered in three ways, and you can combine them:

* **React to an event.** It runs the moment something happens, using the same events as webhooks, like a conversation ending or a new contact arriving.
* **Run on a schedule.** It runs on a regular timer you set, for example every morning, which is perfect for a daily sweep or a recurring cleanup.
* **Wait, then act.** This is the durable option. The action can pause for anywhere from a few minutes up to a year, then carry on, even if something restarts in between. It is what powers "do this later, unless something changes first."

Once it runs, a Hosted Action can do real work on your behalf: tag and update contacts, send a message or generate text in your Digital Mind's voice, notify you when a human should step in, and securely connect to your other tools like your CRM.

#### How one gets built

You do not need to be technical to create one. The easiest path is to let an AI coding agent (like Claude Code) build it for you. Setup is mostly copy-and-paste and takes about a minute.

**1. Install the Delphi tool.** A one-line install of the Delphi command-line tool: `npm install -g @delphiai/cli`

**2. Sign in.** Connect it to your account: `delphi login`

**3. Add the skill pack to your coding agent.** This teaches your agent everything about the platform in one step: `delphi skills install`

**4. Describe what you want, in plain English.** For example, "build something that emails me whenever a new high-intent contact is captured." Your agent uses the skill pack to write and test the action, then pushes it to Delphi to go live, checking with you first.

**5. Manage it in the Developer Platform.** Once live, see each action's status, triggers, and schedule, turn it on or off, store any private keys it needs (like a CRM token), and watch every run in Activity.

#### Frequently asked questions

* Do I need to know how to code?

  Not necessarily. Building an action does take some code, but the skill pack lets an AI coding agent build it for you from a plain-English description. Either way, actions are built on a computer and pushed to Delphi, since there is no editor inside the app.
* How is this different from a webhook?

  A webhook sends each event out to a tool that you run and maintain. A Hosted Action is the automation itself, running on Delphi with no server for you to keep online, plus two things a webhook cannot do on its own: run on a schedule, and wait for hours or days before acting.
* Can an action really wait days before doing something?

  Yes. A durable action can sleep for up to a year and then pick up exactly where it left off. That is how "follow up in three days unless they reply" works, with nothing running or costing you anything while it waits.
* Is it safe to let Delphi run code for me?

  Yes. Each action runs in an isolated sandbox that can only reach Delphi and the specific outside services you have allowed. Your secrets stay encrypted, daily spending is capped, and any message it sends still respects each contact's consent.
* How do I turn one off?

  You can deactivate any action at any time from the Developer Platform. Its code is kept, it simply stops running, and you can switch it back on or delete it whenever you like.


# Recent Updates

New updates and improvements

{% updates format="full" %}
{% update date="2026-06-29" %}

## Workflow upgrades and product polish

We rolled out a set of updates across product pages, account settings, and actions.

### What changed

* **Products** and **Voice** pages are now updated.
* **Change Ownership** is now **Change Email**.
* **Actions** now centers on **Webhooks** and **Hosted Actions**. The workflow Builder view is no longer available.
* **Alerts** now covers part of what **Actions** handled before.
* Interview mode has been depreciated&#x20;

For setup details, check the [**Webhooks**](https://docs.delphi.ai/advanced/actions/webhooks) and [**Hosted Actions**](https://docs.delphi.ai/advanced/actions/hosted-actions) sections.
{% endupdate %}

{% update date="2026-05-14" %}

## Unified Navigation

The navigation side-bar is now simplified.

### What changed

* All tabs are now accessible via a unified side-bar.
  {% endupdate %}

{% update date="2026-04-20" %}

## New upload methods in Add Knowledge

You now have more ways to add content in **Add Knowledge**.

### What changed

* **Add files from Granola and Obsidian.** Find them under **Files & Notes** in **Add Knowledge**. Updates stay in sync in Delphi.
* **Add videos from Loom or Vimeo.** In **Add Knowledge**, click **URL** and paste the video link.
  {% endupdate %}

{% update date="2026-03-28" %}

## Settings Updates

A small update: **Mind Settings** is now called **Response Settings**.

It used to be available from the gear icon on the Knowledge page.

Now you’ll find it on the **Settings** page instead.

You will also find **Voice** in the Response Settings.

Disclaimer Messages are no longer in Settings - they are under Integrations.

### What changed

* **Updated name:** **Mind Settings** is now **Response Settings,**
* **Old location:** the gear icon on the Knowledge page.
* **New location:** the **Settings** page.
* **Voice** is now in the Settings tabs.
* **Disclaimer Messages** are now on embeds only.
  {% endupdate %}

{% update date="2026-03-03" %}

## Add Knowledge naming

We renamed **Add to Mind** to **Add Knowledge**.

### What changed

* **New label in the app:** you’ll now see **Add Knowledge** in navigation.
  {% endupdate %}

{% update date="2026-03-03" %}

## Free tier is live

You can now start using Delphi on the free tier immediately.

### What changed

* **No more waitlist.** Start a free tier account directly from the Pricing page.
* **SMS identity verification required.** Available for **US, UK, and Canada** phone numbers.
* **Outside US/UK/CAN:** you can still purchase a subscription.
  {% endupdate %}

{% update date="2026-03-03" %}

## Training Mode

Training Mode helps you improve your Delphi by giving feedback in plain language. You can say things like “be more concise” or “that’s wrong”. Delphi will suggest actions to apply the change.

### How to use it

1. Open a chat with your Delphi.
2. Set the toggle above the text input to **Training** (instead of Preview).
3. Ask your questions as usual.

### When something’s wrong or uncertain

Use either approach:

* Reply with a direct correction, like “That’s wrong” or “Instead, say…”.
* Click **Improve this response** under the message.

After you submit your changes, ask again to test the updated response. Repeat as needed.
{% endupdate %}

{% update date="2026-02-23" %}

## Unified Navigation

Navigation now works the same way across Delphi. The goal is fewer surprises and faster movement between key areas.

### What’s new

* **One menu across Delphi.** The same navigation shows up on the main pages.
* **Key tabs are front and center.** Explore, Conversations, Profile, and Add Knowledge are easier to spot.
* **Less-used tools moved into “More.”** A cleaner menu, with extras one tap away.
* **Better on mobile.** The layout is simpler and more consistent on smaller screens.
  {% endupdate %}

{% update date="2025-09-01" %}

## Removing Video Avatars

We removed video functionality from Delphi in September 2025.

After careful evaluation, we found it wasn’t meeting our quality bar. It also wasn’t delivering the experience you deserve. The underlying tech is not yet where it needs to be.

I’m sorry for the inconvenience. We’re exploring better solutions now. We plan to bring back an improved video feature in the future. When we relaunch it, we’ll let users know.
{% endupdate %}
{% endupdates %}


