# Welcome

Learn about CodeWords and how to get started

{% embed url="<https://www.youtube.com/watch?v=rzZxj6ptJ7M>" %}

CodeWords is an AI-powered platform that helps teams and individuals build AI agents, workflow automations, and full websites/apps. Unlike traditional automation tools, CodeWords lets anyone create powerful systems using natural language.&#x20;

Simply describe what you want to build or automate, and CodeWords turns your prompts into intelligent agents, workflows, websites, and apps that can plan, execute, and deliver results autonomously.

### What makes CodeWords Different?

Traditional automation tools require you to manually build, manage, and maintain every step of a workflow. CodeWords lets you build software through conversation. Just describe what you need, and Cody, your AI assistant, plans, builds, and delivers production-ready automations and apps inside a secure sandbox with internet access, automatic software installation, and 3000+ integrations.


# Plans and Pricing

CodeWords uses a flexible credit-based system designed to scale with your usage. Credits are consumed when building, editing, and running automations.

### How Credits Work

Every action in CodeWords uses credits based on the **complexity and resources required**.

Credits may be consumed when you:

* Build automations with Cody
* Edit workflows or agents
* Run workflows manually or automatically
* Use AI models, APIs, or browser automation

More advanced workflows may consume more credits depending on:

* Workflow complexity
* Number of steps
* Data size
* API and AI usage

You only pay for what you use. There are no idle fees or background charges.

After running a workflow, you can review your estimated usage, top categories, and a per-chat / per-workflow breakdown in [Settings → Usage](https://codewords.agemo.ai/#settings/usage).

### Available Plans

### Free Plan — $0

Perfect for getting started.

**Includes**

* Starter credits
* 100 workflow runs/month
* Unlimited projects
* Unlimited codewords.run domains
* Full code ownership
* Zero setup

**Best for:** Individual users, testing and experimentation, learning the platform.

{% hint style="warning" %}
CodeWords API access is not included on the Free plan. Free users can’t top up the wallet — upgrade to Pro or Business first.
{% endhint %}

### Pro Plan — $39/month ($390/year)

Best for builders.

**Includes everything in Free, plus**

* 60 credits monthly — 1.5x bonus
* 2,500 workflow runs/month
* On-demand credit top-ups: 1.5x
* Credit roll-overs
* Custom domains
* Remove CodeWords branding
* Access to WhatsApp integration

**Best for:** Freelancers, Founders, Power users, Small teams.

### Business Plan — $100/month

Best for power users.

**Includes everything in Pro, plus**

* 200 credits monthly — 2x bonus
* Unlimited workflow runs
* On-demand credit top-ups: 2x
* Credit roll-overs
* Priority support
* Full access to Business Templates
* Cody for Business (white labeling)

**Best for:** Growing teams, Operations workflows, High-volume automation usage.

For enterprise usage and custom arrangements, contact [sales@codewords.ai](mailto:sales@codewords.ai?subject=Custom%20Plan%20Inquiry).

### Annual Plans

Annual subscriptions are available at up to 17% off monthly pricing. For example, the Pro plan is $390/year ($32.50/month) instead of $39/month.

Annual plans are ideal for teams and businesses with predictable automation usage throughout the year.

### Wallet and Plans in Settings

Wallet and Plans are separate tabs inside the Settings modal (opened from the account button at the bottom of the sidebar):

* [**Wallet**](https://codewords.agemo.ai/#settings/wallet-plans) — balance, top-ups, auto top-up, and plan usage
* [**Plans**](https://codewords.agemo.ai/#settings/plans) — compare Free / Pro / Business and upgrade, downgrade, or reactivate

{% hint style="info" %}
Settings opens as a modal on top of your current page. Closing it leaves you where you were — it doesn’t send you to a separate settings URL path.
{% endhint %}

### Credit Top-Ups

Top-ups are available on **Pro** and **Business** only. Free users are guided to the Plans tab instead.

To top up:

1. Open [Wallet](https://codewords.agemo.ai/#settings/wallet-plans), or go straight to [Top up](https://codewords.agemo.ai/#settings/wallet-plans/top-up).
2. Choose a preset (**$25**, **$50**, **$100**, or **$300**) or enter a custom amount (minimum **$10**).
3. Check the preview for how many credits you’ll receive — paid plans get a bonus multiplier.
4. Click **Continue to Payment** to finish in Stripe.

| Plan     | Top-up bonus                 |
| -------- | ---------------------------- |
| Free     | Can’t top up — upgrade first |
| Pro      | 1.5x                         |
| Business | 2x                           |

Credits from top-ups land in your wallet right away and stay there until you use them.

### Auto Top-Up

On Pro and Business, you can turn on **Auto Top-Up** in Wallet so CodeWords can recharge your balance when it gets low.

* Pick **$25**, **$50**, or **$100**, then confirm.
* Use **Change Amount** anytime while Auto Top-Up is on.
* Turn it off to stop automatic recharges.

On Free, the switch is disabled — upgrade to Pro or Business to use it.

### Monitoring Usage

To see how credits are being spent, open [Settings → Usage](https://codewords.agemo.ai/#settings/usage) from the sidebar account menu.

Usage shows:

* **Cycle spend** — total credits used in the current billing cycle, with a daily bar chart split by **Chat** and **Runs**.
* **Wallet, Plan, and Top Category** — your current balance, subscription tier, and where most credits are going.
* **Day-by-day breakdown** — click any day to see every chat and workflow run that consumed credits that day.

{% hint style="info" %}
**Usage** and **History** are different surfaces. Usage (in Settings) is about credit spend. The Wallet FAQ link labeled **History** goes to the [Activity](https://docs.codewords.ai/automations/activity) page (`/activity`) for run logs and schedules — not the Usage tab.
{% endhint %}

See the dedicated [Usage](https://docs.codewords.ai/automations/usage) guide for a full walkthrough.

### Optimizing Credit Usage

Get the most value from your credits with these best practices:

<table data-header-hidden><thead><tr><th width="244">Tip</th><th>Description</th></tr></thead><tbody><tr><td>Be Specific with Your Requests</td><td><br>Clear, well-defined tasks help Cody work more efficiently, reducing unnecessary iterations and credit consumption.</td></tr><tr><td>Batch Similar Tasks</td><td>When possible, combine related tasks into a single request rather than multiple separate tasks. This reduces overhead and credit consumption.</td></tr><tr><td>Review Intermediate Results</td><td>For complex multi-phase tasks, review intermediate outputs before proceeding. This prevents wasted credits on work that might need adjustment.</td></tr><tr><td>Long chat threads cost more to process.</td><td><p>Start a new chat for each new agent or build.</p><p>If a thread gets long, continue in a new one. Your context stays available, so Cody still understands what you have been building.</p></td></tr><tr><td>Use cheaper models when the task allows</td><td>Some tasks do not need the most expensive model. Ask Cody whether it can switch to a cheaper model for the same task. Keep the output quality bar in mind. Use lower-cost models where they still meet your needs.</td></tr></tbody></table>

#### Expect building to cost more than running

Building usually costs more than ongoing usage. That includes planning, editing, testing, and iterating.

{% hint style="info" %}
Use one chat per agent/project when possible. This is the easiest way to keep build costs down.
{% endhint %}

Once your agent is working well, the cost to run it is generally much lower.

Try prompts like:

> Keep cost in mind while building this.

> Can you suggest a cheaper way to build this workflow?

> Can you use a lower-cost model here without reducing output quality too much?

### Credit Rollover and Expiration

Unused subscription credits continue rolling over between billing cycles while your subscription remains active.

Top-up credits remain in your wallet until used.

Credits are prepaid, non-refundable, and non-redeemable for cash, in line with standard industry practices.

For more details, please refer to our [Terms and Conditions](https://www.codewords.ai/terms-conditions).

### Managing Your Subscription

Upgrade, downgrade, or reactivate from [Settings → Plans](https://codewords.agemo.ai/#settings/plans).

* Upgrades take effect right away.
* Downgrades take effect at the end of the billing period.
* Toggle **Monthly** / **Annual** on the Plans tab (annual shows up to 17% off).

For payment methods and invoices, use [Settings → Billing](https://codewords.agemo.ai/#settings/billing) → **Manage billing**.

If you downgrade to the Free plan, any remaining credits in your wallet stay available until used.


# How to reduce costs

Practical ways to keep credit usage lower while building and running in CodeWords.

Keeping costs low starts with how you build.

Most credit usage happens while Cody is actively building, editing, and testing. Once an agent is ready, ongoing run costs are usually much lower.

### Best ways to reduce costs

#### Keep chat threads short

Long chat threads cost more to process. Start a new chat for each new agent or build.

If a thread gets long, continue in a new one. Your context stays available, so Cody still understands what you have been building.

{% hint style="info" %}
Use one chat per agent when possible. This is the easiest way to keep build costs down.
{% endhint %}

#### Ask Cody to optimize for cost

Tell Cody to keep cost in mind before or during a build. This works best when you are starting a new build.

You can ask for:

* Lower-cost approaches
* Simpler workflows
* Fewer unnecessary steps

#### Use cheaper models when the task allows

Some tasks do not need the most expensive model. Ask Cody whether it can switch to a cheaper model for the same task.

Keep the output quality bar in mind. Use lower-cost models where they still meet your needs.

#### Expect building to cost more than running

Building usually costs more than ongoing usage. That includes planning, editing, testing, and iterating.

Once your agent is working well, the cost to run it is generally much lower.

### Example prompts

Try prompts like:

* `Keep cost in mind while building this.`
* `Can you suggest a cheaper way to build this workflow?`
* `Can you use a lower-cost model here without reducing output quality too much?`

### Quick summary

To reduce costs:

* Start fresh chats often
* Ask Cody to optimize for cost
* Use cheaper models when possible
* Track spend in [Settings → Usage](https://codewords.agemo.ai/#settings/usage)


# Security

Your security, safety, and privacy are our top priority.

CodeWords takes a security-by-design approach to protecting your data. Our team is continuing to make investments so you can use CodeWords with confidence.

We're currently in the process of getting our SOC 2 Type II compliance.

These are the security measures and processes we've implemented:

**Business continuity**

* Ongoing internal education and compliance updates
* Comprehensive recovery plans
* Active communication procedures to our customers
* Regular release notes and product updates

**Data governance and privacy**

* Privacy by design principles
* Transparent data handling
* Regular access reviews and monitoring
* Data classification and retention policies

You can access our full [Privacy Policy](https://codewords.ai/privacy-policy), [Terms and Conditions](https://www.codewords.ai/terms-conditions), [Data Processing Agreement](https://drive.google.com/file/d/1En8w4yStMyDWVoZWK9kbxOhHpIh4ff5A/view) to read more.

**Security operations**

* Regular testing and code reviews
* Continuous integration of security measures in development pipelines
* Documented response procedures
* Automated alert systems for rapid response


# Referral Program

Everything you need to know about our Referral Program, including Terms and Conditions.

### **About**

Our Referral Program lets you share the CodeWords love with your friends and colleagues.

**How it works:**

1. Share your invite link with a friend.
2. Your friend gets starter credits when they sign up.
3. You get 100 credits when they subscribe to a paid plan at full price. You do not earn credits when they only sign up.

Referral credits are added to your account as soon as your friend subscribes. There may be a slight delay, but they usually appear right away.

### Terms and Conditions

* We might change, pause, or end the referral program at any point (we're experimental like that).
* If we spot sketchy activity, we'll pause rewards or shut down your referral link. We'll catch you, we love looking at the analytics.
* You get 100 credits only when your referral subscribes to a paid plan at the full price. If they use a discount coupon or subscribe at a discounted price, you won't receive the 100 credits.
* Keep it cool — don't spam, mass-message, or drop your link where it doesn't belong. This program exists to share the love, not bug.
* All rewards are at the discretion of Agemo AI LTD.


# Quickstart

Here's a quick guide to all the CodeWords features to get you started.

1. **Visit** [**codewords.ai/login**](https://codewords.agemo.ai/login) and sign in
2. **Start a new chat** to create your first automation
3. **Describe your automation idea** in natural language (or ask Cody for ideas!)
4. **Review the output** and iterate as needed by asking in the chat

### Prompt: Describe your idea <a href="#prompt-describe-your-idea" id="prompt-describe-your-idea"></a>

Head to the chat interface and start by describing what you want to build in natural language. CodeWords will clarify the automation idea with you and build it end-to-end.

Try these simple prompts to get started:

* **"A workflow that monitors feature launches on my competitor websites"**
* **"A workflow that extracts the transcript from YouTube videos"**
* **"A workflow that enriches my LinkedIn name list with contact info"**
* **"A workflow that sends this form when someone submits an inquiry"**

### Iterate: Refine your automation <a href="#iterate-refine-your-application" id="iterate-refine-your-application"></a>

Once CodeWords has built your automation, you can iterate, update, and improve it through conversation.

For example:

* **Change the output destination** to a different app (e.g., Slack)
* **Add further conditions** to your workflow automation
* **Ask for changes** in natural language: "Add a email addresses to the enrichment process"

### Testing, debugging, and deploying <a href="#iterate-refine-your-application" id="iterate-refine-your-application"></a>

CodeWords builds and develops your workflow automation end-to-end.

What this means:

* **Testing:** CodeWords tests your workflow at every stage.
* **Debugging:** When CodeWords detects an error, it automatically starts debugging the issue and continues doing this until it finds and implements a solution.
* **Deploying:** After you've confirmed you're happy with the built automation, CodeWords will deploy it for you. When something is deployed, you'll see CodeWords confetti!

### Graph view

When you're building an automation in the chat, CodeWords will generate a graph view that contains all the nodes and conditions. Other tools would usually require you to drag, drop, and configure these nodes. Instead, CodeWords builds them for you end-to-end.

Click an integration node to connect to that integration in a couple of clicks.

<figure><img src="/files/l8zUIILkyxjGvdpAVc1t" alt=""><figcaption></figcaption></figure>

### Code view

While CodeWords builds your automation, it also writes the code for you.

Click the code view at the top of the graph section to see your workflow's code.

You can also export it.

<figure><img src="/files/NbJnz6znJSiVZrO1HTN9" alt=""><figcaption></figcaption></figure>

### Chat mode <a href="#iterate-refine-your-application" id="iterate-refine-your-application"></a>

Sometimes you might want to use CodeWords for web scraping, as a chat, or without building a workflow automation.

You can declutter your chat view by clicking `Chat only view` and expand the chat area.

<figure><img src="/files/HpSdi05Ap22jLXf0WkZ7" alt=""><figcaption></figcaption></figure>

### Templates <a href="#iterate-refine-your-application" id="iterate-refine-your-application"></a>

CodeWords templates are pre-built workflow automations that are ready for you to use.

Clicking on a template will take you straight to its run page. Here you can add custom inputs to run the workflow, or you can click the `Edit` button to update it or customize it for your use case.

There are two main locations where you can access automation templates:

* **Template Gallery** - This contains all the pre-built automations from the CodeWords community.
* **My Workflows** - These are all your automations. When you finish building an automation with CodeWords, you'll be given a URL that takes you straight to your workflow run page. You can access all of these here.

<figure><img src="/files/HG3ELVvt7J8LIaAa6Hax" alt=""><figcaption></figcaption></figure>

### AI Models <a href="#iterate-refine-your-application" id="iterate-refine-your-application"></a>

CodeWords gives you access to all the latest AI models.

You can ask Cody in the chat interface to use a specific AI model. For example, if you'd prefer to use Claude for your output, you can do so by asking while you're building that automation.

CodeWords has access to a growing number of AI models, including:

* Anthropic models (Claude Opus, Sonnet, Haiku)
* OpenAI models (GPT-5, GPT-4.1, o3, o4-mini)
* Google Gemini models (text generation, image generation with Imagen 4, video generation with Veo)
* Audio (transcription with Whisper, text-to-speech)
* Perplexity (search-grounded AI)

You can ask Cody in the chat if you're wondering whether CodeWords has access to a specific AI model.

### FAQs

<details>

<summary>Do I need coding experience to use CodeWords?</summary>

No. Everything in this guide can be done with plain English prompts. CodeWords automatically builds the logic, connects integrations, and handles deployment behind the scenes.

</details>

<details>

<summary>How long does it take to learn CodeWords?</summary>

Most users learn and build their first automation in under 10 minutes. CodeWords has been designed so there's no learning curve for users, regardless of technical background.

</details>

<details>

<summary>What kind of web pages work best for web scraping?</summary>

You can use any publicly accessible, text-based website — like blog posts, articles, or documentation pages. Avoid paywalled or login-protected pages. For authenticated content, you can use the [Web Agent](https://docs.codewords.ai/features/web-agent) or the [CodeWords Chrome extension](https://docs.codewords.ai/features/chrome-extension).

</details>

<details>

<summary>Can I customize what gets summarized or how the output looks?</summary>

Yes. You can adjust the AI prompt to change what the output looks like. For example: "write a short summary," "list three key points," etc.

You can also change the details according to your workflow type. For example, if your workflow output is an email, you can change the email recipient, subject, or format from the workflow chat.

</details>

<details>

<summary>What if something doesn't work as expected?</summary>

Check that your connected apps and integrations (Gmail, Web Agent) are authorized and active.

You can also ask Cody, the CodeWords AI automation assistant, to check what's not working. Provide the context about the error, and ask Cody to fix it from the chat interface.

</details>

### Next Steps

Now that you've finished the Quickstart, you can:

* Meet [Cody, the AI automation assistant](https://docs.codewords.ai/automations/readme)
* Learn how [Triggers](https://docs.codewords.ai/automations/schedules-and-triggers) work
* Explore [Templates](https://docs.codewords.ai/automations/readme)


# Build your first automation

Build your first CodeWords automation using LinkedIn extraction, AI summarization, and Gmail delivery.

This tutorial walks you through building a workflow that pulls someone's LinkedIn profile, summarizes their background with AI, and emails the summary to your Gmail inbox.

No coding required. Most users finish this in under 10 minutes.

## What you'll need

A CodeWords account (free tier works) and a Gmail account. You do not need a LinkedIn account. CodeWords can pull public LinkedIn profile data directly.

## Step 1: Describe your automation idea

Open a new chat and describe what you want to build. Be specific about the inputs, processing, and output.

> "Build a workflow that takes a LinkedIn profile URL, extracts the person's work history and skills, summarizes it with AI, and emails the summary to my Gmail."

Cody reviews your request and puts together a plan:

* **LinkedIn extraction**: Pull the person's name, headline, work history, education, and skills from their profile.
* **AI summarization**: Generate a concise overview of their professional background.
* **Email composition**: Format the summary into a readable email.
* **Gmail delivery**: Send it to your inbox.

Once you approve the plan, Cody starts building.

## Step 2: Cody builds the LinkedIn extraction

Cody uses CodeWords LinkedIn Intelligence to pull structured profile data. This works on any public LinkedIn profile, and no login or Chrome Extension is needed.

What Cody builds:

* Accepts a LinkedIn profile URL as input.
* Extracts structured data: name, headline, work history, education, skills, and certifications.
* Returns clean, organized data ready for summarization.

### Test example

Input: `https://www.linkedin.com/in/satya-nadella/`

Results:

* Valid LinkedIn URL recognized
* Profile data extracted successfully
* Four work history entries, two education entries, and 12 skills found
* Completed in about 15 seconds

## Step 3: Add AI summarization and Gmail delivery

What Cody adds:

* Processes the extracted profile data with an AI model
* Generates a professional summary covering career trajectory, key skills, and current role
* Connects securely to Gmail using OAuth authentication
* Composes and sends an email with the person's name as the subject and the summary in the body

### Gmail connection

When Cody needs to connect to Gmail, it asks you to authorize access. This is a one-time step, and you usually do not need to repeat it for future automations that use Gmail.

### Test results

* Summary generated successfully
* Gmail connection verified (`your.email@gmail.com`)
* Email formatted and delivered correctly

## Step 4: Full end-to-end test

Cody runs the complete workflow to make sure everything works together:

* LinkedIn profile extracted successfully
* AI-generated summary is concise and accurate
* Gmail message delivered with correct formatting and a link back to the profile

Cody then asks whether you are happy with the results:

* "Yes, it's exactly what I wanted." Cody deploys your automation.
* "I'd like to make adjustments." Tell Cody what to change, for example: "Make the summary shorter" or "Add their education details to the email."

## Step 5: Deployment

Once confirmed, Cody deploys your automation and gives you a unique URL for its run page:

`https://codewords.agemo.ai/run/linkedin-profile-summarizer-xyz789`

From the run page, you can:

* Run the automation with any LinkedIn profile URL
* Click Remix to modify or improve it
* Set up a schedule to run it automatically
* Share it with your team

## What you built

| Step      | What happens                                                              |
| --------- | ------------------------------------------------------------------------- |
| Input     | You provide any public LinkedIn profile URL                               |
| Extract   | CodeWords pulls structured profile data (work history, education, skills) |
| Summarize | AI generates a professional background summary                            |
| Deliver   | The summary lands in your Gmail inbox, formatted and ready to read        |

## Troubleshooting

### LinkedIn extraction issues

* Invalid URL: Make sure the URL follows the format `https://www.linkedin.com/in/username/`
* Empty results: The profile may be set to private. Try a different public profile.
* Partial data: Some profiles have limited public information. The summary still works with available data.

### AI summary issues

* Summary too long or short: Ask Cody to adjust it, for example: "Make it a three-bullet summary" or "Write a single paragraph."
* Missing details: Ask Cody to include specific sections, for example: "Include their education" or "Focus on their last three roles."

### Gmail delivery issues

* Permission error: Re-authorize the Gmail integration from your account settings.
* Email not arriving: Check your spam or junk folder.

## What's next

Now that you have built your first automation, try these:

* Change the output: "Send the summary to Slack instead of Gmail."
* Add more data: "Also include their recent LinkedIn posts."
* Process multiple profiles: "Run this for a list of 10 LinkedIn URLs and save results to Google Sheets."
* Explore templates: Browse the [Template Gallery](https://codewords.ai/templates) for more ideas.


# Introduction to Cody

Meet Cody, your AI automation assistant. Chat to build, edit, and automate workflows or AI agents instantly — no code required.

### What is Cody?

Cody is your AI automation assistant. You describe what you want in plain language, and Cody builds the workflow or agent — real automation code, not drag-and-drop blocks.

Cody collaborates with you to understand the goal, handles multi-step logic, and connects the apps you need.

### How it works

#### 1. Understanding your needs

Describe what you want to achieve.

Cody figures out the steps, logic, and integrations, then shows a clear plan as a todo list. You review, edit, and approve before building starts.

#### 2. Clarifying questions

If Cody needs more context, it asks follow-up questions so the final automation matches what you intend.

#### 3. Building the workflow

Once you approve, Cody writes the code and connects integrations. You’ll be prompted to connect any app Cody doesn’t already have access to.

You don’t have to write the code yourself — Cody handles the technical details.

#### 4. Testing, debugging, and deploying

Cody deploys your automation and runs tests against real data. If something fails, it reviews the logs, finds the cause, and applies fixes.

### What you can do

* **Build new workflows** — Describe lead tracking, content generation, or any other idea, and Cody builds it end-to-end.
* **Modify existing workflows** — Add steps, connect different apps, or refine logic in chat.
* **Debug and optimize** — When something doesn’t work, Cody inspects logs and helps you fix it.
* **Connect other platforms** — Integrate with external apps, or with custom apps built on tools like Lovable, Bolt, and v0.

### Why Cody is different

#### Conversational automation

Instead of drag-and-drop blocks or long forms, you build by talking. Describe the goal in English; Cody turns it into a working automation.

#### Real code without coding

Most automation tools stick to predefined actions. Cody generates real Python automation code, so it can handle complex logic, multi-step flows, and deeper API integrations.

You get the flexibility of code with the ease of conversation.

### FAQs

<details>

<summary>Do I need coding experience to use Cody?</summary>

No. You describe what you want, and Cody handles the code behind the scenes.

</details>

<details>

<summary>What kinds of workflows can Cody create?</summary>

Anything from lead tracking and report generation to AI agents that analyze data, send alerts, or integrate with Slack, Notion, Google Sheets, and more.

</details>

<details>

<summary>Can Cody fix or debug workflows automatically?</summary>

Yes. Cody reviews logs, identifies the issue, and applies fixes — no manual debugging required.

</details>

<details>

<summary>How is Cody different from traditional automation tools?</summary>

Cody doesn’t rely on drag-and-drop blocks. It generates real, production-grade code that supports advanced logic and multi-step automation.

</details>

<details>

<summary>How do I set how Cody responds to me?</summary>

Open [Settings → Personalization](https://codewords.agemo.ai/#settings/personalization) and write **Custom instructions** — for example your role, preferred tone, or tech stack. Cody applies them across chats. See [Account](https://docs.codewords.ai/help-center/billing/account) for examples and details.

</details>


# How Cody Works

Learn how Cody automatically switches between Chat, Plan, Build, and Debug modes, and what to expect in each stage of your request.

Cody operates in four modes that shape how it approaches your request. The mode switches automatically. You just describe what you need.

| Mode  | Purpose                                                     | Activates when                                              |
| ----- | ----------------------------------------------------------- | ----------------------------------------------------------- |
| Chat  | Explore, research, answer questions, run existing workflows | Every conversation starts here                              |
| Plan  | Structure complex tasks before building                     | Multiple integrations, APIs, or scheduled data are involved |
| Build | Create workflows, apps, and automations                     | You ask Cody to create or significantly change something    |
| Debug | Fix broken workflows                                        | You report an error or something stops working              |

### Chat Mode

Chat is the starting point for every conversation. Cody stays here until you ask it to build something concrete.

Think of Chat as the research and discovery phase. Cody gathers context, answers questions, and validates integrations before committing to building.

### What Cody does in Chat

* Answers questions about the platform, integrations, and what is possible
* Researches topics using web search, documentation, and page scraping
* Runs your existing workflows when you point to them
* Tests integrations and APIs to validate they work before building
* Browses websites and extracts data on demand
* Searches your past conversations to recall previous work
* Collects credentials securely (never in plain chat text)

### What Cody will not do in Chat

* Edit or deploy code (that is Build mode)
* Fix bugs in existing services (that is Debug mode)
* Start building before understanding what you actually need

Before leaving Chat mode, Cody confirms requirements, checks relevant docs, tests integrations, collects credentials securely, and gets your agreement on what will be built.

### Plan Mode

Complex builds only.

When a request is complex enough to need structure, Cody creates a plan before writing code. This happens automatically.

#### When planning kicks in

* The build involves more than one integration (for example, Slack plus Google Sheets)
* Multiple external APIs need to be coordinated
* The workflow runs on a schedule or responds to triggers
* Both a frontend app and a backend service are needed

#### What the plan includes

A visual plan appears in the canvas panel covering:

* What will be built and how components connect
* Which integrations are involved and what access is needed
* How data flows from input to output
* Cost estimates where applicable
* What Cody needs from you (credentials, preferences, access)

Cody describes the outcome, not low-level implementation details. You approve the plan, then Cody handles the build.

Simple requests (single integration, straightforward logic) can skip planning and move directly to Build mode.

### Build Mode

Creating and deploying.

This is where things get made. Cody writes code, creates services, builds apps, deploys them, and runs automated tests in the background while staying engaged in conversation.

#### What gets built

| Request type                                 | What gets built                                                           |
| -------------------------------------------- | ------------------------------------------------------------------------- |
| Dashboard, landing page, or interactive tool | Web app (Next.js, TypeScript, Tailwind CSS) deployed to `*.codewords.run` |
| Automation, data pipeline, or scheduled task | Python backend service deployed to CodeWords                              |
| Interactive app with processing power        | Both frontend and backend service                                         |

#### Build pipeline stages

1. Research: finds relevant templates, integration patterns, and API docs
2. Build: writes the code (typically 5-17 minutes)
3. Deploy: makes it live
4. QA: runs automated tests
5. Deliver: presents the working result with a live demo

#### What you experience during build

While build runs in the background, Cody stays in conversation:

* It may ask you to connect an integration (OAuth popup appears in chat)
* It collects credentials through secure input (never plain text)
* It may ask configuration questions that shape the result, for example:
  * Which Slack channel should this post to?
  * What timezone are you in?
  * Do you want a custom domain like `my-dashboard.codewords.run`?

These questions are optional. If you step away, Cody uses sensible defaults and continues.

#### When build finishes

* For web apps: a live preview appears in canvas, then Cody asks for approval before production deployment.
* For backend workflows: Cody runs a realistic test once, then shares the URL you can trigger anytime.

If tests detect a problem, Cody investigates and fixes it when possible, or explains the exact input needed from you.

### Version control

Every build creates a version. Cody can roll back to previous versions if needed.

### Debug Mode

Fixing what is broken.

When something fails, Cody shifts to a surgical debugging approach. Instead of rerunning everything, it isolates the failing component and fixes that piece first.

#### How debugging works

1. Read: check logs, requests, and error details
2. Isolate: reproduce only the failing component
3. Understand: explain root cause in plain language
4. Fix: make the smallest necessary change
5. Test: verify the fix and run end-to-end validation
6. Regression test: confirm other behavior is still correct

#### Why isolation matters

If a workflow has five steps and step four fails, Cody tests step four first. This is faster, cheaper, and easier to diagnose than rerunning all five steps repeatedly.

#### Batch failure handling

When processing many items and some fail (for example, 100 items with 5 failures), Cody:

* Isolates one failing item
* Reproduces and fixes the issue
* Verifies on 2-3 more failing items
* Re-runs the full batch only after confidence is high

#### When Debug mode ends

* Issue fixed and confirmed: returns to Chat
* Issue requires redesign: transitions to Build
* Still blocked after repeated attempts: pauses, explains, and asks how you want to proceed

### How Modes Flow Together

#### Complex project

**Chat** -> **Plan** -> **Build** -> **Debug (if needed)** -> **Chat**

You describe the goal. Cody researches, asks clarifying questions, presents a plan for approval, builds and deploys, fixes issues if needed, and then suggests next steps.

#### Simple request

**Chat** -> **Build** -> **Chat**

If the request scope is clear and straightforward, Cody skips planning and builds directly.

#### Bug report

**Chat** -> **Debug** -> **Chat**

You report a failure, Cody investigates and fixes it, then confirms results.

### What Triggers Each Mode

| What you are doing                                                  | Mode  |
| ------------------------------------------------------------------- | ----- |
| Exploring ideas, asking what is possible, asking for cost estimates | Chat  |
| Running existing workflows, checking results, managing schedules    | Chat  |
| Asking Cody to research a topic or scrape a page                    | Chat  |
| Requesting work with multiple integrations or scheduled data        | Plan  |
| Asking Cody to create a workflow, app, or automation                | Build |
| Requesting major changes or new features in an existing service     | Build |
| Reporting an error or saying something is not working               | Debug |


# The building process

CodeWords handles the building process for your automations. This page covers the details of how prompting, clarifying, and deploying work.

You can get started by prompting — describe what you want, and Cody builds it with you. For a quick start, see [Quickstart](https://docs.codewords.ai/quickstart) and [Build your first automation](https://docs.codewords.ai/build-your-first-automation).

### Prompt: Describe your idea

Head to the chat and describe what you want to build in natural language. Cody clarifies the idea with you and builds it end-to-end.

Try prompts like:

> “A workflow that monitors feature launches on my competitor websites”

> “A workflow that extracts the transcript from YouTube videos”

> “A workflow that enriches my LinkedIn name list with contact info”

> “A workflow that sends this form when someone submits an inquiry”

If you’re not sure what to build, ask Cody for ideas. Share a problem you’re trying to solve, a repetitive task that creates friction, or what your job looks like day to day.

### Collaboration with Cody

Once you’ve decided what to build, Cody asks clarifying questions to refine the idea before building.

For example:

* Where should the output go?
* How often should this workflow run?
* What should the focus of this workflow be?

You can skip a question or let Cody decide.

When you’re ready, Cody asks if it should start building. Confirm, or keep iterating in chat first.

Cody also asks whether you want to build first and test later, or test as it builds. Either way, Cody still tests the workflow and debugs errors automatically.

#### Todo lists

When Cody starts building, it produces a todo list — an overview of the steps to reach the finished automation. You can see what’s done, in progress, and still to do.

#### Using your deployed workflow

When Cody deploys the workflow, it gives you a unique URL to the run page so you can start using it right away.

You can also find and manage workflows in the [Projects](https://codewords.agemo.ai/workflows/library) tab.

<figure><img src="/files/RcrcQzGlnWry2SleAAMl" alt=""><figcaption></figcaption></figure>

#### Making changes

To adjust a deployed workflow, go back to your chat with Cody and ask for edits. The building process restarts — this time to update the existing workflow.


# Running automations

Learn the different ways you can run CodeWords workflows — from chat, from the run page, or automatically with schedules and triggers.

### Ways to run a workflow

There are a few ways to run workflow automations in CodeWords.

**Run from chat**

In the chat where the workflow was built, click **Run**. That’s the fastest way to see how it performs and check you’re happy with the output.

**Run page**

Each time a workflow executes (manually, on a schedule, or via a trigger), a run page is generated. Each run page includes:

* **Integrations** — check whether connections are required to run the workflow
* **Input fields** — enter your data or reference points
* **Run button** — available once required inputs are filled in
* **Workflow logs** — see which step is in progress as the run updates
* **Output** — the result when the run finishes
* **Error details** — if the run failed, so you can go back to chat and ask Cody to fix it

If an automation doesn’t behave as expected, head back to the chat, reference the workflow, and ask Cody to fix it.

### Schedules and triggers

You can run a workflow manually, or set up a schedule or trigger so it runs on its own.

See [Schedules and triggers](https://docs.codewords.ai/automations/schedules-and-triggers) for the full walkthrough.

<figure><img src="/files/ZQzP8OvmYqORUSiYGBqW" alt=""><figcaption></figcaption></figure>


# Schedules and triggers

You can run workflows automatically by setting up schedules and triggers.

### Overview

You’ve already seen how to [run automations](https://docs.codewords.ai/automations/running-automations) manually. You can also set up schedules and triggers so automations run in the background.

* **Schedules** — run at a specific time and frequency (for example, every day at 9am)
* **Triggers** — start when something happens (for example, a Slack reaction)

Together, they let you build systems that keep running around your day-to-day work.

### Schedules

Schedules run workflows automatically at set intervals — ideal for reports, reminders, or maintenance tasks.

Set your timezone in [Settings → Account](https://codewords.agemo.ai/#settings/profile) so scheduled workflows match your local time. The Activity **Scheduled Runs** list still shows times in UTC.

You can choose how often the automation should run:

* Hourly
* Daily
* Weekly
* Monthly
* Custom interval

#### Setting up schedules

Open your automation’s run page and select **Schedule** in the top-right corner.

From there:

* Decide how often it should run — once at a specific time, or on a recurring schedule
* Finish adding any inputs
* Choose whether you want email confirmations when the workflow runs
* Click **Save**

While you’re building with Cody in chat, you can also ask Cody to set up the schedule for you.

<figure><img src="/files/7CENKJFNUNWhTabm0aFm" alt=""><figcaption></figcaption></figure>

#### Managing schedules

Find all your schedules on the [**Scheduled Runs**](https://codewords.agemo.ai/workflows/schedule) page.

From there you can:

* See when a workflow last ran and when it’s next scheduled
* Search for schedules
* Toggle a schedule on or off
* Use the three-dot menu to edit, resume, delete, or disable email notifications

### Triggers

Triggers start an automation when a specific action happens — for example, a message is sent, a form is submitted, or a new record is created.

Ask Cody to set up a trigger while you’re building, or later as an edit. Once it’s set up, you can test it with Cody using real or sample data.

#### Examples of triggers

* **Slack** — new messages, reactions, or when someone joins a channel
* **WhatsApp** — messages to the shared CodeWords DM bot, group messages where the shared group bot is a member, messages from your connected WhatsApp number, and reactions
* **Gmail** — new emails, label changes, or draft creation
* **Google Calendar** — event creation, updates, or deletions
* **GitHub** — code pushes, new issues, pull requests
* **Notion** — page or database updates
* **Discord, HubSpot, Stripe, Airtable**, and many more

You don’t need to check support beforehand. Ask Cody to set a trigger up, or ask for examples. If your app supports event-based actions, CodeWords can likely trigger from it.

#### Managing triggers

Find all your triggers on the [**Triggers**](https://codewords.agemo.ai/workflows/triggers) page.

From there you can:

* Check whether a trigger is active and when it last ran
* Search for triggers
* See how often a trigger has fired
* Toggle a trigger on or off
* Use the three-dot menu to pause, delete, or disable email notifications

#### Custom webhooks

If your system isn’t natively supported, CodeWords can give you a custom webhook URL for external events. Any platform that can send HTTP POST requests with JSON data can call it.

Tell Cody which external system you want to connect — Cody generates and configures the webhook for you.

For more detail, see [Webhooks](https://docs.codewords.ai/automations/webhooks).

### When to use each

| Use case                                   | Best option          |
| ------------------------------------------ | -------------------- |
| Reacting instantly to new data or messages | Event-driven trigger |
| Running recurring reports or reminders     | Schedule             |
| Connecting unsupported systems             | Custom webhook       |

Event-driven triggers are best for responsive workflows. Schedules are ideal for predictable, time-based automation.

### FAQs

<details>

<summary>What if my app isn’t supported?</summary>

Use a custom webhook. Cody creates a URL you can connect to any system that sends HTTP POST requests with JSON data.

</details>

<details>

<summary>What apps can I use as triggers?</summary>

CodeWords supports thousands of event sources, including Gmail, Notion, GitHub, Stripe, and HubSpot. You can set up triggers for most popular apps without extra configuration.

</details>

<details>

<summary>Can I see or edit my active triggers?</summary>

Yes. Open the [Triggers](https://codewords.agemo.ai/workflows/triggers) page to manage, pause, or delete any active event-based automation.

</details>

<details>

<summary>Do triggers run even when I’m offline?</summary>

Yes. Once set up, triggers and schedules run in the background — no manual action needed.

</details>


# Graph and code views

Understand how your CodeWords workflows operate with Graph and Code Views — visualize data flow or inspect the underlying logic for transparency and control.

### Overview

Every automation you build in CodeWords has two perspectives:

* **Graph view** — a visual map of how your workflow runs
* **Code view** — the code and configuration behind it (written for you; no coding knowledge needed)

Use whichever view helps you understand what the workflow does.

### Workflow graphs

#### What is a workflow graph?

The **workflow graph** visually represents how your automation runs and works in a similar way to a flowchart.

It shows:

* How your workflow begins (manually, on a schedule, or through triggers).
* The sequence of steps it performs.
* The external tools, services, and integrations involved.
* How data moves from one step to another.

Each element is called a **node** and represents a step of your workflow. Nodes are connected by a connection thread that shows how data flows between steps.

Usually, automation tools require you to manually connect nodes by dragging, dropping, and configuring their connections. CodeWords doesn't require this: the nodes are mapped out and configured for you.

#### Why the graph view matters

**For non-technical users**

* **See the big picture:** Understand your workflow at a glance without reading any code.
* **Track progress:** Watch the workflow being built and tested step-by-step.
* **Communicate clearly:** Share the automation’s structure with teammates.
* **Spot issues early:** Cody tests each stage of your workflow and you can see that, if there are errors, Cody will work on fixing and retesting them.

#### What you’ll see in your graph

1. **Starting points**
   * Run manually: You start it when you're ready
   * Run on a schedule: Executes automatically (e.g., every day at 9 AM)
   * Run on a trigger: Fires when a specific event occurs (e.g., new email, form submission)
2. **Steps and actions**
   * Data processing, API calls, or AI-based analysis
   * Integrations such as Gmail, Slack, LinkedIn, or Google Sheets
3. **Decision points**
   * Conditional branches, e.g.,\
     If order = $1000< → notify finance team
4. **Integrations**
   * Visual icons indicate tools in use (Slack, Gmail, Notion, Stripe, etc.)
   * You can click an integration node to check whether it's connected yet
     * If it has an exclamation mark over it, click the node and select `Connect` to sort the integration connection

#### Accessing the graph view

When Cody (your AI automation assistant) builds a workflow, the graph updates automatically during each phase:

* **Planning:** Cody drafts the initial workflow outline as a visual graph
* **Building:** Any completed or active steps are updated live in the todo list
* **After Deployment:** The final graph serves as your visual reference

**To open it:** Select graph view in the workflow editor. The graph view is the default mode.

<figure><img src="/files/l8zUIILkyxjGvdpAVc1t" alt=""><figcaption></figcaption></figure>

### Code views

#### What is the code view?

The **code view** displays the Python code that defines and underpins your workflow’s behavior. It’s a text-based configuration showing every step, parameter, and integration. It's perfect for users who want technical insight or advanced control.

The code view is there if you want it, but it's not a requirement to use it.

#### Why it’s useful

* **Transparency:** See the exact logic behind each workflow step
* **Debugging:** Identify issues by reviewing the underlying script
* **Customization:** Fine-tune details not visible in the UI
* **Documentation:** Keep an accurate version of your automation logic

**To open it:** Click Code View in the workflow editor.

#### Viewing the code

You can easily access the code by selecting the code panel at the top of the chat interface.

It will only be visible once Cody has built your graph and written the associated code.

You can export the code and use it externally.

#### Code structure overview

Typical sections include:

* **Header:** Required integrations or dependencies
* **Inputs:** Variables or data sources used
* **Main Logic:** Step-by-step workflow logic
* **Outputs:** Results or returned data
* **Comments:** Human-readable explanations

<figure><img src="/files/ASGx9vr6dmd5SSma68WE" alt=""><figcaption></figcaption></figure>

### Putting it all together

| View Type      | Purpose                                    | Best For                        |
| -------------- | ------------------------------------------ | ------------------------------- |
| **Graph View** | Visualize what happens and in what order   | Non-technical users, reviewers  |
| **Code View**  | Understand *how* each step works in detail | Developers, technical debugging |

You can build, run, and monitor automations entirely through the visual graph, or you can dive into the code for deeper insight.

### FAQs

<details>

<summary>Do I need to understand code to use CodeWords?</summary>

No. The graph view exists so anyone can build and understand workflows visually.

</details>

<details>

<summary>When should I use the graph view?</summary>

The graph view is your default view when Cody is building your workflow.

You can use it for planning, reviewing builds, or troubleshooting unexpected results.

</details>

<details>

<summary>When should I use the code view?</summary>

Once the graph has been built, you'll be able to see the underlying code.

This is great if you're more technical and are debugging, want to export the code, or if you're learning how your automation works internally.

</details>

<details>

<summary>Can I modify the code?</summary>

Not directly. Instead, you can describe the change in plain English. Cody will update both the graph and code automatically.

</details>


# Sharing workflows

Share a CodeWords workflow with a friend, teammate, or anyone with a link.

### How to share a workflow

Once you’ve finished building, you can share the workflow with a friend, colleague, or anyone who would save time with it.

Open the workflow’s run page and click **Share** in the top-right corner.

#### Visibility and permissions

<figure><img src="/files/HrFdNAtDnb7DIbAgsrT4" alt=""><figcaption></figcaption></figure>

After you click Share, choose a visibility option:

* **Private** — only you can access this workflow
* **Selected access** — only people you invite can see it
* **Public** — anyone with the link can see it (handy for social posts)

If you choose **Selected access** or **Public**, you also control whether to share integrations and secrets. Leave that off if you don’t want to share API keys or other credentials.

* **Selected access** — add people by email, then share the link with them
* **Public** — copy the shareable link and send it anywhere

You can also share directly to **X** or **LinkedIn** from the share dialog.


# Version history and restore (chat)

Preview and restore earlier versions of automations you build with Cody in chat.

### Overview

When you build and change automations in chat with Cody, CodeWords keeps a version history. You can see what changed, preview an older version, and restore it if you want to go back.

That makes it safer to try ideas — you can undo without starting from scratch.

### What is version history?

* **Versions** are snapshots of your automation at different points in time (for example, after you or Cody made changes).
* **Version history** is the list of those snapshots — usually with a timestamp and a short description.
* Descriptions are often generated automatically so you can tell versions apart quickly.

### Viewing version history

In the chat where you’re building or editing:

1. Open **version history** (or **Versions**) from the chat header or menu.
2. Review the list — creation time, short description, and options to preview or restore.

You can also open versions from the project on the Projects page.

### Previewing a version

Before you restore, preview first:

1. Open version history.
2. Find the version you care about.
3. Choose **Preview**.
4. Review that version’s state (workflow steps, inputs, and so on).
5. Close the preview to stay on your current version, or choose **Restore**.

Preview lets you look without changing anything.

### Restoring a version

Restore makes an older version your current one again:

1. Open version history.
2. Find the version you want (preview if you’re unsure).
3. Choose **Restore** and confirm if asked.
4. Keep editing from that restored state.

Restoring doesn’t delete newer versions — they stay in history so you can switch again later.

### When to use version history

* You tried a change and want to undo it
* You want to compare an older idea with the current one (preview first)
* You need a known-good state after experiments
* You want to see what changed over time


# Activity

See chats, workflow runs, scheduled runs, and triggers in one place — open Activity from the sidebar.

### What is the Activity page?

Activity is where you see everything that has happened or is planned in your workspace: past chats, workflow runs, scheduled runs, and triggers. Open it from the sidebar by clicking **Activity** (history icon).

<figure><img src="/files/oG9Q1y9mVPIBP8Z6mqXP" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Activity is about **what ran and when**. For credit spend across chats and runs, use [Settings → Usage](https://docs.codewords.ai/automations/usage).
{% endhint %}

### What you can do there

The page has four tabs at the top.

**1. Chats**

* Past chat sessions
* Search and sort (newest or oldest first)
* Reopen an earlier conversation

**2. Run**

* Workflow runs (when a workflow actually ran)
* Search, sort by date or cost, filter by status (success, failed, running) and how the run started (scheduled, manual, or trigger)
* See what ran, when, and whether it succeeded

**3. Scheduled Runs**

* Upcoming and existing schedules
* Search by name or schedule details
* Times shown here are in UTC (set your timezone in [Settings → Account](https://codewords.agemo.ai/#settings/profile) for how schedules are planned)
* Manage what’s set to run automatically

**4. Triggers**

* Events that can start a run automatically
* Search and scroll to load more
* See what triggers exist and how they’re set up


# Usage

Track how you’re spending credits across chats and runs, see your top categories, and drill into a day-by-day breakdown of what each credit was spent on.

### What is Usage?

[Usage](https://codewords.agemo.ai/#settings/usage) lives inside Settings. It’s where you see how credits are being consumed — spend across chats and workflow runs, your wallet balance, your plan, and a day-by-day breakdown of what each credit went to.

Open it from the sidebar account menu (**Usage**), or go straight to [codewords.agemo.ai/#settings/usage](https://codewords.agemo.ai/#settings/usage).

{% hint style="info" %}
Usage is about **credit spend**. For run logs, statuses, and scheduled runs, use the [Activity](https://docs.codewords.ai/automations/activity) page (`/activity`). The Wallet FAQ link labeled **History** also goes to Activity — not this Usage tab.
{% endhint %}

### What you can do there

**1. Cycle Spend**

* Shows the total credits used in the selected billing cycle (e.g. *141.85 credits over 5,818 requests*).
* A bar chart breaks each day’s spend into **Chat** (credits spent while building or chatting with Cody) and **Runs** (credits spent executing workflows).
* Use the calendar dropdown to switch billing cycles.
* Hover **What counts as a request?** for a short explanation of request counting.

**2. Wallet, Plan, and Top Category**

* **Wallet** — your current credit balance available to spend.
* **Plan** — the subscription tier you’re on (Free, Pro, Business).
* **Top Category** — where you’re spending the most this cycle (e.g. *Chat — 137.20 credits · 97%*), so you can see at a glance whether credits are going into building or running.

**3. Day Breakdown**

* Click any bar in the chart to open that day’s breakdown.
* The header shows total credits and request count for the day.
* Each chat or workflow run is listed with its name, whether it was a **Chat** or a **Run**, and the credits it used.
* Click a charge row to jump to that chat or run. Settings closes when you navigate away.

### When to use it

* **Reviewing your spend** — see where credits went this cycle and which automations cost the most.
* **Optimising workflows** — spot any chat or run taking an unexpectedly large share of credits.
* **Planning top-ups or upgrades** — pair cycle spend with your wallet balance to decide when to top up or move to a higher plan. Top-ups live in [Wallet](https://codewords.agemo.ai/#settings/wallet-plans); plan changes live in [Plans](https://codewords.agemo.ai/#settings/plans).
* **Investigating a specific day** — if your balance dropped suddenly, open that day to see which chats or runs were responsible.

For plans, top-ups, and how credits work overall, see [Plans and Pricing](https://docs.codewords.ai/pricing).


# Memory in CodeWords

How Cody learns about you through structured memory, what it remembers, and how memory improves every new conversation.

How Cody learns about you and how that makes every conversation better.

### What is memory?

Every time you chat with Cody, build a workflow, or connect an integration, CodeWords builds a structured profile of how you work. This is not a raw conversation log. It is a summary layer that helps Cody skip setup questions and move faster toward solving your task.

Think of memory like a coworker who remembers your projects, tools, and preferences, without you having to repeat them every time.

### What does Cody remember?

Memory is built from six sources. Each source has its own schedule for how often it updates.

#### 1) Your profile

Account basics such as name, email, role, experience level, and join date.

Example:

`Rithul, PM at Agemo AI, some automation experience`

#### 2) Onboarding answers

First-time context captured during signup, such as your role, goals, and discovery source.

Example:

`Found CodeWords via Reddit. 200 emails/week, 66% promotional.`

#### 3) Your workflows

A live view of the workflows in your account, including names, descriptions, how often they run, and how they're performing. This updates continuously.

Example:

`Your Gmail Auto Labeler workflow and how often it runs`

#### 4) Integrations

Names of connected services only (for example Gmail, Stripe, Slack, LinkedIn, Notion). Credentials and token values are never stored in memory.

Example:

`Gmail, Stripe, Slack, LinkedIn, Notion`

#### 5) Behavioral signals

Patterns Cody notices over time, like the topics and tools you use most. These are summaries, not chat transcripts.

For example, Cody might notice that you often ask about LinkedIn, frequently work with AI features, and tend to ask building-related questions rather than just exploratory ones.

#### 6) Recent activity

A compact list of your most recent chat topic titles and dates (for example last \~10) so Cody knows what you have been working on recently.

Example:

`Figma UI Build (May 1), Stripe Checkout (Apr 29)`

### Behavioral signals: a closer look

Cody doesn't re-read your old chats. Instead, your conversations are reviewed from time to time to spot recurring patterns, like which integrations you use most or what types of automations you tend to build. Cody only sees that summary, not the actual messages.

This helps Cody personalize your experience without holding on to raw conversation content.

### How memory is used

When you start a new conversation, Cody receives your compiled memory profile before your first message.

Without memory, Cody may need to ask:

* What email provider do you use?
* Do you have Stripe connected?
* What is your technical level?
* What have you been working on recently?
* Have you built something similar before?

With memory, Cody can already infer:

* Which tools and integrations you use
* Your likely experience level
* Your recent context and active projects
* Related workflows it can build on

### What Cody does not have access to

Memory is designed to be useful without being invasive.

* Full conversation transcripts (only a summary of patterns and stats)
* API keys, tokens, or passwords (only the names of secrets are visible, never the values)
* The data your workflows process
* Personal data from connected services outside of active workflow runs
* Activity outside CodeWords

### Memory vs chat history

| Dimension    | Chat history                      | Memory                                    |
| ------------ | --------------------------------- | ----------------------------------------- |
| What it is   | Messages in a single conversation | Compiled profile across all conversations |
| Scope        | One chat thread                   | Your entire CodeWords account             |
| Availability | Inside that chat only             | Available at the start of every new chat  |
| Persistence  | Ends with the chat                | Persists across sessions                  |
| Format       | Raw messages                      | Structured, tagged, summarized            |

### FAQs

<details>

<summary>Can I see my memory profile?</summary>

Yes. Ask Cody: `What do you know about me?`

</details>


# Webhooks

CodeWords webhooks are HTTP endpoints that let external systems send data directly into your workflows or agents.

### What are webhooks?

Webhooks let other apps start a CodeWords workflow when something happens — a form submit, a file upload, a CRM update, and so on.

They’re useful when you want an automation to react instantly. They can also send data back when the workflow finishes, which is handy for API-style automations that process input and return a result.

Ask Cody to create and manage webhooks for you.

### Authentication

You don’t need a CodeWords API key for webhooks. The webhook URL itself is the credential.

Each webhook gets a unique, hard-to-guess URL. Keep it private — anyone with the link can send data to your workflow. That’s why webhooks work well when you need external triggering without minting an API key.

### How webhooks work

* Deployed with `app="codewords"` and `trigger="webhook"`
* Cody generates a unique CodeWords webhook URL
* External systems POST JSON to that URL
* Designed to receive event notifications as POST requests with a JSON payload

CodeWords currently supports only the **POST** [HTTP method](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Methods).

{% code title="Example CodeWords webhook URL" overflow="wrap" %}

```
https://runtime.codewords.ai/webhook/.../your_unique_id/your_workflow_webhook
```

{% endcode %}

Cody generates this URL when it sets up the webhook — you don’t need to build it by hand.

### Webhook setup

{% stepper %}
{% step %}
**Create a test webhook**

Ask Cody to generate a temporary webhook URL so it can learn what data your external app will send.
{% endstep %}

{% step %}
**Connect your external system**

Add the test webhook URL in your app (GitHub, Stripe, or any other service) and trigger a test event.
{% endstep %}

{% step %}
**Let Cody analyze the payload**

Cody inspects the data your system sent and learns its structure.
{% endstep %}

{% step %}
**Build the webhook service**

Cody creates a service with test and production endpoints that follow the webhook pattern.
{% endstep %}

{% step %}
**Deploy the production webhook**

Cody launches the live webhook endpoint for real usage.
{% endstep %}

{% step %}
**Update your external system**

Replace the test URL with the production webhook URL in your app to finish setup.
{% endstep %}
{% endstepper %}

### FAQs

<details>

<summary>Which HTTP method does CodeWords support?</summary>

Currently, only **POST**. Send data as a JSON payload.

</details>

<details>

<summary>Can a webhook return data after running a workflow?</summary>

Yes. Webhooks can send a response back when your workflow completes — useful for API-style automations.

</details>

<details>

<summary>What can I connect using webhooks?</summary>

Any system that can send HTTP POST requests — GitHub, Stripe, Google Forms, custom APIs, and more.

</details>

<details>

<summary>Is my webhook URL secure?</summary>

Each URL includes a randomly generated ID that’s hard to guess. Keep it private.

</details>

<details>

<summary>Can I test my webhook before going live?</summary>

Yes. Cody creates a test webhook so you can verify the connection and review the data structure before deploying production.

</details>


# Calling CodeWords workflows

Learn how to call and manage CodeWords automations via API. Includes authentication, sync and async workflows, file uploads, and best practices for secure, reliable automation.

### Overview

This guide explains how to call and manage your automations programmatically through the CodeWords API - including authentication, synchronous and asynchronous workflows, file uploads, and error handling.

{% hint style="warning" %}
CodeWords API keys are available on paid plans only. They are not available on the free plan.
{% endhint %}

### 1. Get your API key

To start using the API, make sure you're on a paid plan, then open [Settings → API Keys](https://codewords.agemo.ai/#settings/api-keys) from the sidebar account menu and generate or copy your key. Free users need to [upgrade on Plans](https://codewords.agemo.ai/#settings/plans) first.

For a fuller walkthrough of keys, endpoints, and examples, see [CodeWords API key](https://docs.codewords.ai/features/codewords-api-key).

**API Key Types:**

* `cwk-` - Standard reusable keys (recommended)
* `cwotk-` - One-time keys (for sensitive operations)

### 2. Basic API Information

**Base URL:**

```
https://runtime.codewords.ai
```

**Authentication:**

Include this header in every request:

```
Authorization: Bearer YOUR_API_KEY_HERE
```

This authentication flow requires a CodeWords API key from an eligible paid plan.

**Content Type:**

Always set:

```
Content-Type: application/json
```

### 3. Synchronous API Calls (≤120 seconds)

Use synchronous calls for workflows that complete in under two minutes.

#### cURL Example:

{% code overflow="wrap" %}

```bash
curl -X POST https://runtime.codewords.ai/run/YOUR_SERVICE_ID \
  -H "Authorization: Bearer cwk-your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{ "input_field_1": "value1", "input_field_2": "value2" }'

```

{% endcode %}

#### Python Example:

{% code overflow="wrap" %}

```python
# Install: pip install codewords-client
import os
from codewords_client import AsyncCodewordsClient
import asyncio

async def call_workflow():
    async with AsyncCodewordsClient() as client:
        response = await client.run(
            service_id="your-service-id",
            inputs={
                "input_field_1": "value1",
                "input_field_2": "value2"
            }
        )
        response.raise_for_status()
        return response.json()

# Usage
result = asyncio.run(call_workflow())
print(result)
```

{% endcode %}

#### JavaScript/TypeScript Example:

{% code overflow="wrap" %}

```javascript
// Install: npm install @codewords/client
import { createServiceClient } from "@codewords/client";

const client = createServiceClient(process.env.CODEWORDS_API_KEY);

async function callWorkflow() {
    const result = await client.runService(
        "your-service-id",
        "",  // path (empty for main endpoint)
        {
            input_field_1: "value1",
            input_field_2: "value2"
        }
    );
    return result;
}
```

{% endcode %}

### 4. Asynchronous API Calls (>120 seconds)

Use asynchronous execution for workflows that take longer than two minutes.

#### cURL Example:

{% code overflow="wrap" %}

```bash
# 1. Start async execution 
curl -X POST https://runtime.codewords.ai/run_async/YOUR_SERVICE_ID \
  -H "Authorization: Bearer cwk-your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{"input_field": "value"}'

# Response: {"request_id": "req_abc123def456"}

# 2. Poll for results 
curl -X GET "https://runtime.codewords.ai/result/req_abc123def456" \
  -H "Authorization: Bearer cwk-your-api-key-here"

# 3. Stream logs (optional) 
curl -X GET "https://runtime.codewords.ai/logs/req_abc123def456" \
  -H "Authorization: Bearer cwk-your-api-key-here" \
  -H "Accept: text/event-stream"
```

{% endcode %}

#### Python Example:

{% code overflow="wrap" %}

```python
from codewords_client import AsyncCodewordsClient
import asyncio

async def call_workflow_async():
    async with AsyncCodewordsClient() as client:
        # Start async execution
        handle = await client.run(
            service_id="your-service-id",
            inputs={"input_field": "value"},
            in_background=True
        )
        
        print(f"Started: {handle.request_id}")
        
        # Wait for completion (10 minute timeout)
        response = await handle.result(timeout_seconds=600)
        return response.json()

# Usage
asyncio.run(call_workflow_async())
```

{% endcode %}

#### JavaScript Example:

{% code overflow="wrap" %}

```javascript
async function callWorkflowAsync() {
    // Start async execution
    const requestId = await client.runAsync(
        "your-service-id",
        "",
        { input_field: "value" }
    );
    
    console.log(`Started: ${requestId}`);
    
    // Poll for results (10 minute timeout)
    const result = await client.pollResult(600000);
    return result.responseJson;
}
```

{% endcode %}

### 5. File Upload Workflow

For workflows requiring file inputs.

#### cURL Example:

{% code overflow="wrap" %}

```bash
# 1. Create file upload 
curl -X POST "https://runtime.codewords.ai/file?filename=data.csv" \ -H "Authorization: Bearer cwk-your-api-key-here" 
# Response: {"upload_uri": "...", "download_uri": "..."} 

# 2. Upload file content 
curl -X PUT "UPLOAD_URI_FROM_STEP_1" \ -H "Content-Type: text/csv" \ -H "x-amz-acl: public-read" \ --data-binary @data.csv 

# 3. Use download URL in workflow call 
curl -X POST https://runtime.codewords.ai/run/your-service-id \ -H "Authorization: Bearer cwk-your-api-key-here" \ -H "Content-Type: application/json" \ -d '{"file_input": "DOWNLOAD_URI_FROM_STEP_1"}'
```

{% endcode %}

#### Python Example:

{% code overflow="wrap" %}

```python
from codewords_client import AsyncCodewordsClient
import asyncio

async def upload_and_process_file(file_path: str):
    async with AsyncCodewordsClient() as client:
        # Read local file
        with open(file_path, 'rb') as f:
            file_content = f.read()
        
        # Upload to CodeWords
        download_url = await client.upload_file_content(
            filename="data.csv",
            file_content=file_content
        )
        
        # Process with workflow
        response = await client.run(
            service_id="your-service-id",
            inputs={"file_input": download_url}
        )
        return response.json()

# Usage
asyncio.run(upload_and_process_file("./data.csv"))
```

{% endcode %}

### 6. Error Handling Best Practices

#### Handle Timeouts:

{% code overflow="wrap" %}

```python
from codewords_client import AsyncCodewordsClient

async def call_with_timeout_handling(service_id: str, data: dict):
    async with AsyncCodewordsClient() as client:
        try:
            response = await client.run(service_id=service_id, inputs=data)
            response.raise_for_status()
            return response.json()
        except Exception as e:
            if "504" in str(e) or "timeout" in str(e).lower():
                # Switch to async for long-running tasks
                handle = await client.run(
                    service_id=service_id,
                    inputs=data,
                    in_background=True
                )
                response = await handle.result(timeout_seconds=600)
                return response.json()
            raise
```

{% endcode %}

#### Implement Retries:

{% code overflow="wrap" %}

```python
from codewords_client import AsyncCodewordsClient
import asyncio

async def robust_call(service_id: str, inputs: dict, max_retries: int = 3):
    for attempt in range(max_retries):
        try:
            async with AsyncCodewordsClient() as client:
                response = await client.run(service_id=service_id, inputs=inputs)
                response.raise_for_status()
                return response.json()
        except Exception as e:
            if attempt == max_retries - 1:
                raise
            await asyncio.sleep(2 ** attempt)  # Exponential backoff
```

{% endcode %}

### 7. Environment Setup

#### **Set API key as environment variable**

**Linux / macOS**

```bash
export CODEWORDS_API_KEY=cwk-your-api-key-here
```

**Windows (CMD)**

```cmd
set CODEWORDS_API_KEY=cwk-your-api-key-here
```

### 8. Security best practices

* Store API keys securely as **environment variables**
* Never expose keys in **client-side code**
* Always use **HTTPS** (enforced by CodeWords)
* Implement **rate limiting** in your application
* Validate all inputs before sending data to CodeWords
* Use **one-time keys (`cwotk-`)** for sensitive operations
* Rotate API keys regularly from [Settings → API Keys](https://codewords.agemo.ai/#settings/api-keys)

You can monitor run logs in [Activity](https://docs.codewords.ai/automations/activity) and credit spend in [Settings → Usage](https://docs.codewords.ai/automations/usage).


# External API integration

Connect your external apps to CodeWords using API keys for secure, custom integrations. Learn how to store keys and use them in workflows with Cody.

{% hint style="info" %}
Looking for one-click integrations? Connect apps from [Settings → Integrations](https://codewords.agemo.ai/#settings/integrations). See the [Integrations help guide](https://docs.codewords.ai/help-center/billing/integrations) for the full walkthrough.
{% endhint %}

### Overview

You can connect external apps to CodeWords workflows with your own API keys. That covers tools that aren’t in the one-click integrations library, or cases where you want to use your own credentials.

### 1. Get your app’s API key

An API key is a secure pass that lets CodeWords talk to your app.

1. Log in to the app you want to connect.
2. Go to **Settings → API** (or a similar section).
3. Copy an existing key, or generate a new one.

Treat your API key like a password — keep it private and never share it publicly.

### 2. Store the key in CodeWords

1. Log in to [CodeWords](https://codewords.agemo.ai/).
2. Open [Settings → API Keys](https://codewords.agemo.ai/#settings/api-keys).
3. Under environment variables, click **Add Variable**.
4. Enter a unique name (for example: `ASANA_API_KEY`).
5. Paste your API key and click **Save**.

Cody can then use that variable when it builds workflows. Credentials stay stored securely.

### 3. Build your workflow

Tell Cody you want a workflow that uses your connected app, and that the key is saved as `VARIABLE_NAME` in your environment variables.

* Cody looks up the app’s documentation and sets up the integration.
* If the docs aren’t public, paste the relevant Markdown or text into chat — Cody will use that to finish the setup.

### FAQs

<details>

<summary>How do I add my API key to CodeWords?</summary>

Go to [Settings → API Keys](https://codewords.agemo.ai/#settings/api-keys) → **Add Variable**, enter a unique name (for example `ASANA_API_KEY`), paste your key, and save. CodeWords stores it securely and uses it when building workflows.

</details>

<details>

<summary>How does Cody use my API key?</summary>

When you ask Cody to build a workflow with your app, it references your saved variable, connects securely, and sets up the integration without exposing your key.

</details>

<details>

<summary>What if my app’s documentation isn’t public?</summary>

Paste the relevant API docs or Markdown into chat with Cody. It will use that information to complete the integration.

</details>

<details>

<summary>Is my API key safe in CodeWords?</summary>

Yes. Keys are encrypted and stored in your environment. They aren’t shared or exposed outside your workspace.

</details>


# Firecrawl for web scraping

Learn how to use Firecrawl on CodeWords to scrape websites, extract clean text, capture screenshots, and monitor changes automatically — no coding or setup required.

### What is Firecrawl?

Firecrawl extracts text, data, and visuals from public web pages. It returns clean, structured content from a URL so you can use that data in your workflows.

On CodeWords, Firecrawl is built in — you can start scraping without extra setup, API keys, or configuration.

### When to use Firecrawl

**Best for:**

* Collecting article or blog content
* Tracking website or pricing updates
* Extracting product information from multiple pages
* Researching competitors or market trends
* Gathering content for summaries or analysis

**Avoid Firecrawl for:**

* Sites that require login
* Pages with hidden or interactive content — use the [Web Agent](https://docs.codewords.ai/features/web-agent) or [Chrome extension](https://docs.codewords.ai/features/chrome-extension) instead
* Tasks that need clicking, filling forms, or multi-step browsing

### How Firecrawl works

Firecrawl visits the URL you specify, processes the page, and returns the content in a clean format. You can:

* Extract the **text content** of the page
* Capture a **screenshot** for visual reference
* Combine both for a fuller overview

Then use that output in CodeWords — for example, summarize it with Cody, analyze trends, or pass it into other automations.

### Common use cases

**Research and analysis**\
Gather text from news articles, blogs, or reports to create summaries or insights.

**Competitor monitoring**\
Check and compare pricing, features, or content updates on competitor sites.

**Product data collection**\
Pull information from multiple product pages into one structured view.

**Visual monitoring**\
Capture screenshots to track layout or design changes on important pages.

### FAQs

<details>

<summary>Do I need to install or set up Firecrawl separately?</summary>

No. Firecrawl is built into CodeWords and works inside your workflows — no extra configuration or API key needed.

</details>

<details>

<summary>Can Firecrawl scrape pages that require a login?</summary>

No. Firecrawl only works with publicly accessible pages. For sites that need login, use the [Chrome extension](https://docs.codewords.ai/features/chrome-extension), which can work with your authenticated browser session.

</details>

<details>

<summary>What kind of data can Firecrawl extract?</summary>

Readable text, key page content, and full-page screenshots — useful for research, monitoring, and analysis.

</details>

<details>

<summary>How fast is Firecrawl?</summary>

Most pages process in about 2–5 seconds. Larger or more complex sites may take a bit longer.

</details>

<details>

<summary>What if a website blocks scraping?</summary>

Some sites restrict automated access. If you hit errors or missing data, ask Cody to retry with a short delay, or switch to the [Web Agent](https://docs.codewords.ai/features/web-agent) for interactive sites.

</details>

<details>

<summary>Is it legal to scrape any website?</summary>

Only scrape public pages and follow the site’s terms of service. Use Firecrawl responsibly for legitimate business or research purposes.

</details>

<details>

<summary>Can I schedule Firecrawl to run automatically?</summary>

Yes. Set up a [scheduled workflow](https://docs.codewords.ai/automations/schedules-and-triggers) to run Firecrawl on a cadence — useful for daily monitoring or reports.

</details>

<details>

<summary>Does Firecrawl save the data it collects?</summary>

Firecrawl itself doesn’t store your data permanently. You can save scraped information in your workflow with tools like Redis, Google Sheets, or other connected services.

</details>


# Redis: Your workflow’s memory

Learn how to use Redis as your workflow’s memory in CodeWords — store, recall, and manage data between runs to build smarter, faster, and more stateful automations.

### What is Redis?

Redis gives your workflow memory. It lets automations remember information between runs so they can make smarter decisions next time.

Without Redis, your workflow:

* Runs once, finishes, and forgets everything
* Starts fresh each time, as if it has never seen the data before

With Redis, your workflow:

* Saves key details (preferences, recent results, or progress)
* Picks up where it left off on the next run
* Feels more personal and consistent over time

Think of it as short-term memory your workflow can write to while it works.

### Real-world examples

* **Website monitoring** — Detect if a page’s content changed since the last check
* **Customer notifications** — Remember who was already notified, and avoid sending twice
* **Report generation** — Save previous snapshots and only report what’s new
* **Chatbot memory** — Keep short-term conversation context so replies stay relevant

When a workflow runs with Redis:

1. It saves what it learns (for example, “User prefers daily reports”).
2. The next run looks that memory up.
3. If the memory is outdated, Redis can remove it after it expires.

You get stateful automations without standing up a full database yourself.

### Best practices

* Use Redis when your workflow needs to remember settings, progress, or recent results
* Keep data small and focused — Redis is for quick notes, not large files
* Let data expire when it should — short-lived memory keeps automations fast and clean
* Use it for context, not long-term history — great for short-term recall, not permanent storage

### When not to use Redis

* You need to store data permanently (use a database instead)
* Your automation doesn’t need to remember anything
* The information is too large or too sensitive to store temporarily

### How Cody decides when to use Redis

You don’t need to wire Redis up yourself. Cody handles that.

When you describe your automation, Cody checks whether memory would help:

* If the workflow needs to track changes or store preferences, Cody adds Redis
* If it doesn’t need memory, Cody skips Redis to keep things simpler and faster

### FAQs

<details>

<summary>Do I need to set up Redis myself?</summary>

No. Redis is built into CodeWords. Cody manages setup and connections automatically — you never install or maintain anything.

</details>

<details>

<summary>When does CodeWords use Redis?</summary>

When your automation needs short-term memory — for example, to remember preferences, cache results, or track changes between runs.

</details>

<details>

<summary>Can Cody decide when Redis is needed?</summary>

Yes. Cody detects when memory will make your automation smarter or more efficient, and adds Redis when it helps.

</details>

<details>

<summary>Is my Redis data secure?</summary>

Yes. Redis data is encrypted, isolated per user, and deleted after its expiration period. Only your workflows can access it.

</details>

<details>

<summary>Is Redis required for every workflow?</summary>

No. Many simple or one-time automations don’t need Redis. It’s only used when memory adds real value.

</details>


# Building an AI Agent

Step-by-step prompting guide to build a working AI agent with Cody. Real prompts from real conversations that produced production agents.

Building an AI agent sounds complex. On CodeWords, it’s a conversation. The trick is knowing **what to say** and **in what order**.

This guide gives you the prompts, tips, and patterns that have been used to build agents now running in production. You don’t have to use these exact words — Cody understands natural language — but these templates are battle-tested.

### The conversation flow

Every successful agent build follows the same five phases.

{% stepper %}
{% step %}
**Phase 1: Research (optional)**

Use this for complex agents with 4+ integrations, or when you’re not sure what architecture you need. Skip it for simple bots with 2–3 tools.

**What to say:**

> “Research the best approaches to build an AI agent that can \[your use case]. Look at OpenClaw, LangChain, and other frameworks, and tell me what architecture would work best on CodeWords.”

**What Cody does:**

* Searches documentation, GitHub repos, and technical articles
* Compares frameworks and approaches
* Recommends an architecture for your needs
* Flags challenges before you start building

**Example for a personal assistant:**

> “Research how to build a personal AI assistant that can manage my Google Calendar, read my Gmail, search the web, and remember things about me long-term. Compare approaches like OpenClaw’s architecture vs. a simpler tool-calling agent. What would work best on CodeWords?”
> {% endstep %}

{% step %}
**Phase 2: Context and requirements**

This is the most important phase. The more context you give Cody, the better your agent will be on the first try.

**Template — copy and customize:**

> “Build me an AI agent with these specs:
>
> **Platform:** \[WhatsApp / Slack / Telegram / API endpoint (paid plans)]
>
> **Tools it needs:**
>
> * \[Tool 1, e.g., Google Calendar — read and create events]
> * \[Tool 2, e.g., Gmail — read, summarize, and draft replies]
> * \[Tool 3, e.g., Web search — find current information]
> * \[Tool 4, e.g., Memory — remember facts I tell it]
>
> **Personality:** \[Brief and casual / Professional and detailed / Friendly but concise]
>
> **Memory:** \[Remember my preferences / Remember my team members / Remember project details]
>
> **Trigger:** \[Respond to WhatsApp messages / Run daily at 8am / Listen for Slack mentions]”

{% hint style="success" %}
**Pro tip:** Add a persona. For example: “Act like a sharp executive assistant who’s been working with me for years. You know I prefer morning meetings, hate unnecessary calls, and always want the TL;DR first.”
{% endhint %}

**What makes a great requirements prompt:**

* **Be specific about tools** — “Google Calendar” is better than “calendar”
* **Describe actions, not just access** — “read and create events” vs. “calendar access”
* **Set personality early** — it’s harder to change later
* **Mention your timezone** — agents default to UTC if you don’t specify. You can also set it in [Settings → Account](https://codewords.agemo.ai/#settings/profile) for scheduled workflows.
  {% endstep %}

{% step %}
**Phase 3: Build**

Once Cody understands your requirements, ask it to build. This is usually the shortest prompt.

**What to say:**

> “Build it. Deploy it as a new service called \[your-agent-name].”

**What Cody does:**

1. Creates the service code with your integrations
2. Configures tool connections (API keys, OAuth, webhooks)
3. Sets up memory
4. Tests each tool
5. Deploys to CodeWords cloud
6. Registers triggers (WhatsApp webhook, Slack events, schedule, and so on)

{% hint style="info" %}
**Naming tip:** Use descriptive, lowercase names with hyphens: `my-assistant`, `team-slack-bot`, `support-agent`. This becomes part of your service URL.
{% endhint %}

If Cody asks questions during the build, answer them — that usually means it found something unclear in your requirements.
{% endstep %}

{% step %}
**Phase 4: Test and fix**

Your agent is deployed. Test it, then tell Cody what to fix.

**What to say:**

> “I tested it and \[describe what happened]. Can you fix it?”

| Issue               | What to tell Cody                                                              |
| ------------------- | ------------------------------------------------------------------------------ |
| Wrong timezone      | “Calendar events show in UTC. I’m in \[your timezone].”                        |
| Responses too long  | “Keep responses under 3 sentences. Be more concise.”                           |
| Missing a tool      | “It can’t check my email yet. Add Gmail integration.”                          |
| Wrong personality   | “It’s too formal. Be more casual — like texting a friend.”                     |
| Trigger not working | “WhatsApp messages aren’t reaching the agent. Check the webhook registration.” |
| Memory not working  | “I told it my name yesterday but it doesn’t remember today.”                   |

{% hint style="info" %}
**Iteration is normal.** Most production agents take 3–5 rounds of testing and fixing. Each round usually takes under 2 minutes.
{% endhint %}
{% endstep %}

{% step %}
**Phase 5: Expand**

Once the core agent works, add more capabilities over time.

> “Add email drafting — when I say ‘reply to \[person]’, draft a response based on the conversation.”

> “Add a daily briefing — every morning at 8am, send me a WhatsApp message with my calendar, unread emails, and top tasks.”

> “Add image analysis — when I send a photo of a receipt, extract the total, date, and vendor.”

> “Add a weekly summary — every Friday at 5pm, summarize what I accomplished this week based on completed tasks and sent emails.”
> {% endstep %}
> {% endstepper %}

### Example prompts that work

These are real-world prompts (or close variations) used to build production agents:

| Goal                            | What to tell Cody                                                                                                                                                                                                              |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Personal WhatsApp assistant** | “Build me a WhatsApp AI assistant that checks my Google Calendar, reads my Gmail summaries, searches the web for current info, and remembers things I tell it. Keep responses short and casual — like texting a smart friend.” |
| **Team Slack bot**              | “Build a Slack bot for our #general channel that answers questions about our Notion docs, can search the web for current info, and creates Linear tickets when someone says ‘create ticket: \[description]’.”                  |
| **Customer support agent**      | “Build a WhatsApp customer service bot that answers questions using our FAQ document, creates support tickets when it can’t answer, and escalates to a human when the customer asks for one.”                                  |
| **Lead qualification bot**      | “Build a WhatsApp bot that qualifies leads by asking about company size, budget, timeline, and needs. Save qualified leads to a Google Sheet. Send me a Slack notification for hot leads.”                                     |

{% hint style="info" %}
**Notice the pattern:** Strong prompts include the **platform**, the **tools**, the **actions**, and the **personality**. The more specific you are, the fewer iteration rounds you’ll need.
{% endhint %}

### Tips from power users

**Do**

* **Start simple, then expand** — get a basic agent working with 2–3 tools, then add more
* **Be specific about tone** — “Respond like a busy CEO’s executive assistant” works better than “be professional”
* **Test with real scenarios** — don’t just say “hi”; ask it to check your calendar or search for something
* **Tell Cody about failures** — “It returned an error when I asked about tomorrow’s meetings” helps Cody debug faster

**Don’t**

* **Don’t over-specify technical details** — describe *what* you want, not *how* to build it
* **Don’t skip research for complex agents** — a few minutes of research can save a lot of rebuilding
* **Don’t try to build everything at once** — a focused agent with 3 solid tools beats a bloated one with 10 buggy ones
* **Don’t forget personality** — an agent that sounds robotic won’t get used, no matter how capable it is

### Start building

Open [CodeWords](https://codewords.agemo.ai/), start a new chat with Cody, and paste one of the templates above. Fill in your platform and tools, then iterate from there.


# LinkedIn messaging

Send LinkedIn messages, connection requests, and profile lookups through Cody using your logged-in browser session.

Send messages, connection requests, and look up profiles, all through Cody.

### Before you start

* Install the CodeWords Chrome Extension: [Chrome Web Store link](https://chromewebstore.google.com/detail/codewords/fgcbeegcaikofigbnfmmlgcimdkmfnce)
* Log into LinkedIn in your browser (the same browser with the extension)
* Visit [codewords.agemo.ai](https://codewords.agemo.ai/) once to activate the extension

### Step 1: Connect your LinkedIn

Ask Cody to connect your LinkedIn account.

Say this to Cody:

> "Connect my LinkedIn account for LinkedIn Messaging"

Cody will automatically:

* Read your LinkedIn session from your browser (via the Chrome extension)
* Connect it securely to the messaging service
* Save your connection for future use

You only need to do this once. If your LinkedIn session expires (for example, after logging out or changing your password), Cody asks you to reconnect.

{% hint style="info" %}
If Cody says "li\_at cookie not found", you are not logged into LinkedIn in your browser. Log in at [linkedin.com](https://www.linkedin.com/) and try again.
{% endhint %}

### Step 2: Use LinkedIn features

Once connected, tell Cody what you want to do:

* **Send a message**: Message anyone you are connected with on LinkedIn
* **Send a connection request**: Connect with someone by pasting their LinkedIn URL
* **Look up a profile**: Get a person's full LinkedIn profile (job, education, skills, and more)
* **Find a contact**: Search your LinkedIn conversations by name
* **List conversations**: See your recent LinkedIn chats
* **Read messages**: View message history from any conversation

### Examples: what to say to Cody

#### Send a message

> Send a LinkedIn message to Osman Ramadan saying "Hey, are you free for a call tomorrow?"

Cody finds the contact in your conversations and sends the message. You get a confirmation with the message ID.

#### Send a connection request

> Send a connection request to <https://www.linkedin.com/in/handotdev/> with the note "Hi, love your work on Mintlify!"

Cody extracts the profile, resolves their LinkedIn ID, and sends the invite with your custom note.

#### Look up a profile

> "Look up the LinkedIn profile for satyanadella"

> "Get the full LinkedIn profile for <https://www.linkedin.com/in/handotdev/>"

Returns details like name, headline, location, education, work experience, skills, follower count, and more.

#### Find a contact

> "Find Osman Ramadan in my LinkedIn contacts"

Searches your LinkedIn conversations by name and returns matching contacts with their details.

#### Read messages

> "Show me my last 10 messages with Osman"

> "List my recent LinkedIn conversations"

Pulls your conversation history directly from LinkedIn.

### Rate Limits

LinkedIn has rate limits. Do not send more than about 16 connection requests per day or about 120 messages per day through the service. This leaves room for your normal LinkedIn activity.

### Quick tips

* Your browser must stay logged into LinkedIn. If you log out, the connection may expire.
* Connection requests need a full LinkedIn URL, such as <mark style="color:blue;"><https://www.linkedin.com/in/someone/>.</mark>
* Messages go to existing connections. You can only message people you are connected with (unless you use InMail with a qualifying Premium plan).
* Check account health anytime by asking Cody: Is my LinkedIn still connected?
* Disconnect when done by asking Cody: Disconnect my LinkedIn


# Prompt engineering

Tips and tricks for prompting Cody so you get better automations faster.

One of the easiest ways to get more out of CodeWords is learning how to talk to Cody well.

Treat Cody as both a place to ideate and an assistant that builds automations. These tips help you get clearer results, faster.

### Start simple

Think in terms of a minimum viable automation — a basic version you can test before you add complexity.

Build the core first, then add features, logic, and integrations once it’s working. If you’re unsure, describe the goal and ask Cody what a simple version would look like.

LLMs work better with information in chunks. Starting small gives you more control and usually gets you to a good result sooner.

### Provide numbered steps

For more complex builds, numbered steps help.

For example, if you’re building a content workflow and want Cody to use brand guidelines at a certain stage, ask Cody to request those guidelines when it reaches that step. That keeps the first prompt shorter and easier to follow.

### Give extra context

Share context about your role, a repetitive task you want to automate, or day-to-day friction. You can do this at the start, or after the core workflow works and you’re ready to extend it.

You can also ideate with Cody around your industry and challenges.

{% hint style="info" %}
**Example:** “I run a digital marketing agency managing social media for 25 local restaurants. My biggest challenge is creating enough content while tracking what performs best.”
{% endhint %}

### Be specific when you know the outcome

If you already know the problem and tools, say so — you’ll get there faster.

{% hint style="info" %}

1. “Create a workflow that scrapes website X, summarises the content, and emails me the result”
2. “Build a workflow that scrapes Google review data for restaurants and saves it into a CSV”
3. “Build something that can extract text from an image of a handwritten letter”
4. “Create a workflow that transcribes a YouTube video, distills it into notes, and stores it in my Google Doc”
   {% endhint %}

If you’re still figuring it out, vague aims are fine too:

{% hint style="info" %}

1. “I need something for social media”
2. “Make a workflow that helps with marketing”
3. “I want to automate my business”
   {% endhint %}

Cody won’t jump straight into building — it’ll ask clarifying questions and suggest ideas. That’s intentional.

### Upload reference images

Attach reference images with the **+** button in chat.

That’s useful when you’re targeting a specific integration, or when you’ve found an automation example you want to replicate. References help Cody see what you mean.

### Isolate testing

When something breaks, keep the debug focus narrow:

* Ask Cody to test integrations separately before it starts building
* Ask Cody to isolate and debug one failing section until it’s fixed

### Focus on outcomes, not tools

Describe what you want to achieve. Cody often suggests a better approach than the tool you first had in mind.

**Focus on&#x20;*****what*****:**

* “I want to extract product prices from competitor websites every week.”
* “I want to analyze customer reviews and tell me the main themes.”
* “I want to automatically respond to simple customer emails.”

Give enough detail for smart decisions:

{% hint style="info" %}
“Build me a lead generation workflow that:

* Finds marketing agency owners on LinkedIn
* In the US, with 10–50 employees
* Gets their contact info and company details
* Outputs to a Google Sheet for my sales team
* Processes about 50 leads per week.”
  {% endhint %}

### Be specific about data

Extra detail about your data helps Cody align the build and suggest refinements.

**Example:**

I have a Google Spreadsheet with:

* Column A: Customer names
* Column B: Their LinkedIn URLs
* Column C: Company names
* About 200 rows updated weekly

I want to add job titles and company size in columns D and E.

Say where results should go, which integrations you use, and what notifications you need.

**Example:**

When the workflow finds new leads, I want it to:

* Add them to my HubSpot CRM in the ‘Marketing Qualified’ pipeline
* Send a Slack message to our #sales channel with the count
* Email me a summary if it finds more than 10 high-priority leads

Cody will ask follow-up questions when something is missing — you don’t have to anticipate every edge case yourself.

### Version history

If you want to go back to an earlier version of a workflow you built in chat, use [Version history and restore](https://docs.codewords.ai/automations/version-history-and-restore-chat).

You can also ask Cody to undo the last set of changes while you’re still in the chat.


# Getting Started

### Intro: The All-in-One Website Builder

CodeWords reframes web development as a single workflow: you describe what the site or app should do, and the platform helps you turn that into a full-stack experience you can ship and refine in conversation. Less context-switching between mockups, repos, and deploy dashboards; more time on the product itself.

### What you can do with CodeWords

**Research and Plan:** You can use CodeWords to research your target audience, and formulate a strategy during the plan phase.

**Build and Develop**: Construct full-stack applications with complex backends, databases, and user authentication through simple, natural language commands.

**Generate Pictures & Videos**: You can generate high-quality videos & pictures using the CodeWords built-in video & image generation services.

**Payment Integration**: Connect to external services like [Stripe](https://docs.codewords.ai/website-builder/features/payments-and-subscriptions) to integrate payments for your website.

**Deploy and Host**: Publish your application to the web with the press of a button, with all the domain, hosting and infrastructure managed by CodeWords.

**Web Analytics**: Track website visit to understand your website analytics to improve your application.\
Getting Started: Your First App in Minutes

### Getting Started: Your First App in Minutes <a href="#getting-started-your-first-app-in-minutes" id="getting-started-your-first-app-in-minutes"></a>

We designed CodeWords so you can go from idea to a live web app without a long setup curve. Follow this guide for the essential steps to launch your first project.

#### 1. Start your project

Begin by describing what you want to build in plain English. Clear goals, audience, and sections usually produce a stronger first pass.

For example:

> “Build a one-page site for a boutique coffee roastery: hero with product photo and ‘Shop beans’ CTA, ‘How we roast’ story, three featured blends with prices, a wholesale inquiry form, and a footer with hours and Instagram.”

#### 2. Review and refine the plan

CodeWords will turn your brief into a concrete plan: what gets built first, which pages or flows matter, and how the stack is organized. Read it like a short spec and if something is missing, too big, or not quite right, reply with changes before you commit to the full build.

#### 3. Watch CodeWords build

Once you’re happy with the plan, Cody implements it. You follow progress as the app takes shape and use an interactive preview early so you’re reviewing something clickable.

#### 4. Iterate with natural language

Stay in the preview: describe deltas and see them applied without hand-editing every file.

Example (visual):

> “Make the primary CTA coral, not green, and increase tap target size on mobile.”

Example (structure):

> “Insert a two-column ‘Wholesale’ block above the footer: copy on the left, form on the right.”

When you’re ready to go live, tell Cody to publish the app or click the publish button and deploy to \*.codewords.run (and custom domains when configured).


# Editing and Previewing

CodeWords lets you build and edit your web app using natural language

#### Build, refine, and publish in one conversational loop

CodeWords lets you edit web apps by describing changes in plain language. You tell Cody what you want, Cody updates the app, and you review the result in a live preview before publishing.

#### Edit with natural language

Editing happens through conversation, whether you need a small visual tweak or a major redesign.

#### Describe your changes

You can request:

* **Small adjustments**\
  “Make the heading text larger and bold.”
* **Structural updates**\
  “Add a pricing section with three tiers below the features list.”
* **Section redesigns**\
  “Rebuild the hero section with a split layout: image on the left, text on the right.”

#### Prompt-based batch editing

You can request multiple changes in one message. Cody applies them together as a single update.

For example:

> “Make the main heading bolder and dark blue. Increase spacing in the pricing table. Change the footer background to light gray.”

Cody interprets each request and applies the full set in one pass.

#### Quick style controls

Use natural-language prompts for common UI updates:

| Edit Type  | Example Prompt                                                   |
| ---------- | ---------------------------------------------------------------- |
| Styling    | “Change the font of all headings to something more modern.”      |
| Layout     | “Increase spacing between cards in the pricing section.”         |
| Content    | “Change the main button text to ‘Get Started Now.’”              |
| Structure  | “Duplicate this section and place it below the contact form.”    |
| Color      | “Switch the app to dark mode with blue accents.”                 |
| Typography | “Use a serif for headings and a clean sans-serif for body text.” |

#### AI Edit: Your creative partner

Cody can do more than direct edits. You can ask for suggestions to improve copy, visual design, and structure.

| Goal           | Example Prompt                                                   |
| -------------- | ---------------------------------------------------------------- |
| Improve copy   | “Rewrite this headline to be more engaging and benefit-focused.” |
| Enhance design | “Suggest a cleaner, more modern color palette for this section.” |
| Refine layout  | “Restructure this feature list to make it easier to scan.”       |
| Add polish     | “Add subtle scroll animations to the testimonials section.”      |

#### Iterative refinement

Each update follows the same loop:

You describe <i class="fa-arrow-right">:arrow-right:</i> Cody updates  <i class="fa-arrow-right">:arrow-right:</i>  You review  <i class="fa-arrow-right">:arrow-right:</i>  You refine

After each change, Cody shows the updated result and confirms direction before continuing. This keeps iteration fast while maintaining control.\
\
**Preview**: See your application in real time

CodeWords provides a live, interactive preview during the build process so you can validate behavior as you go.

#### In-chat preview

The preview appears directly next to your conversation and refreshes after each edit.\
You can interact with the app: click buttons, navigate pages, and submit forms.

#### Desktop and mobile

Apps are responsive by default. Layouts adapt automatically to desktop, tablet, and mobile.\
You can still request screen-specific behavior, for example:

> “Stack the navigation vertically on mobile.”

<figure><img src="/files/m6iYJ48IwbxFC3O4fTzO" alt=""><figcaption></figcaption></figure>


# Publishing

Build, test and go live

Publishing with CodeWords is a fast, conversational process. You do not need to manage servers, deployment pipelines, or hosting configuration manually.

\
When you are ready, you tell Cody to go live, and Cody handles the production deployment flow for you.

## The publishing process

1. **Finish and test in preview:** Use the in-product preview to click through the app, forms, and navigation.
2. **Tell Cody you are ready to go live:** When you want to publish, say so in chat or click the publish button.
3. **CodeWords handles it**: CodeWords runs the deployment process for you, including:

* Provisioning hosting for your live app at **your-name.codewords.run** on cloud.
* Building and deploying a production-ready version of what you shipped from chat.
* Serving it over HTTPS on that managed URL, without you configuring certificates for the default domain.
* Custom domain setup from the UI after publish (see [Custom Domain](https://docs.codewords.ai/website-builder/features/custom-domain))

In most cases your app is live within minutes. Updates work the same way as building: tell Cody what to change, check the preview, then go live again when you are ready.

## Custom Domains

After your project is published, you can connect a domain you already own so your app is available at something like `app.yourbrand.com` instead of only `*.codewords.run`.

{% hint style="info" %}
Custom domains are a **paid feature**, available on the **Pro**, **Business**, and **custom** plans. Free plan users need to [subscribe to a plan](https://codewords.agemo.ai/#settings/plans) first.
{% endhint %}

From the UI:

1. Click **Add custom domain** and enter your domain.
2. Add the DNS record CodeWords shows at your domain provider (GoDaddy, Namecheap, Cloudflare, and others).
3. Click **Verify** in CodeWords. Once verified, your app is live on that domain.

DNS propagation can take a few minutes, and in some cases up to 48 hours. For the full walkthrough, troubleshooting, and record examples, see [Custom Domain](https://docs.codewords.ai/website-builder/features/custom-domain).

Typical records at your provider:

For a subdomain (for example `app.mycompany.com`):

* Type: `CNAME`
* Name: `app`
* Value: `cname.vercel-dns.com` (or the value shown in CodeWords)

For a root domain (for example `mycompany.com`):

* Type: `A`
* Name: `@`
* Value: use the exact value shown in CodeWords for your project

## Automatic SSL / HTTPS

SSL is provisioned automatically once your custom domain is connected.\
Traffic is encrypted by default. There is nothing extra to configure.

## Updating a live app

Publishing is not the end of editing.\
Describe the changes you want, review them in preview, then publish the updated version.\
There is no separate redeploy workflow outside that same preview → publish loop.<br>


# Built-in AI Capabilities

Learn how to add AI-powered capabilities to your CodeWords web app using natural-language prompts.

#### Add AI features to your web app

CodeWords apps are not limited to static UI. You can add AI-powered behavior directly into your product by describing the feature you want to Cody. Cody handles model selection, API wiring, error handling, and UI integration, so you can focus on the experience instead of infrastructure.

### Large Language Models (LLM)

CodeWords supports text-based AI features such as assistants, generation tools, summarization, search understanding, and translation. Cody handles model selection and integration so you can focus on product behavior.

| Use Case            | Example Prompt                                                                                                      |
| ------------------- | ------------------------------------------------------------------------------------------------------------------- |
| AI Assistant        | "Add a support assistant in the bottom-right corner that answers questions about pricing, features, and policies."  |
| Writing Helper      | "Create a page called Blog Helper with a topic input and a Generate button that returns a short opening paragraph." |
| Intent-Aware Search | "Upgrade search so it understands natural phrasing and returns the most relevant results."                          |
| Article Summary     | "Add a Summarize action on article pages that returns three concise bullet points."                                 |
| Data Insight        | "Let users paste CSV data and generate a plain-language summary of trends."                                         |
| Translation         | "Add a language switcher that translates page content in real time."                                                |

### Image Generation

You can build image generation and image editing directly into your app flows. This is useful for user personalization, content creation, and creative tooling.

| Use Case           | Example Prompt                                                                             |
| ------------------ | ------------------------------------------------------------------------------------------ |
| Avatar Creator     | "On profile settings, let users generate an avatar from a short text description."         |
| Product Mockups    | "On the custom merch page, generate a mockup that applies the user’s text to the product." |
| Background Creator | "Add a tool that generates background images from scene descriptions."                     |
| Image Editing      | "Allow image upload plus edit instructions like remove text or change background color."   |
| Campaign Assets    | "Generate multiple marketing banners for the same launch theme with visual variations."    |

### Video Generation

CodeWords can generate short AI videos from prompts or from existing images, including audio tracks when needed. This enables demo clips, social assets, and visual explainers.

| Use Case         | Example Prompt                                                                          |
| ---------------- | --------------------------------------------------------------------------------------- |
| Product Clip     | "Generate a short product showcase video with clean studio lighting and ambient sound." |
| Social Video     | "Create a vertical video optimized for short-form social platforms."                    |
| Image-to-Motion  | "Animate this hero image with subtle environmental movement."                           |
| Explainer Visual | "Create a short clip showing data moving through a network in a modern style."          |

### Audio Features

CodeWords supports speech-to-text and text-to-speech so you can add voice interaction and listening experiences.

| Use Case      | Example Prompt                                                                  |
| ------------- | ------------------------------------------------------------------------------- |
| Voice Search  | "Add a microphone icon to search so spoken input is transcribed and submitted." |
| Listen Mode   | "Add a Listen button that reads article content aloud."                         |
| Transcription | "Create a page where users upload audio and receive a text transcript."         |

#### How it works

Describe the AI feature in plain language. Cody then:

* selects suitable model(s) for the task
* connects request and response logic inside your app
* handles failure states and user feedback messages
* adds loading and progress states for longer jobs

You do not need to manually wire model APIs or manage integration boilerplate in the default CodeWords flow.<br>


# Cloud Infrastructure

Managed cloud infrastructure for CodeWords apps—backend, database, file storage, and one‑command deployment

Every app you build with CodeWords runs on managed infrastructure. Cody handles the operational setup so you can focus on product behavior and user experience.

| Component         | What it does                                                         | Typical use cases                                                      |
| ----------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| Backend           | Server-side logic for app behavior and automation                    | Form handling, validations, API calls, business rules, notifications   |
| Database and Auth | Supabase-powered data model, authentication, and storage when needed | User accounts, product catalogs, submissions, content systems          |
| File Handling     | Cloud-based upload and retrieval workflows                           | Profile images, documents, CSV inputs, generated reports, media assets |
| Deployment        | Publish your app to a live URL through the Cody flow                 | Launching to `*.codewords.run`, then iterating and republishing        |
| Integrations      | Connect app workflows to external tools and services                 | Sheets sync, Slack alerts, Stripe flows, CRM updates                   |

### Backend: Powering Your Apps

CodeWords can build full backend behavior for your app, not just front-end pages.\
That includes data processing, third-party API calls, and custom logic tied to user actions.

Example requests you can give Cody:

* “When a user submits an order, validate inputs, calculate totals, and send a confirmation email.”
* “When a contact form is submitted, store the submission and notify me.”
* “Connect Stripe so upgrades trigger payment handling.”

Backend workloads run in managed, serverless environments, so you do not manage servers directly.

### Database and Authentication

CodeWords does not force a proprietary database layer. For apps that need persistent relational data and user auth, the recommended setup is [Supabase](http://supabase.com/).

Cody can help you implement:

* Database structure and queries
* Sign-up and sign-in flows with Supabase Auth
* File storage tied to app data

Example requests:

> “Create a products table with name, price, image, and description.”

> “Add signup and login using Supabase Auth.”

> “Store form submissions in a table for admin review.”

For lightweight persistence that does not require a full relational model, CodeWords also supports persistent key-value style state for app behavior.

### File handling

CodeWords supports file-based app flows for uploads and generated outputs.

Example requests:

> “Add profile photo upload on the account page.”

> “Create a resources page with downloadable PDFs.”

> “Let users upload a CSV, process it, and return a formatted report.”

### Deployment: Going Live

Deployment follows the same conversational workflow as building:

1. Confirm your app is ready
2. Tell Cody to go live or click the Publish button
3. Choose a URL name
4. Publish to `*.codewords.run`

You can keep editing and republishing through the same preview-to-live loop.

### External Service Integrations

CodeWords connects with a large ecosystem of external services (for example Google Sheets, Slack, Stripe, Shopify, Airtable, and a 1000 more).

Example requests:

* “When a user signs up, add them to a Google Sheet and send a Slack notification.”
* “Pull products from Shopify and show them in the app.”

Cody handles integration wiring, authentication steps, and error handling in the default flow.


# Custom Domain

Connect a domain you already own to your published CodeWords app using the in-product custom domain flow.

Use a custom domain so your app is available at something like <mark style="color:blue;">app.yourbrand.com</mark> instead of only <mark style="color:blue;">\*.codewords.run</mark>.

{% hint style="info" %}
Custom domains are a **paid feature**. You need an active **Pro**, **Business**, or **custom** plan to connect one. If you are on the Free plan, [subscribe to a CodeWords plan](https://codewords.agemo.ai/#settings/plans) first. See [Plans and Pricing](https://docs.codewords.ai/pricing) for details.
{% endhint %}

#### Before you start

To add a custom domain you need:

* An active **Pro**, **Business**, or **custom** plan.
* A published UI project. Finish building and testing in preview, then use the **Publish** button to go live on your default <mark style="color:blue;">\*.codewords.run</mark> URL. See [Publishing](https://docs.codewords.ai/website-builder/get-started/publishing) for the full publish flow.

Once you are on a paid plan and the project is published, you can add a custom domain from the UI.

#### Connect your domain

**1. Add your domain**

Click **Add custom domain** and enter the domain you already own (for example <mark style="color:blue;">app.mycompany.com</mark> or <mark style="color:blue;">mycompany.com</mark>).

**2. Copy the DNS record**

CodeWords shows the DNS record you need to add. Keep this screen open—you will paste the same values at your domain provider.

**3. Add the record at your domain provider**

Go to the provider where you bought your domain (for example GoDaddy, Namecheap, or Cloudflare), open DNS settings for that domain, and add the record exactly as shown in CodeWords.

**4. Verify**

Back in CodeWords, click **Verify**. When verification succeeds, your app is live on your custom domain.

DNS propagation can take a few minutes, and in some cases up to **48 hours**. If verification fails at first, wait and try again.

#### Typical DNS records

Your provider’s labels may differ slightly, but the record types are usually:

For a **subdomain** (for example <mark style="color:blue;">app.mycompany.com</mark>):

* Type: `CNAME`
* Name: `app`
* Value: `cname.vercel-dns.com` (or the value CodeWords shows in the UI)

For a **root domain** (for example <mark style="color:blue;">mycompany.com</mark>):

* Type: `A`
* Name: `@`
* Value: use the exact value shown in CodeWords for your project

Always use the record values shown in the **Add custom domain** flow for your app—they override any generic examples if they differ.

#### Automatic SSL / HTTPS

SSL is provisioned automatically once your custom domain is verified and connected. Traffic is encrypted by default. There is nothing extra to configure.

#### Troubleshooting

* **Verify failed or domain not live yet** — DNS may still be propagating. Wait a few minutes and verify again; some providers take up to 48 hours.
* **Wrong record at your provider** — Double-check type, name, and value match what CodeWords displayed before you clicked Verify.
* **Still on** <mark style="color:blue;">\*.codewords.run</mark> **only** — Confirm the project is published and verification completed successfully in the custom domain UI.


# Database

Add Supabase to power your app with a PostgreSQL database, authentication, file storage, real-time updates, and Edge Function

### Overview

Supabase is a **direct API integration**, which means your app connects to Supabase by using Supabase client libraries and your own project credentials.

This page explains what's needed from the user, how to set up the frontend and backend, how authentication works, and the security rules you must follow.

### Supabase Capabilities

Connecting Supabase gives your app a production-grade backend, including:

* **Database (PostgreSQL)**\
  Store and query your data with full SQL support. Tell Cody what your interface needs to show and what your database needs to include, and Cody can create the tables and schema that match your data.
* **User authentication**\
  Add secure sign-ups, logins, and access control. Cody can generate authentication flows (like email/password) and connect them to the right pages and permissions in your app.
* **File storage**\
  Upload and serve images and files using Supabase Storage — useful for profile photos, attachments, and user uploads.
* **Real-time updates**\
  Stream changes as data updates. This is useful for chat, live activity feeds, and dashboards that update instantly across users.
* **Edge Functions**\
  Run serverless backend logic on Supabase using JavaScript/TypeScript. Cody can create and deploy functions for tasks like sending emails, handling webhooks, processing payments, or integrating with external APIs.

### Connecting Supabase

{% stepper %}
{% step %}
Register a new Supabase account [**here**](https://app.supabase.com/sign-up) or [**sign in**](https://app.supabase.com/sign-in) if you already have one.

Create an organization if you don't have one.

<figure><img src="/files/YEStptxS6td7J0j7jGHg" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Create a **new project** in Supabase.

Click on + New Project, complete the necessary fields, and allow a few minutes for setup.

<figure><img src="/files/SFh8wJrKmSHo29IXwWu7" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Share the the **Supabase Project URL** to Cody

<figure><img src="/files/wwSVaCtJuF5DnG8yVTVA" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Provide the Cody with the anon public key and the service role secret

Navigate to **Project Settings - API Keys**

<figure><img src="/files/VfXGcJbpul8kV8AHz6KV" alt=""><figcaption></figcaption></figure>

Copy both the **anon public key** & the **service role secret** and share it with Cody

<figure><img src="/files/pKiIzfuCXCy4cKUyzA3L" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

Cody will safely store all your secrets and help you with integrating a database for your needs.

When Cody asks you to run SQL queries on supabase, click on the **SQL editor** from your supabase dashboard located at the top right corner or **command +E** shortcut on Mac devices.

<figure><img src="/files/agn9cGwYysTQxeUiM7Qa" alt=""><figcaption></figcaption></figure>

This will open the **SQL Editor** where you can **copy and paste** the SQL query and click **Run** at the bottom right to execute the SQL query.

<figure><img src="/files/IjKeqnerxsHEx3IKyINX" alt=""><figcaption></figcaption></figure>


# Authentication

### Add Google OAuth to your CodeWords build

Add Google sign-in to your CodeWords app using Supabase Authentication. Users can log in with their Google account instead of creating a password.

### Overview

CodeWords apps use **Supabase** for authentication. Supabase handles the OAuth flow: redirects, token exchange, session management - so your app never deals with raw tokens or sensitive auth logic directly.

Google OAuth can be configured in two ways:

* **Supabase-managed credentials (recommended):** Supabase provides a shared Google OAuth client. No Google Cloud Console setup required.
* **Your own credentials:** You create an OAuth client in your own Google Cloud project and connect it to Supabase. This gives you full control over branding, consent screen, and allowed scopes.

Both options provide the same sign-in experience for your users.

### What you need

Before Cody can set up Google OAuth, you'll need:

1. A **Supabase project** connected to your CodeWords app
2. **(Optional)** A Google Cloud project with OAuth credentials, if you want to use your own

If you don't have a Supabase project yet, you can create one [here](https://supabase.com/).

{% stepper %}
{% step %}
**Connect the Supabase with your app**

Refer to [connecting to Supabase](https://docs.codewords.ai/website-builder/features/database) docs for connecting your codewords app.
{% endstep %}

{% step %}
**Enable a Provider for Auth**

Navigate to **Authentication → Sign In/Providers** from the sidebar menu items.

<figure><img src="/files/KB84iEA7TJUc3VGjaNEA" alt=""><figcaption></figcaption></figure>

Scroll down to see all the **Auth Providers**

<figure><img src="/files/dbZ4zNbBH2X5SzOF1NAG" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Enable** **Google as an OAuth Provider**

Enable Google from the list of providers and provide relevant details such as **Client IDs** and **Client Secret** for OAuth.

Add the **callback URL** for **OAuth** in the **Google Cloud Console** under the list of **Redirect URLs** for the **App** you created the **OAuth Client.**

Also ensure that your app in the Google Cloud Console is set to the status of **Published** for enabling OAuth on production.

Refer to [creating an project in google cloud](https://docs.codewords.ai/website-builder/features/database) if you are un-sure how to the client credentials.

<figure><img src="/files/UrU9mccOieIzxTttDJh8" alt=""><figcaption></figcaption></figure>

Once all the details have been added, save to enable google for OAuth.
{% endstep %}

{% step %}
**Cody to Implement Google OAuth in the App**

Just let Cody know that you have enabled Google OAuth in Supabase and ask to implement the functionality in the app.
{% endstep %}
{% endstepper %}

### **Creating a Google Cloud project**

Go to [Google Cloud Console](https://console.cloud.google.com/) and create a new project (or use an existing one).

{% stepper %}
{% step %}
**Configure the OAuth consent screen**

Navigate to **APIs & Services → OAuth consent screen**.

* Choose **External** (unless your app is for Google Workspace users only)
* Fill in your app name, support email, and authorized domains
* Add scopes: at minimum, `email` and `profile`
  {% endstep %}

{% step %}
**Create OAuth credentials**

Go to **APIs & Services → Credentials → Create Credentials → OAuth client ID**.

* Application type: **Web application**
* Authorized redirect URI: Cody will provide this — it's your Supabase project's callback URL (e.g., `https://<your-project>.supabase.co/auth/v1/callback`)

You'll receive a **Client ID** and **Client Secret**.
{% endstep %}

{% step %}
**Share the Client ID and Client Secret with Cody.**

Cody will:

* Store them securely as environment variables
* Set up the sign-in flow in your app
  {% endstep %}

{% step %}
**Test the flow**

Verify the steps:

* Sign-in button appears
* Redirect to Google works
* User returns signed in
* Consent screen shows your app name and branding
  {% endstep %}
  {% endstepper %}

#### Session management

* Supabase manages sessions automatically using secure cookies
* Your app checks authentication state using the Supabase client
* Sessions refresh automatically: users stay signed in across visits

#### Adding more OAuth providers

Supabase supports many OAuth providers beyond Google — GitHub, Apple, Microsoft, Discord, and more. Ask Cody to add additional providers to your app.

### Troubleshooting

| Issue                                                                             | Solution                                                                                                |
| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| **Redirect URI mismatch**                                                         | Ensure the redirect URI in Google Cloud Console matches your Supabase callback URL exactly              |
| **Consent screen not showing**                                                    | Check that OAuth consent screen is configured and published in Google Cloud Console                     |
| **User not redirected back**                                                      | Verify the redirect URL is added to both Google Cloud Console and Supabase Auth settings                |
| **"Access blocked" error**                                                        | Your Google Cloud project may need verification. For testing, add test users under OAuth consent screen |
| <p><strong>Auth works in preview</strong></p><p><strong>but not prod</strong></p> | Ensure the production redirect URI is also added in Google Cloud Console                                |

### Security

* OAuth credentials (Client Secret) are stored server-side only — never exposed to the browser
* Supabase handles token exchange and session management securely
* All communication happens over HTTPS
* Sessions use secure, HTTP-only cookies
* Your app never sees or stores Google passwords


# Payments & Subscriptions

When you’re ready to charge for your app, and turn it into a product — subscriptions, one-time purchases, or usage-based billing, CodeWords connects to Stripe to handle checkout, renewals, and billing management.

This page explains what you need, how to set it up, and what happens once payments are live.

### How it works

CodeWords uses Stripe for payment processing. Stripe handles sensitive card data securely, so your app never stores or processes credit card numbers. Your users complete payment on Stripe Checkout, and Stripe notifies your app about billing events through webhooks.

### What you need

Before Cody can set up payments, you’ll need a Stripe account and a few values from the Stripe dashboard.

#### Stripe account

Create an account at Stripe and complete verification so Stripe can pay out to your bank. You’ll provide identity verification and banking details during setup.

#### API keys

Stripe provides two sets of keys:

* **Test keys** for development
* **Live keys** for production

You can find both in **Stripe → Developers → API keys**.

| Key             | Starts with             | Used where                                             | Safe for frontend? |
| --------------- | ----------------------- | ------------------------------------------------------ | ------------------ |
| Publishable key | `pk_test_` / `pk_live_` | Frontend (loads Stripe Checkout)                       | Yes                |
| Secret key      | `sk_test_` / `sk_live_` | Backend only (creates sessions, manages subscriptions) | No                 |

Cody will ask for both. The publishable key is used in the frontend. The secret key is stored as a backend-only environment variable and must never be exposed.

### Chat‑driven auto‑setup (recommended)

{% stepper %}
{% step %}
**Create your Stripe account**

Sign up, complete verification and then go to [dashboard.stripe.com](https://dashboard.stripe.com/)
{% endstep %}

{% step %}
**Switch to "Test mode"**

In the top-right corner, make sure the "Test mode" toggle is turned ON (it'll show an orange banner).

Search for API Keys in the search bar to navigate to **Developers → API keys**.

<figure><img src="/files/4L7IPfcjZofP1MDnyj0X" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Share the **Publishable Key** & the **Secret Key** from the **Developers → API keys** to Cody.

<figure><img src="/files/rUphVndOnPOPNM69J371" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Share the payment plans you want to implement**

Tell Cody what **subscription** or **one-time payment** you want to create and cody will create them programmatically via the API.

{% code overflow="wrap" fullWidth="false" %}

```
"Design a monthly subscription model offering three plans: Basic at $20 per month, Pro at $50 per month, and Business at $100 per month."
```

{% endcode %}
{% endstep %}

{% step %}
**Test the payment plans**

Test the payment plans by using the [stripe test card](https://docs.stripe.com/testing) to ensure its working correctly.
{% endstep %}

{% step %}
**Switch to live mode and share the live API key.**

Now that you have confirmed all the tests are working correctly, Cody should be able to create the live products on your stripe account once you share the key.
{% endstep %}
{% endstepper %}

#### Products and prices

Create your plans in **Stripe → Products**. Cody needs the **Price ID** (starts with `price_`) for each plan you want to sell (for example: monthly and annual).

### Setting it up manually - You create in Stripe, share IDs with Cody

{% stepper %}
{% step %}
**Create your Stripe account**

Sign up, complete verification and then go to [dashboard.stripe.com](https://dashboard.stripe.com/)
{% endstep %}

{% step %}
**Switch to** "**Test mode**"

In the top-right corner, make sure the **"Test mode"** toggle is turned **ON** (it'll show an orange banner)
{% endstep %}

{% step %}
**Navigate to the Product Catalogue to create a Product**

This is what your customers will subscribe to.

Go to the [Products Catalogue](https://dashboard.stripe.com/test/products) page in the sidebar(or search "Products")

<figure><img src="/files/lPEhzf0DPR7SvllAOeBf" alt=""><figcaption></figcaption></figure>

Add a Product and Pricing related to that product.

Start by providing a name(eg: Fee, Pro, Max, Business), Image & Pricing details.

<figure><img src="/files/Uh6VfbnUOOGXOECmt0Cb" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Sharing the Product ID and Price ID of the product**\
\
Once you have created the products, share the **Price ID** and **Product ID** of the products you created on stripe and specify the pricing and billing details(Recurring/One-off, Amount & Billing period) with Cody.

<figure><img src="/files/pHBtxE2ylpeghYWBbD8b" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Creating the Pricing Page & Testing**

Once this is done, Cody should create a pricing page for your product and you can test if the payment is working using the stripe test cards.
{% endstep %}

{% step %}
**Creating a webhook endpoint pointing to the URL**

In Stripe, create a webhook endpoint pointing to the URL Cody provides & subscribe to the events:

Go to **Developers** **→** **Webhooks**

<figure><img src="/files/RqES7B1KeMQbKT0CtcUU" alt=""><figcaption></figcaption></figure>

Click on "**Add Destination**" to start creating a webhook

<figure><img src="/files/3YSFDLW76EZtKVPsNwDB" alt=""><figcaption></figcaption></figure>

Navigate to **All events** and search for these specific events and add them

1. **checkout.session.completed**
2. **invoice.payment\_succeeded**
3. **invoice.payment\_failed**
4. **customer.subscription.updated**
5. **customer.subscription.deleted**

<figure><img src="/files/rmmFoS3u7H17gH25oT7X" alt=""><figcaption></figcaption></figure>

Select **continue** and for the **Destination Type** choose **Webhook endpoint** and continue.<br>

<figure><img src="/files/Egeni1o3o3L0tFfKvFnp" alt=""><figcaption></figcaption></figure>

Provide a destination name(any name) and paste the Test **Endpoint URL** Cody shared with you.

<figure><img src="/files/TFlmRRuEnwq9NXgof9Av" alt=""><figcaption></figcaption></figure>

Create the destination once the details have been added. You should receive the webhook signing secret after creating the destination, share this with Cody.
{% endstep %}

{% step %}
**Test the payment plans**

Test the payment plans by using the [stripe test card](https://docs.stripe.com/testing) to ensure its working correctly.
{% endstep %}

{% step %}
**Switch to live mode and repeat the same steps**

Share the **Product ID** and the **Price IDs** of the live products and share the **webhook secret** after an **endpoint** for the **live mode** is created.
{% endstep %}
{% endstepper %}

### Summary

**Create your Stripe account and pricing**\
Sign up, complete verification, and create your product(s) and price(s) in Stripe.

1. **Share your Stripe details with Cody**\
   Provide:
   * Publishable key (`pk_…`)
   * Secret key (`sk_…`)
   * Price ID(s) (`price_…`) for your plans
2. **Cody builds the integration in test mode**\
   Cody sets up:
   * Checkout flow
   * Subscription status handling
   * Billing portal
   * Webhook handler
3. **Add the webhook endpoint in Stripe**\
   In Stripe, create a webhook endpoint pointing to the URL Cody provides, subscribe to the events above, and share the `whsec_…` signing secret with Cody.
4. **Test end-to-end**\
   Use Stripe test cards (for example, `4242 4242 4242 4242`) to simulate:
   * Successful payments
   * Failed renewals
   * Cancellations\
     Confirm your app gates features correctly based on subscription state.
5. **Go live**\
   Replace test keys with live keys. Real payments start flowing immediately.

#### Webhook signing secret

Webhooks let Stripe tell your app when something happens: payments succeed, renewals fail, subscriptions cancel, and more.

When Cody creates your webhook endpoint, you’ll add it in **Stripe → Developers → Webhooks**. Stripe will give you a signing secret (starts with `whsec_`) so your app can verify events are genuinely from Stripe.

| Secret                 | Starts with | Purpose                               |
| ---------------------- | ----------- | ------------------------------------- |
| Webhook signing secret | `whsec_`    | Verifies webhook payloads from Stripe |

#### Webhook events to subscribe to

Subscribe to these events for the core subscription lifecycle:

| Event                           | Used for                                            |
| ------------------------------- | --------------------------------------------------- |
| `checkout.session.completed`    | Customer paid—activate access                       |
| `invoice.payment_succeeded`     | Renewal succeeded—extend access                     |
| `invoice.payment_failed`        | Renewal failed—notify and gate access if needed     |
| `customer.subscription.updated` | Plan change or cancellation scheduled—update access |
| `customer.subscription.deleted` | Subscription ended—revoke premium access            |

You can add more events later, but these cover most apps.

### The subscription lifecycle

A user starts on a free tier, then upgrades through Stripe Checkout. Subscriptions renew automatically each billing period. Users can update payment methods, view invoices, and manage billing through Stripe’s self-service portal.

If a user cancels, they typically keep access until the end of the current billing period. After that, they return to the free tier. If a renewal fails, Stripe notifies the customer and retries the charge over several days. You can decide how access changes if retries don’t succeed.

### Pricing strategies

* **Freemium** works well for most apps: let users experience value, then charge for high-value actions (exports, integrations, premium features).
* **Free trials** are best when the value is clearer after time (for example, after a week of use).
* **Simple pricing** (one plan) is easiest to sell early. Add tiers later when you learn what customers value.

### Security

Payment security is built into the Stripe model:

* Secret keys and webhook secrets stay server-side as backend environment variables.
* Only the publishable key is used in the browser.
* Card data is handled entirely by Stripe—your app never sees or stores it.
* Webhook signatures are verified before any billing event is processed.
* Everything runs over HTTPS.

### Quick reference: What Cody needs from you

| Item                   | Where to find it               | Example                   |
| ---------------------- | ------------------------------ | ------------------------- |
| Publishable key        | Stripe → Developers → API keys | `pk_test_…` / `pk_live_…` |
| Secret key             | Stripe → Developers → API keys | `sk_test_…` / `sk_live_…` |
| Webhook signing secret | Stripe → Developers → Webhooks | `whsec_…`                 |
| Price ID(s)            | Stripe → Products → Pricing    | `price_…`                 |


# Github Integration

Export your CodeWords project to your own private GitHub repository, then keep building from either place.

Think of GitHub as your project’s source of truth for code, history, and collaboration. Each repository stores your files and every code change over time, so your team can review, ship, and maintain your app more easily.

### Overview

If you want your app code in your own GitHub account, ask Cody to move it from your CodeWords project to a repository you control.

You can do this in two ways:

| Method                                 | Setup needed                       | Best for                                   |
| -------------------------------------- | ---------------------------------- | ------------------------------------------ |
| Connected GitHub account (recommended) | Connect GitHub in chat (no token)  | Most users                                 |
| Personal access token (PAT)            | Create token with repo permissions | OAuth unavailable or blocked by org policy |

\
Method one: connected GitHub account (recommended)

This is the simplest setup. Cody uses your connected GitHub account to create a repository and push your project code directly.

#### What to tell Cody

Move this project code to a private repo on my GitHub account.

#### What happens

1. Cody asks you to connect GitHub (one-time OAuth).
2. Cody creates a private repository on your account.
3. Cody pushes all project files in one initial commit.
4. Cody shares the repository link.

#### How it works

Cody uses the GitHub API through your connected account to:

* Create a private repository.
* Read files from your CodeWords-managed project.
* Commit and push everything in one atomic operation.

No PAT, terminal setup, or git credentials are required.

#### Limitations

* Commit history is not preserved. Your new repository starts with a single initial commit.
* Large binary files may hit GitHub API size limits.

### Method two: personal access token (PAT)

Use this if you need full commit history, or if your organization blocks OAuth connections.

#### Before you start

Make sure you have:

* A destination GitHub repository.
* Its URL, for example `https://github.com/OWNER/REPO.git`.
* Permission to push.

#### Create a PAT

Recommended: fine-grained PAT.

Set:

* Repository access: `Only select repositories` and choose your destination repo.
* Repository permission: `Contents: Read and write`.

If you also migrate workflow files in `.github/workflows/*`, set:

* `Workflows: Read and write`.

Alternative: classic PAT.

* Private repos: `repo` scope.
* Public-only repos: `public_repo` scope.

#### What to tell Cody

Move this project code to my GitHub repository:<https://github.com/OWNER/REPO.gitI> have a PAT ready with the correct scopes.

When asked, paste the token in chat. Cody stores it securely and uses it for push operations.

#### After push

* Revoke or rotate one-time tokens.
* Ask Cody to delete stored PAT secrets if no longer needed.

### Keep both repositories in sync

After migration, Cody can push updates to both your CodeWords-managed repository and your personal GitHub repository.  We do not support abaility to connect your personal github as the main branch.

#### What to tell Cody

When you make changes, also push them to my personal GitHub repo.

#### Typical flow

* Cody applies changes in CodeWords.
* Cody pushes the same changes to your GitHub repository.
* Cody deploys to `*.codewords.run`.
* If Vercel is connected, your GitHub-based deployment auto-deploys.

### Optional: deploy from your own Vercel project

If you deploy from your personal repository in Vercel, add these environment variables:

| Key                     | Value                          |
| ----------------------- | ------------------------------ |
| `CODEWORDS_API_KEY`     | Your CodeWords API key         |
| `CODEWORDS_RUNTIME_URI` | `https://runtime.codewords.ai` |

These are required for backend API calls from your deployed app.

### Security best practices

* Prefer connected GitHub account when possible.
* Treat PATs like passwords.
* Use fine-grained PATs scoped to one repository.
* Set token expiration dates.
* Never commit or share tokens in code, logs, or screenshots.
* Revoke tokens after one-time migrations.

### Troubleshooting

| Issue                                          | Solution                                                           |
| ---------------------------------------------- | ------------------------------------------------------------------ |
| GitHub connection popup fails                  | Use PAT method                                                     |
| Push fails with `403 Write access not granted` | Token permissions are insufficient; regenerate with correct scopes |
| Push fails when workflow files change          | Add `Workflows: Read and write` permission                         |
| Organization repo requires SSO                 | Authorize token for SSO in org settings                            |
| Vercel deploy shows server configuration error | Add `CODEWORDS_API_KEY` and `CODEWORDS_RUNTIME_URI`                |


# Import from Figma

Turn your Figma designs into production-ready web apps by sharing a frame link and describing what you want.

For teams that design in Figma, CodeWords helps you move from static design to working app much faster. Share a Figma frame, explain the goal, and Cody generates a deployable web app.<br>

### How it works

Instead of manually translating designs into code, Cody reads your Figma frame, extracts visual and structural data, and builds a matching app.

### The process

1. **Connect Figma:** Connect your Figma account through OAuth in CodeWords.
2. **Share a frame link:** Paste a Figma link to a specific frame or component, for example:\
   *<mark style="color:blue;"><https://www.figma.com/design/XYZ/File?node-id=123:456></mark>*
3. **Describe what to build:**                                                                                                                                             Tell Cody what you want, such as:                                                                                                      “Build a functional web app from this design. Match layout, colors, and typography.”
4. **Cody extracts design data**\
   Cody analyzes both the rendered frame and the design structure, including:
   * Layout and component hierarchy
   * Colors, typography, and spacing
   * Text content, assets, and design tokens
   * Responsive hints from auto-layout and constraints
5. **Cody builds and deploys**\
   Cody generates a Next.js app with Tailwind CSS, shows a preview, and deploys to <mark style="color:blue;">\*.codewords.run</mark> after confirmation.

#### What gets extracted

* Layout and structure
* Colors, typography, and spacing
* Components, text, and assets
* Auto-layout, constraints, and design tokens (when available)

#### Tips for best results

* Share a specific frame link.
* Use auto-layout in Figma.
* Name layers clearly.
* Share multiple frames for multi-page flows.
* Describe interactions like hover, click, and navigation.

#### Example prompt

> My Figma is connected. Please build an exact web app from this frame: *<mark style="color:blue;"><https://www.figma.com/design/XYZ/My-App?node-id=123:456></mark>* Match colors, typography, and layout closely.Deploy it when ready.

#### Limitations

* Figma variables may require additional scope support; if unavailable, Cody uses fallback extraction.
* Prototype transitions and overlays are not imported automatically.
* External paid fonts may need substitutions.
* Smart Animate does not transfer directly; describe desired animations in your prompt.

<br>


# Projects

Projects let you create workspaces with apps and workflows in CodeWords

### What It is

CodeWords Projects help you organize and manage your automations, workflows, and apps. Each project is a runnable system built with Cody, while folders help you group related projects together for easier navigation and filtering.

Projects are designed to keep your work organized as you scale. Instead of managing one long list of automations, you can group projects by team, client, workflow type, or use case.

### How to use it

#### Creating a Project

To create a new project:

1. Describe the workflow or app you want to build with Cody.
2. Configure schedules, triggers, integrations, or deployment settings.
3. Run, edit, and manage the project directly from chat.

Each project represents a single automation, workflow, or app.

#### Creating a Folder

Folders help organize related projects.

You can create folders for:

* Teams or departments
* Clients
* Workflow categories
* Personal vs work automations

Once created, you can move projects into folders or create new projects directly inside them.

### Viewing Projects and Folders

**Projects List**

Your projects appear as cards or a list in the workspace. From there, you can:

* Open a project
* Edit it with Cody
* Run it manually
* Configure schedules and triggers
* Monitor activity

#### **Folders**

Folders act as organizational groups and filters. Opening a folder shows only the projects inside it, making large workspaces easier to manage.

#### Filtering Projects

Use folder filters to quickly find the workflows or apps you want to manage. This is especially useful when working across multiple teams, clients, or automation categories.

#### Moving Projects

You can move projects between folders at any time to reorganize your workspace as your workflows evolve.

#### What You Need to Know

**Projects**: Runnable workflows, automations, or apps

**Folders**: Organizational groups for projects

Folders do not run automations themselves. They only help organize and filter projects.

#### Run Page Context

When you open a project’s run page, CodeWords automatically understands which folder the project belongs to. Schedules, triggers, and runtime settings are configured per project, not per folder.


# Web Agent

CodeWords's cloud-based browser that operates like a real person

### Overview

The Web Agent is your AI-powered browser. Instead of writing scripts or clicking through pages manually, you describe what you need and the Web Agent figures out how to get it done by navigating pages, clicking buttons, filling forms, and extracting data.

It runs in a remote browser in the background, so it does not take over your computer. You can watch it work in real time through a live browser view, or let it run and come back to the results.

### When to use the web agent

Use the Web Agent for:

* **Complex research tasks** where you do not know all the steps upfront.
  * Example: "Find the CEO's email on the company website. Check the About page, Team page, or Contact form."
* **Dynamic websites** that are JavaScript-heavy or change often (for example, news sites, dashboards, and social platforms).
  * Example: "Search for product reviews and summarize the top five complaints."
* **Authenticated websites** behind logins (for example, LinkedIn profiles, private dashboards, and internal tools).
* **Multi-step interactions** like filling out forms, clicking through menus, or scrolling to load content.

{% hint style="info" %}
For simple public pages, use Firecrawl instead. The Web Agent is built for complex tasks. If you only need to scrape a public webpage, Firecrawl is usually faster and lower cost. Ask Cody, and it will pick the right tool.
{% endhint %}

### How it works

{% stepper %}
{% step %}
**Describe your goal**

Write clear, step-by-step instructions. The more specific you are, the better the results.

"Go to the company website, find the About or Team page, and get the CEO's name and LinkedIn profile URL."
{% endstep %}

{% step %}
**The Web Agent browses for you**

It opens a remote browser, navigates to the right pages, interacts with elements, and extracts the data you asked for.
{% endstep %}

{% step %}
**Watch live or wait for results**

You can watch the browser in real time through the live view panel, or let it run and check the results when it is done.
{% endstep %}

{% step %}
**Get your results**

The Web Agent returns what it found, including text, structured data, or page content, directly in the chat.
{% endstep %}
{% endstepper %}

<figure><img src="/files/B3kv5xjzXuk1CtreKeKj" alt=""><figcaption></figcaption></figure>

### Login and authentication

The Web Agent can access websites that require login. When you first need an authenticated site, Cody opens a live browser session where you can log in securely.

After you log in once, session cookies are saved. That means you do not need to log in again for future automations on the same site, because the Web Agent remembers your authenticated session across runs.

### Login limitations

The login step currently supports traditional username and password forms only. "Sign in with Google," single sign-on (SSO), and other OAuth-based login methods are not supported. Make sure the website has a standard login form before asking Cody to log in.

### Live browser view

When the Web Agent is running, you can watch it in real time. Cody shows a live browser view in the canvas panel on the right side of your screen. You can see what the agent sees, including pages loading, buttons being clicked, and content being extracted.

When the session finishes, you will see "Session Complete." Return to the chat, and Cody will show your results.

### Key limitations

| Limitation   | Detail                                                                                            |
| ------------ | ------------------------------------------------------------------------------------------------- |
| Timeout      | Runs have a 10-minute limit. If a task takes longer, it stops.                                    |
| Login method | Only username/password login is supported. OAuth, SSO, and "Sign in with Google" are not.         |
| Speed        | Slower than Firecrawl or the Chrome Extension. Best for tasks that need real browser interaction. |
| Cost         | Higher cost per run than simpler scraping tools, because it uses AI to reason through each step.  |

### Web Agent vs other tools

| Tool             | Best for                                              | Needs login?      | Speed  |
| ---------------- | ----------------------------------------------------- | ----------------- | ------ |
| Firecrawl        | Public pages and fast scraping                        | No                | Fast   |
| Web Agent        | Complex tasks, dynamic sites, and authenticated pages | Once (saved)      | Slower |
| Chrome Extension | Authenticated pages when you are at your computer     | Already logged in | Medium |

You do not need to choose the tool yourself. Tell Cody what you need, and it will choose the best approach. If a page is public, it will usually use Firecrawl. If it needs a real browser, it will use the Web Agent.

### Example prompts

* "Go to this company's website and find the CEO's name and email."
* "Log into my dashboard at \[URL] and download the latest report."
* "Search for reviews of \[product] on Google and summarize what people are saying."
* "Go to this LinkedIn profile and extract their work experience."
* "Fill out this contact form on \[website] with these details."


# Chrome extension

Automate actions on logged-in websites with the CodeWords Chrome Extension.

### Introduction

The CodeWords Chrome extension automates tasks on websites where you're already logged in. It runs directly in your browser, using your existing sessions to access private content like LinkedIn feeds, dashboards, and member-only pages.

### Key limitations

* Runs have a 5-minute timeout limit.
* The Chrome Extension works on desktop or laptop only, and it is not supported on mobile.
* There are no visual indicators of run status.
* Outputs return in Markdown by default, not HTML.

### When to use the Chrome extension

Perfect for:

* Getting content from private pages (LinkedIn feeds, dashboards)
* Simple website tasks like clicking buttons or filling forms
* When reliability is more important than speed

Not ideal for:

* Scheduled automations when you're away
* When you need to use your browser simultaneously
* When speed is critical

### Getting started

1. Open [Settings → Browser Control](https://codewords.agemo.ai/#settings/browser-control) and click **Install & Connect**, or install from the [Chrome Web Store](https://chromewebstore.google.com/detail/codewords/fgcbeegcaikofigbnfmmlgcimdkmfnce).
2. Wait until Browser Control shows **Connected**.
3. Sign in to the websites you want to automate in that browser.

### See the Chrome extension in action

<figure><img src="/files/5NDKmcVWGUSMuot1vr0d" alt=""><figcaption></figcaption></figure>

### What it can do

| Function            | Best for                              | Speed          |
| ------------------- | ------------------------------------- | -------------- |
| Page scraping       | Get content from private pages        | 30-60 seconds  |
| Interactive actions | Click buttons, fill forms             | 60-120 seconds |
| Cookie extraction   | Share login sessions with other tools | 10-30 seconds  |

### Performance expectations

* Reliable: Very consistent results using your real browser
* Status visibility: No visual run status indicators are shown during execution
* Slower: Takes longer than other tools, but is more dependable
* Browser control: Uses one tab while running

### Best practices

* Test your automation manually first
* Stay logged in to target websites
* Be patient — good results take time

### Common use cases

* Monitor LinkedIn feeds and collect posts
* Extract data from company dashboards
* Gather content from member-only sites
* Automate repetitive form filling


# CodeWords App

Seamlessly install the CodeWords app and access it on your device

#### IOS & iPadOS <a href="#ios-and-ipados" id="ios-and-ipados"></a>

1. Open [CodeWords](https://codewords.agemo.ai/) in **Safari**
2. Tap the **Share** icon at the bottom of the screen
3. Scroll down and tap **Add to Home Screen**
4. Tap **Add** to confirm

The CodeWords icon will appear on your home screen, just like any app.

#### Android, Mac, and Windows <a href="#android-mac-and-windows" id="android-mac-and-windows"></a>

1. Open [CodeWords](https://codewords.agemo.ai/) in **Chrome**
2. Tap the Install App icon from the the URL bar.

<figure><img src="/files/0P06kJveripAacEvfmOJ" alt=""><figcaption></figcaption></figure>


# ChatGPT connector

Connect CodeWords to ChatGPT so you can build automations, apps, and websites in chat, then run them on CodeWords. Paid feature.

Use ChatGPT as the place you build, and CodeWords as the place things run. Once connected, you can create automations, apps, and websites in a ChatGPT chat — then deploy and run them on your CodeWords account.

{% hint style="info" %}
The ChatGPT connector is a **paid feature**. You need an active **Pro**, **Business**, or **custom** plan. If you are on the Free plan, [subscribe to a CodeWords plan](https://codewords.agemo.ai/#settings/plans) first. See [Plans and Pricing](https://docs.codewords.ai/pricing) for details.
{% endhint %}

### How it works

You do the building in ChatGPT itself. The connector links ChatGPT to your CodeWords account so ChatGPT can create, deploy, and run your work there.

**Building stays in ChatGPT.** CodeWords credits are only used when something **runs** — for example, executing a workflow. Planning and building in the ChatGPT chat do not consume CodeWords credits.

### What you can build

* **Automations** — daily digests, lead enrichment, scheduled workflows
* **Apps** — internal tools and backends powered by CodeWords
* **Websites** — landing pages and web apps built and published from chat

### Before you start

Make sure you have:

* An active **Pro**, **Business**, or **custom** plan
* A ChatGPT account
* A [CodeWords](https://codewords.agemo.ai/) account

The steps below are what you do **inside ChatGPT**. Only use the official CodeWords server URL in this guide.

### Connect CodeWords in ChatGPT

{% stepper %}
{% step %}
**Open Settings**

In ChatGPT, open **Settings**.

<figure><img src="/files/8tb9g8yL4MXKSDluzJD2" alt="ChatGPT Settings, General tab" width="230"><figcaption><p>Open Settings in ChatGPT</p></figcaption></figure>
{% endstep %}

{% step %}
**Turn on Developer mode**

1. Go to the **Security and login** tab.
2. Find **Developer mode** (it says **Elevated risk**).
3. Turn it **on**.

<figure><img src="/files/Oj0NDHSzBYfoM3FNbwzx" alt="Enable Developer mode in ChatGPT Security and login settings" width="230"><figcaption><p>Turn on Developer mode</p></figcaption></figure>

{% hint style="warning" %}
Developer mode lets you add unverified connectors. Only add the CodeWords connector from this page.
{% endhint %}
{% endstep %}

{% step %}
**Add the CodeWords plugin**

1. Go to **Plugins** (or open [chatgpt.com/plugins](https://chatgpt.com/plugins)).
2. Create a **New Plugin**.
3. Enter these details:

| Field              | What to enter                                   |
| ------------------ | ----------------------------------------------- |
| **Name**           | `CodeWords`                                     |
| **Connection**     | Server URL                                      |
| **Server URL**     | `https://runtime.codewords.ai/run/devx_mcp/mcp` |
| **Authentication** | OAuth                                           |

4. Check **I understand and want to continue**.
5. Tap **Create**.

<figure><img src="/files/6IxfttmtU1InzQhymhRq" alt="New Plugin form with CodeWords server URL and OAuth" width="230"><figcaption><p>Create the CodeWords plugin with this server URL and OAuth</p></figcaption></figure>
{% endstep %}

{% step %}
**Sign in with CodeWords**

ChatGPT shows **Add CodeWords to ChatGPT**. Tap **Sign in with CodeWords**.

<figure><img src="/files/LJGWaTlTSwZaYFdsvrEq" alt="Add CodeWords to ChatGPT sign-in screen" width="230"><figcaption><p>Sign in with CodeWords</p></figcaption></figure>
{% endstep %}

{% step %}
**Allow access**

You'll land on a CodeWords screen that lists what ChatGPT can do. Tap **Allow access**.

<figure><img src="/files/G6XZ27xZ8Z4Fk826fFiW" alt="CodeWords OAuth screen to allow ChatGPT access" width="230"><figcaption><p>Allow ChatGPT to use your CodeWords account</p></figcaption></figure>

In most cases you are connected within a couple of minutes. After that, you can build in ChatGPT and run on CodeWords.
{% endstep %}
{% endstepper %}

### What ChatGPT can do after you connect

* Build automations, apps, and websites with you in chat
* Read your workflows, runs, and logs
* Create, edit, and deploy workflows for you
* Run workflows you own (this uses your CodeWords credits)
* Save and use credentials you store in CodeWords

You can revoke access anytime in CodeWords under [Settings → API Keys](https://codewords.agemo.ai/#settings/api-keys).

### Example prompts

With the connector enabled, try:

> Build an automation that sends me a daily email summary.

> Create a simple website for my product and publish it.

> List my CodeWords workflows.

> Run my \[workflow name] workflow.

### FAQs

<details>

<summary>Why does the connector say it's paid or access denied?</summary>

The ChatGPT connector is a paid feature. Make sure you're on a **Pro**, **Business**, or **custom** plan. If you are on the Free plan, [subscribe to a CodeWords plan](https://codewords.agemo.ai/#settings/plans) first.

</details>

<details>

<summary>I don't see Developer mode. Where is it?</summary>

In ChatGPT, open **Settings → Security and login**. Developer mode is listed there (it may say **Elevated risk**).

</details>

<details>

<summary>The plugin won't create. What should I check?</summary>

Copy the Server URL exactly:

`https://runtime.codewords.ai/run/devx_mcp/mcp`

Also set Authentication to **OAuth**, then try **Create** again.

</details>

<details>

<summary>Sign-in or Allow access fails. What should I do?</summary>

Sign in to CodeWords in the same browser first, then go back to ChatGPT and try **Sign in with CodeWords** again.

</details>

Need help? Contact <support@codewords.ai>.


# CodeWords API key

Create and use your CodeWords API key to trigger workflows from external apps. Paid feature.

### Overview

The CodeWords API lets paid users trigger workflows from external applications with simple HTTP requests. Whether you're building a web app, mobile app, or connecting to third-party services, it's easy to connect to CodeWords once API access is enabled on your account.

{% hint style="warning" %}
CodeWords API keys are available on paid plans only. They are not available on the free plan.
{% endhint %}

### Getting your API key

First things first — you'll need credentials. If you're on a paid plan, open [Settings → API Keys](https://codewords.agemo.ai/#settings/api-keys) from the sidebar account menu.

{% hint style="info" %}
API keys are a paid-plan feature. Free users see a banner with **View plans** that opens [Plans](https://codewords.agemo.ai/#settings/plans). Workflow environment variables on the same tab are available on all plans.
{% endhint %}

Generate a key (or regenerate if you already have one). Keys look like:

* `cwk-` for standard reusable keys (most common)
* `cwotk-` for one-time keys (extra security for sensitive operations)

You can reveal, copy, or delete keys from the same tab. Treat your API key like a password — keep it secret and store it as an environment variable.

### How the API works

Base URL: `https://runtime.codewords.ai`

The endpoints you'll use:

* Quick tasks: `POST /run/{serviceId}` (under two minutes)
* Heavy lifting: `POST /run_async/{serviceId}` (up to 30 minutes)
* Check results: `GET /result/{request_id}` (for async calls)
* Watch progress: `GET /logs/{request_id}` (live streaming)
* Upload files: `POST /file` (when your workflow needs files)

Authentication: Just add "Authorization: Bearer {YOUR\_API\_KEY}" to your headers using a CodeWords API key from an eligible paid plan.

### Quick synchronous calls

Perfect for automations that finish fast (under two minutes). Your request waits for the result and gets it back immediately.

#### Using cURL

```bash
# Basic call to a LinkedIn enricher
curl -X POST https://runtime.codewords.ai/run/linkedin-enricher \
  -H "Authorization: Bearer cwk-your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "spreadsheet": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
    "include_email": false,
    "output_columns": ["bio", "location", "current_job"]
  }'

# Success response:
# {
#   "status": "completed",
#   "processed_count": 25,
#   "success_rate": 0.92,
#   "updated_sheet_url": "https://docs.google.com/spreadsheets/d/...",
#   "summary": "## Enrichment complete\n\n**25 profiles processed**..."
# }

# If it takes too long:
# HTTP 504 Gateway Timeout (switch to async!)
```

#### Python example

Install the CodeWords client first:

```bash
pip install codewords-client
```

```python
import os
from codewords_client import AsyncCodewordsClient
import asyncio

# Set your API key as environment variable
# export CODEWORDS_API_KEY=cwk-your-api-key-here

async def enrich_linkedin_profiles(spreadsheet_id: str):
    """Call the LinkedIn enricher and get results back immediately."""
    
    async with AsyncCodewordsClient() as client:
        try:
            response = await client.run(
                service_id="linkedin-enricher",
                inputs={
                    "spreadsheet": spreadsheet_id,
                    "include_email": False,
                    "output_columns": ["bio", "location", "current_job"]
                }
            )
            response.raise_for_status()
            return response.json()
            
        except Exception as e:
            if "504" in str(e) or "timeout" in str(e).lower():
                raise TimeoutError("Service took too long - try async instead")
            raise

# Usage
async def main():
    try:
        result = await enrich_linkedin_profiles("1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms")
        print(f"Processed {result['processed_count']} profiles")
        print(f"Success rate: {result['success_rate']:.1%}")
    except TimeoutError:
        print("That took too long - consider using async execution")

asyncio.run(main())
```

#### JavaScript/TypeScript example

Install the client:

```bash
npm install @codewords/client
```

```typescript
import { createServiceClient } from "@codewords/client";

// Set your API key as environment variable
const client = createServiceClient(process.env.CODEWORDS_API_KEY!);

interface LinkedInRequest {
  spreadsheet: string;
  include_email: boolean;
  output_columns: string[];
}

async function enrichLinkedInProfiles(request: LinkedInRequest) {
  try {
    const result = await client.runService(
      "linkedin-enricher", // service ID
      "",                  // path (empty for main endpoint)
      request              // your data
    );
    
    return result;
  } catch (error) {
    if (error.response?.status === 504) {
      throw new Error("Service timed out - try async execution");
    }
    throw error;
  }
}

// Usage
const request = {
  spreadsheet: "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
  include_email: false,
  output_columns: ["bio", "location", "current_job"]
};

const result = await enrichLinkedInProfiles(request);
console.log(`Processed ${result.processed_count} profiles`);
```

### Asynchronous calls for heavy lifting

For automations that need more time (up to 30 minutes), use async execution. You'll get a request ID immediately, then check back for results.

#### Using cURL

```bash
# 1. Start the async job
curl -X POST https://runtime.codewords.ai/run_async/linkedin-enricher \
  -H "Authorization: Bearer cwk-your-api-key-here" \
  -H "Content-Type: application/json" \
  -d '{
    "spreadsheet": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
    "include_email": true,
    "output_columns": ["bio", "location", "current_job", "education"]
  }'

# Response: {"request_id": "req_abc123def456"}

# 2. Check if it's done (might return 408 if still running)
curl -X GET "https://runtime.codewords.ai/result/req_abc123def456" \
  -H "Authorization: Bearer cwk-your-api-key-here"

# Not ready: HTTP 408 Request Timeout
# Ready: Full result with status 200

# 3. Optional: Watch live logs
curl -X GET "https://runtime.codewords.ai/logs/req_abc123def456" \
  -H "Authorization: Bearer cwk-your-api-key-here" \
  -H "Accept: text/event-stream"
```

#### Python example

```python
from codewords_client import AsyncCodewordsClient
import asyncio

async def enrich_profiles_async(spreadsheet_id: str):
    """Start a big job and wait for it to finish."""
    
    async with AsyncCodewordsClient() as client:
        # Start the job in background
        handle = await client.run(
            service_id="linkedin-enricher",
            inputs={
                "spreadsheet": spreadsheet_id,
                "include_email": True,
                "output_columns": ["bio", "location", "current_job", "education"]
            },
            in_background=True  # This makes it async
        )
        
        print(f"Started background job: {handle.request_id}")
        
        # Wait for it to finish (up to 10 minutes)
        response = await handle.result(timeout_seconds=600)
        return response.json()

# Usage
async def main():
    result = await enrich_profiles_async("1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms")
    print(f"Async job completed!")
    print(f"Processed {result['processed_count']} profiles")

asyncio.run(main())
```

#### TypeScript example

```typescript
import { createServiceClient } from "@codewords/client";

const client = createServiceClient(process.env.CODEWORDS_API_KEY!);

async function enrichProfilesAsync(request: LinkedInRequest) {
  // Start async execution
  const requestId = await client.runAsync(
    "linkedin-enricher",
    "",
    request
  );
  
  console.log(`Started async job: ${requestId}`);
  
  // Wait for results (10 minutes max)
  const result = await client.pollResult(600000);
  
  if (result.responseStatus === 200) {
    return result.responseJson;
  } else {
    throw new Error(`Job failed with status ${result.responseStatus}`);
  }
}
```

### Working with files

When your CodeWords automation needs file inputs, upload them first and pass the download URLs.

#### Upload and process pattern

```python
from codewords_client import AsyncCodewordsClient

async def process_my_csv(file_path: str):
    """Upload a local file and process it with CodeWords."""
    
    async with AsyncCodewordsClient() as client:
        # Read your local file
        with open(file_path, 'rb') as f:
            file_content = f.read()
        
        # Upload to CodeWords
        download_url = await client.upload_file_content(
            filename="data.csv",
            file_content=file_content
        )
        
        # Process with your automation
        response = await client.run(
            service_id="csv-processor",
            inputs={
                "csv_file": download_url,
                "processing_options": {"header_row": True}
            }
        )
        return response.json()

# Usage
result = await process_my_csv("./my-data.csv")
print(f"Processed {result['row_count']} rows")
```

### Integrating with web apps

Here's how to add CodeWords to a Flask web application:

```python
from flask import Flask, request, jsonify
from codewords_client import AsyncCodewordsClient
import asyncio

app = Flask(__name__)

@app.route('/analyze-spreadsheet', methods=['POST'])
def analyze_spreadsheet():
    """API endpoint that calls CodeWords behind the scenes."""
    
    data = request.get_json()
    spreadsheet_id = data.get('spreadsheet_id')
    
    if not spreadsheet_id:
        return jsonify({"error": "spreadsheet_id required"}), 400
    
    async def call_codewords():
        async with AsyncCodewordsClient() as client:
            response = await client.run(
                service_id="linkedin-enricher",
                inputs={
                    "spreadsheet": spreadsheet_id,
                    "include_email": False,
                    "output_columns": ["bio", "location", "current_job"]
                }
            )
            return response.json()
    
    try:
        result = asyncio.run(call_codewords())
        return jsonify(result)
    except Exception as e:
        if "timeout" in str(e).lower():
            return jsonify({"error": "Analysis timed out"}), 408
        return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    app.run(debug=True)
```

### Error handling best practices

Make your API calls bulletproof with smart retry logic:

```python
from codewords_client import AsyncCodewordsClient
import asyncio
import logging

async def bulletproof_call(
    service_id: str, 
    inputs: dict, 
    max_retries: int = 3
):
    """Make a robust call with automatic retry and timeout handling."""
    
    async with AsyncCodewordsClient() as client:
        for attempt in range(max_retries):
            try:
                # Try sync first
                response = await client.run(
                    service_id=service_id,
                    inputs=inputs
                )
                return response.json()
                
            except Exception as e:
                if "timeout" in str(e).lower() or "504" in str(e):
                    # Switch to async for timeouts
                    logging.info("Switching to async mode due to timeout...")
                    handle = await client.run(
                        service_id=service_id,
                        inputs=inputs,
                        in_background=True
                    )
                    response = await handle.result(timeout_seconds=600)
                    return response.json()
                
                # Retry on other errors
                if attempt < max_retries - 1:
                    await asyncio.sleep(2 ** attempt)  # Exponential backoff
                    continue
                raise

# Usage
try:
    result = await bulletproof_call("my-automation", {"input": "data"})
    print("Success!")
except Exception as e:
    print(f"Failed after retries: {e}")
```

### FAQs

<details>

<summary>What is the CodeWords API used for?</summary>

The CodeWords API lets you trigger and control workflows directly from any app or system using simple HTTP requests. You can build web or mobile apps that run CodeWords automations seamlessly in the background.

</details>

<details>

<summary>What’s the difference between sync and async API calls?</summary>

* **Synchronous (`/run`)**: Best for fast workflows that finish in under two minutes.
* **Asynchronous (`/run_async`)**: Designed for longer jobs (up to 30 minutes). You get a request ID instantly and can check progress or results later.

</details>

<details>

<summary>How do I authenticate requests?</summary>

Include your API key in the request header:\
`Authorization: Bearer YOUR_API_KEY`\
This ensures that every API call is securely linked to your CodeWords account. CodeWords API keys are available on paid plans only.

</details>

<details>

<summary>Can I upload files to my workflows?</summary>

Yes. Use the `/file` endpoint to upload any file your automation needs. CodeWords returns a secure download URL you can include in your workflow inputs.

</details>

<details>

<summary>What programming languages are supported?</summary>

You can call the API from any language that supports HTTP requests. Official clients are available for Python and JavaScript/TypeScript, making integration effortless.

</details>

<details>

<summary>How long can an API job run?</summary>

Synchronous jobs run for up to 2 minutes, while asynchronous workflows can run for up to 30 minutes before timing out.

</details>


# WhatsApp automations

Build WhatsApp AI agents and chatbots with no code. Personal assistants, group bots, lead qualification — 125+ templates.

## Why WhatsApp?

With over **2 billion active users**, WhatsApp is the world's most popular messaging platform — and it's the perfect channel for AI-powered automation. Your customers, team members, and contacts are already there. No app downloads, no onboarding friction.

CodeWords gives you **three ways to integrate** with WhatsApp:

* **Shared DM bot number** (`+447424366129`) — run 1:1 workflows, notifications, and AI agents through a shared CodeWords bot number
* **Shared group bot number** (`+447466216790`) — add a shared CodeWords bot number to your WhatsApp groups to run workflows and AI agents there
* **Connect your own number (beta)** — link your personal WhatsApp number by QR code when you want messages to be sent from you, not a shared bot

{% hint style="info" %}
The shared WhatsApp numbers are CodeWords bot numbers used in workflows and agent building. They are not support numbers for contacting the CodeWords team.
{% endhint %}

Whether you're building a no-code WhatsApp bot for customer support, a personal AI agent for productivity, or an automated WhatsApp chatbot for lead qualification — CodeWords and Cody make it possible in minutes, not months.

## What You Can Build

The WhatsApp automation platform supports a wide range of use cases:

| Use Case                   | Description                                                                                                     |
| -------------------------- | --------------------------------------------------------------------------------------------------------------- |
| **Personal AI Assistants** | A WhatsApp AI agent that manages your calendar, tasks, and email — like having a personal Jarvis in your pocket |
| **Group Bots**             | Smart bots for WhatsApp groups that answer questions, moderate content, and summarize discussions               |
| **Notification Systems**   | Automated alerts for orders, appointments, payments, and custom triggers                                        |
| **Two-Way Integrations**   | Connect WhatsApp to CRMs, databases, APIs, and 100+ tools for seamless data flow                                |
| **Lead Qualification**     | Engage and qualify leads through natural WhatsApp conversation — no forms needed                                |
| **E-commerce Assistants**  | Shopping bots with product search, cart management, and checkout — all inside WhatsApp                          |

## How It Works

Building a WhatsApp AI agent with CodeWords takes three simple steps:

**Step 1: Tell Cody what you want** Describe your WhatsApp bot in plain English. For example: *"I want a WhatsApp bot that answers customer questions from my FAQ document."*

**Step 2: Cody builds it for you** Cody — your AI coding agent — researches the best approach, writes the code, connects your tools, and deploys the bot. You can watch the entire process and give feedback along the way.

**Step 3: Choose your WhatsApp connection** Depending on the workflow, Cody either registers you to a shared CodeWords bot number for DMs or groups, or helps you connect your own WhatsApp number in the beta flow. Messages start flowing as soon as setup is complete.

{% hint style="info" %}
**No coding required.** CodeWords is a no-code WhatsApp bot builder — Cody handles all the technical work. You just describe what you want in plain English.
{% endhint %}

[**Build Your First WhatsApp Bot →**](https://codewords.agemo.ai/chat?sendAutomatically=true\&initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgYXV0b21hdGlvbi4gSGVscCBtZSBjaG9vc2UgdGhlIGJlc3QgdHlwZSBmb3IgbXkgbmVlZHMg4oCUIGEgcGVyc29uYWwgQUkgYXNzaXN0YW50LCBhIGdyb3VwIGJvdCwgb3IgYSBub3RpZmljYXRpb24gc3lzdGVtLg%3D%3D)

## Popular WhatsApp Templates

Get started instantly with one of our pre-built WhatsApp automation templates. Click any template to customize it with Cody.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>WhatsApp AI Assistant Bot</strong></td><td>End-to-end AI chatbot with memory that holds natural conversations over WhatsApp.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBBSSBBc3Npc3RhbnQgQm90LiBIZXJlJ3Mgd2hhdCBpdCBkb2VzOiBBbiBlbmQtdG8tZW5kIEFJIGNoYXRib3Qgd2l0aCBtZW1vcnkgdGhhdCBob2xkcyBuYXR1cmFsIGNvbnZlcnNhdGlvbnMgb3ZlciBXaGF0c0FwcC4gSGVscCBtZSBjdXN0b21pemUgaXQgZm9yIG15IG5lZWRzLg%3D%3D">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBBSSBBc3Npc3RhbnQgQm90LiBIZXJlJ3Mgd2hhdCBpdCBkb2VzOiBBbiBlbmQtdG8tZW5kIEFJIGNoYXRib3Qgd2l0aCBtZW1vcnkgdGhhdCBob2xkcyBuYXR1cmFsIGNvbnZlcnNhdGlvbnMgb3ZlciBXaGF0c0FwcC4gSGVscCBtZSBjdXN0b21pemUgaXQgZm9yIG15IG5lZWRzLg%3D%3D</a></td></tr><tr><td><strong>WhatsApp Expense Tracker</strong></td><td>Scan bills and track expenses simply by sending photos to WhatsApp.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBFeHBlbnNlIFRyYWNrZXIuIEhlcmUncyB3aGF0IGl0IGRvZXM6IFNjYW4gYmlsbHMgYW5kIHRyYWNrIGV4cGVuc2VzIHNpbXBseSBieSBzZW5kaW5nIHBob3RvcyB0byBXaGF0c0FwcC4gSGVscCBtZSBjdXN0b21pemUgaXQgZm9yIG15IG5lZWRzLg%3D%3D">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBFeHBlbnNlIFRyYWNrZXIuIEhlcmUncyB3aGF0IGl0IGRvZXM6IFNjYW4gYmlsbHMgYW5kIHRyYWNrIGV4cGVuc2VzIHNpbXBseSBieSBzZW5kaW5nIHBob3RvcyB0byBXaGF0c0FwcC4gSGVscCBtZSBjdXN0b21pemUgaXQgZm9yIG15IG5lZWRzLg%3D%3D</a></td></tr><tr><td><strong>WhatsApp Lead Qualifier</strong></td><td>Qualify inbound leads through natural WhatsApp conversation — no forms needed.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBMZWFkIFF1YWxpZmllci4gSGVyZSdzIHdoYXQgaXQgZG9lczogUXVhbGlmeSBpbmJvdW5kIGxlYWRzIHRocm91Z2ggbmF0dXJhbCBXaGF0c0FwcCBjb252ZXJzYXRpb24uIEhlbHAgbWUgY3VzdG9taXplIGl0IGZvciBteSBuZWVkcy4%3D">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBMZWFkIFF1YWxpZmllci4gSGVyZSdzIHdoYXQgaXQgZG9lczogUXVhbGlmeSBpbmJvdW5kIGxlYWRzIHRocm91Z2ggbmF0dXJhbCBXaGF0c0FwcCBjb252ZXJzYXRpb24uIEhlbHAgbWUgY3VzdG9taXplIGl0IGZvciBteSBuZWVkcy4%3D</a></td></tr><tr><td><strong>WhatsApp Voice Note Transcriber</strong></td><td>Automatically transcribe and summarize WhatsApp voice notes into clean text.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBWb2ljZSBOb3RlIFRyYW5zY3JpYmVyLiBIZXJlJ3Mgd2hhdCBpdCBkb2VzOiBBdXRvbWF0aWNhbGx5IHRyYW5zY3JpYmUgYW5kIHN1bW1hcml6ZSBXaGF0c0FwcCB2b2ljZSBub3Rlcy4gSGVscCBtZSBjdXN0b21pemUgaXQgZm9yIG15IG5lZWRzLg%3D%3D">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBWb2ljZSBOb3RlIFRyYW5zY3JpYmVyLiBIZXJlJ3Mgd2hhdCBpdCBkb2VzOiBBdXRvbWF0aWNhbGx5IHRyYW5zY3JpYmUgYW5kIHN1bW1hcml6ZSBXaGF0c0FwcCB2b2ljZSBub3Rlcy4gSGVscCBtZSBjdXN0b21pemUgaXQgZm9yIG15IG5lZWRzLg%3D%3D</a></td></tr><tr><td><strong>WhatsApp Budget Tracker</strong></td><td>Track daily expenses just by texting amounts and categories to your WhatsApp bot.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBCdWRnZXQgVHJhY2tlci4gSGVyZSdzIHdoYXQgaXQgZG9lczogVHJhY2sgZGFpbHkgZXhwZW5zZXMganVzdCBieSB0ZXh0aW5nIGFtb3VudHMgYW5kIGNhdGVnb3JpZXMuIEhlbHAgbWUgY3VzdG9taXplIGl0IGZvciBteSBuZWVkcy4%3D">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBCdWRnZXQgVHJhY2tlci4gSGVyZSdzIHdoYXQgaXQgZG9lczogVHJhY2sgZGFpbHkgZXhwZW5zZXMganVzdCBieSB0ZXh0aW5nIGFtb3VudHMgYW5kIGNhdGVnb3JpZXMuIEhlbHAgbWUgY3VzdG9taXplIGl0IGZvciBteSBuZWVkcy4%3D</a></td></tr><tr><td><strong>WhatsApp Meeting Scheduler</strong></td><td>Schedule meetings via natural language — "Book a call with Sarah tomorrow at 3pm."</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBNZWV0aW5nIFNjaGVkdWxlci4gSGVyZSdzIHdoYXQgaXQgZG9lczogU2NoZWR1bGUgbWVldGluZ3MgdmlhIG5hdHVyYWwgbGFuZ3VhZ2UgbWVzc2FnZXMgb24gV2hhdHNBcHAuIEhlbHAgbWUgY3VzdG9taXplIGl0IGZvciBteSBuZWVkcy4%3D">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBNZWV0aW5nIFNjaGVkdWxlci4gSGVyZSdzIHdoYXQgaXQgZG9lczogU2NoZWR1bGUgbWVldGluZ3MgdmlhIG5hdHVyYWwgbGFuZ3VhZ2UgbWVzc2FnZXMgb24gV2hhdHNBcHAuIEhlbHAgbWUgY3VzdG9taXplIGl0IGZvciBteSBuZWVkcy4%3D</a></td></tr><tr><td><strong>WhatsApp E-commerce Chatbot</strong></td><td>Shopping assistant with product browsing, cart management, and checkout support.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBFLWNvbW1lcmNlIENoYXRib3QuIEhlcmUncyB3aGF0IGl0IGRvZXM6IEEgc2hvcHBpbmcgYXNzaXN0YW50IHdpdGggYnJvd3NpbmcsIGNhcnQgbWFuYWdlbWVudCwgYW5kIGNoZWNrb3V0LiBIZWxwIG1lIGN1c3RvbWl6ZSBpdCBmb3IgbXkgbmVlZHMu">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBFLWNvbW1lcmNlIENoYXRib3QuIEhlcmUncyB3aGF0IGl0IGRvZXM6IEEgc2hvcHBpbmcgYXNzaXN0YW50IHdpdGggYnJvd3NpbmcsIGNhcnQgbWFuYWdlbWVudCwgYW5kIGNoZWNrb3V0LiBIZWxwIG1lIGN1c3RvbWl6ZSBpdCBmb3IgbXkgbmVlZHMu</a></td></tr><tr><td><strong>WhatsApp Real-Time Translator</strong></td><td>Translate incoming and outgoing messages between any languages in real time.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBSZWFsLVRpbWUgVHJhbnNsYXRvci4gSGVyZSdzIHdoYXQgaXQgZG9lczogVHJhbnNsYXRlIGluY29taW5nIGFuZCBvdXRnb2luZyBXaGF0c0FwcCBtZXNzYWdlcyBiZXR3ZWVuIGFueSBsYW5ndWFnZXMgaW4gcmVhbCB0aW1lLiBIZWxwIG1lIGN1c3RvbWl6ZSBpdCBmb3IgbXkgbmVlZHMu">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIHNvbWV0aGluZyBsaWtlIHRoZSBXaGF0c0FwcCBSZWFsLVRpbWUgVHJhbnNsYXRvci4gSGVyZSdzIHdoYXQgaXQgZG9lczogVHJhbnNsYXRlIGluY29taW5nIGFuZCBvdXRnb2luZyBXaGF0c0FwcCBtZXNzYWdlcyBiZXR3ZWVuIGFueSBsYW5ndWFnZXMgaW4gcmVhbCB0aW1lLiBIZWxwIG1lIGN1c3RvbWl6ZSBpdCBmb3IgbXkgbmVlZHMu</a></td></tr></tbody></table>


# For WhatsApp DMs

Automate WhatsApp DMs to send personalized updates, notifications, and AI-powered chats. Build your own WhatsApp DM workflow automations and connect with 3,000+ apps — no coding required.

### What are WhatsApp automations for DMs

WhatsApp direct message (DM) automations let you run CodeWords workflows and AI agents in 1:1 chats through a shared CodeWords bot number.

### Shared CodeWords DM bot number

**+447424366129** — the shared CodeWords bot number for WhatsApp DM workflows and AI agents.

* Used for 1:1 workflow automations, notifications, and AI assistants built in CodeWords
* Messages to and from your DM automation flow through this shared bot number
* Not a support or contact number for reaching the CodeWords team

### Setting up your first DM automation

{% stepper %}
{% step %}
**Build the automation through chat**

Describe the kind of WhatsApp automation you want to create, along with its trigger.

Example: "Create a WhatsApp assistant connected to an LLM that responds to every message I send. Also connect it to my Google Calendar so it can view, edit, list, and create events."
{% endstep %}

{% step %}
**Provide your phone number**

Cody asks which phone number you want to register for the DM workflow. This tells CodeWords which 1:1 conversations should route into your automation. Once connected and built, your assistant sends a welcome message from the shared DM bot number.
{% endstep %}

{% step %}
**Test your automation**

Send any message to the shared DM bot number. The assistant detects it and responds through your custom WhatsApp DM workflow.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
**Note**: You can create multiple direct messaging automations that send messages, but only one trigger-based two-way assistant can be active at a time.
{% endhint %}

Once your automation is set up, you can manage its WhatsApp trigger directly from the [Triggers](https://codewords.agemo.ai/workflows/triggers) page including pausing or deleting it at any time.\
Alternatively, you can simply ask **Cody** to remove the trigger if you no longer want the automation to run.

### What can you build with the WhatsApp automations for direct messaging?

#### Type 1: One-way notifications (Simple)

Perfect for broadcast-style updates without needing user replies.

| Use Case              | What It Does                                     | Example                                             |
| --------------------- | ------------------------------------------------ | --------------------------------------------------- |
| Appointment Reminders | Send scheduled reminders                         | “Reminder: Dental appointment tomorrow at 3 PM”     |
| Shipping Updates      | Track package status from your emails            | “Your package is out for delivery.”                 |
| Payment Alerts        | Confirm transactions from emails or payment apps | “Payment received: $99.00. Thank you!”              |
| Daily Digests         | Regular summaries                                | “Your daily news: 3 new articles, 2 tasks due”      |
| Service Alerts        | System notifications                             | “Your subscription renews in 3 days—update payment” |

#### Type 2: Two-way assistant (Interactive)

Build intelligent conversations where **users** ask questions and get instant help.

| Use Case          | Example Conversation                                                                                                          |
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| FAQ Assistant     | <p>User: “What does our documentation say about opening times?”</p><p>Assistant: “Mon–Fri 9–6, Sat 10–4!”</p>                 |
| Meeting Assistant | <p>User: “Create a meeting with <johndoe@gmail.com> for Dec 10 at 2:00 PM”</p><p>Assistant: “Meeting created for Dec 10.”</p> |

### Supported message types

| Type     | When You Can Send                   | Use For                                   |
| -------- | ----------------------------------- | ----------------------------------------- |
| Template | Anytime                             | All notifications, first contact          |
| Text     | Within 24 hours of a **user** reply | Assistant conversations                   |
| Image    | Within 24 hours of a **user** reply | Screenshots, receipts, and product photos |

### Pricing

| Automation actions                  | Cost                                                           |
| ----------------------------------- | -------------------------------------------------------------- |
| Receiving messages                  | Free                                                           |
| Sending messages(All Message types) | €0.002 per message (≈ 0.2¢) + Cost of executing the Automation |

### WhatsApp automations for direct messaging vs groups

| Feature         | Direct Messaging (this guide)                                              | Group                                 |
| --------------- | -------------------------------------------------------------------------- | ------------------------------------- |
| Who you message | Individual **users** (1:1)                                                 | WhatsApp groups                       |
| Best for        | Notifications, support, sales flows                                        | Team/community coordination           |
| Service window  | The 24-hour rule applies for & No service window for one-way notifications | No window limits                      |
| Setup           | Simple (\~5 min)                                                           | Medium (two-phase link)               |
| Message types   | Templates, Text, Images                                                    | Text, media, polls, events            |
| Event types     | Messages                                                                   | Messages, reactions, updates, changes |

You can use both! Many teams use **Direct Messaging** for user specific needs and **Group** for internal groups.

### FAQs

<details>

<summary>Can I have multiple WhatsApp automations?</summary>

Yes, you can create multiple WhatsApp automations that send messages.\
However, only one trigger-based two-way assistant (that can both send and receive messages) can be active at a time.

</details>

<details>

<summary>How do I manage or delete a WhatsApp trigger?</summary>

You can manage all triggers from the Triggers page to pause, edit, or delete them anytime.\
Alternatively, simply ask Cody:

“Delete my WhatsApp trigger.”\
Cody will remove it automatically.

</details>

<details>

<summary>How is this different from WhatsApp Group Automations?</summary>

* **Direct Messaging Automations** handle personal, one-on-one interactions.
* **Group Automations** manage team or community conversations inside group chats.\
  Many teams use both — direct messages for private tasks and groups for internal workflows.

***

</details>

<details>

<summary>Is my WhatsApp data secure?</summary>

Yes. DM automations run through a verified shared CodeWords WhatsApp Business account, and messages are encrypted through WhatsApp’s secure infrastructure. Your number and connected data remain private and under your control.

</details>

### Getting help

If your Assistant isn’t responding:

1. Ask Cody to verify if the setup is correct
2. Check in-app support or use live chat at [codewords.ai](https://codewords.agemo.ai/)

## Popular DM Bot Templates

Get started with a pre-built WhatsApp DM automation template. Click any card to customize it with Cody.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Personal AI Assistant</strong></td><td>Your own Jarvis on WhatsApp — manages calendar, email, tasks, and answers questions in your style.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgcGVyc29uYWwgV2hhdHNBcHAgQUkgYXNzaXN0YW50IGZvciBETXMgdGhhdCBtYW5hZ2VzIG15IGNhbGVuZGFyLCB0YXNrcywgYW5kIHJlbWluZGVycy4gSGVscCBtZSBnZXQgc3RhcnRlZC4%3D">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgcGVyc29uYWwgV2hhdHNBcHAgQUkgYXNzaXN0YW50IGZvciBETXMgdGhhdCBtYW5hZ2VzIG15IGNhbGVuZGFyLCB0YXNrcywgYW5kIHJlbWluZGVycy4gSGVscCBtZSBnZXQgc3RhcnRlZC4%3D</a></td></tr><tr><td><strong>Voice Note Transcriber</strong></td><td>Automatically transcribe and summarize every voice note you receive — never replay a 5-minute audio again.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgdm9pY2Ugbm90ZSB0cmFuc2NyaWJlciBmb3IgbXkgRE1zIHRoYXQgdHJhbnNjcmliZXMgYW5kIHN1bW1hcml6ZXMgZXZlcnkgdm9pY2UgbWVzc2FnZSBJIHJlY2VpdmUuIEhlbHAgbWUgc2V0IGl0IHVwLg%3D%3D">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgdm9pY2Ugbm90ZSB0cmFuc2NyaWJlciBmb3IgbXkgRE1zIHRoYXQgdHJhbnNjcmliZXMgYW5kIHN1bW1hcml6ZXMgZXZlcnkgdm9pY2UgbWVzc2FnZSBJIHJlY2VpdmUuIEhlbHAgbWUgc2V0IGl0IHVwLg%3D%3D</a></td></tr><tr><td><strong>Budget Tracker</strong></td><td>Text your expenses throughout the day and get spending breakdowns, category reports, and budget alerts.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgYnVkZ2V0IHRyYWNrZXIgZm9yIERNcyB3aGVyZSBJIGNhbiB0ZXh0IG15IGV4cGVuc2VzIGFuZCBnZXQgc3BlbmRpbmcgcmVwb3J0cy4gSGVscCBtZSBjdXN0b21pemUgaXQu">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgYnVkZ2V0IHRyYWNrZXIgZm9yIERNcyB3aGVyZSBJIGNhbiB0ZXh0IG15IGV4cGVuc2VzIGFuZCBnZXQgc3BlbmRpbmcgcmVwb3J0cy4gSGVscCBtZSBjdXN0b21pemUgaXQu</a></td></tr><tr><td><strong>Lead Qualifier</strong></td><td>Engage new contacts via WhatsApp DM, qualify them through natural conversation, and sync results to your CRM.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgbGVhZCBxdWFsaWZpZXIgZm9yIERNcyB0aGF0IGVuZ2FnZXMgbmV3IGNvbnRhY3RzLCBxdWFsaWZpZXMgdGhlbSwgYW5kIHN5bmNzIHRvIG15IENSTS4gSGVscCBtZSBzZXQgaXQgdXAu">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgbGVhZCBxdWFsaWZpZXIgZm9yIERNcyB0aGF0IGVuZ2FnZXMgbmV3IGNvbnRhY3RzLCBxdWFsaWZpZXMgdGhlbSwgYW5kIHN5bmNzIHRvIG15IENSTS4gSGVscCBtZSBzZXQgaXQgdXAu</a></td></tr></tbody></table>


# WhatsApp groups

Build smart WhatsApp Group Automations that can send messages, welcome members, track activity, send reminders, and connect with 3,000+ apps — all without coding.

### What are WhatsApp group automations

**WhatsApp Group Automations** help you manage your group chats. They can:

* Listen to messages and respond automatically
* Run predefined workflows
* Send announcements, reminders, and polls
* Welcome new members
* Track engagement and group activity
* Analyze messages to share insights

They are workflow automations that you can use to keep your WhatsApp groups active, organized, and responsive — even when you’re offline.

### Shared CodeWords group bot number

**+447466216790** — the shared CodeWords bot number for WhatsApp group workflows and AI agents.

* Add this shared bot number to a WhatsApp group to link an automation
* Group messages, reactions, and updates flow to your workflow through this shared bot number
* It is not a support or contact number for reaching the CodeWords team

### Why build WhatsApp automations with CodeWords

CodeWords makes it easy to build, run, and manage your automations with natural language and no coding required.

Here’s why users choose to build automations for WhatsApp on CodeWords :

1. Build WhatsApp Automations by telling **Cody** what you want
2. Connect WhatsApp automations with 3,000+ apps and AI models
3. Secure & private as your data stays protected
4. Launch a working WhatsApp automation in under 10 minutes

### What WhatsApp group automations can you build

| Use Case           | What It Does                                    | Example                                                        |
| ------------------ | ----------------------------------------------- | -------------------------------------------------------------- |
| Team Assistant     | Answers FAQs instantly                          | “What’s the Wi-Fi password?” → Assistant replies automatically |
| Welcome Assistant  | Greets new members                              | “Welcome, John! Here is our group guide.”                      |
| Daily Digest       | Sends group summaries                           | “Yesterday: 45 messages, Here is the summary"                  |
| Poll Tracker       | Monitors and reports poll results               | “Poll closed. Pizza wins with 10 votes.”                       |
| Engagement Tracker | Tracks reactions and member activity            | Weekly leaderboard of top contributors                         |
| Community Manager  | Schedules events and sends reminders            | “Team meeting tomorrow at 10:00.”                              |
| Execute Workflows  | Executes a workflow you have built on CodeWords | "Run LinkedIn Scraper and store summary in Notion"             |

### How WhatsApp automations work

{% stepper %}
{% step %}
**The group**

You add the **shared CodeWords group bot number** (+447466216790) to your WhatsApp group to link an automation.
{% endstep %}

{% step %}
**Event detection**

The configured automation listens for your defined trigger, key events — like messages, reactions, or new members.
{% endstep %}

{% step %}
**Trigger your automation**

When a trigger event happens, CodeWords automatically runs your custom WhatsApp automation.
{% endstep %}

{% step %}
**Processes and responses**

The workflow automation uses AI to analyze the message, take action, and send a response back to the group — just like a real assistant.
{% endstep %}
{% endstepper %}

### Event types the WhatsApp automations on CodeWords can detect

| Event Type         | When It Happens              | Example Uses                         |
| ------------------ | ---------------------------- | ------------------------------------ |
| `message:in:new`   | When someone sends a message | Reply, log, or summarize content     |
| `group:update`     | Members join or leave        | Welcome messages, update tracking    |
| `message:update`   | Polls or event changes       | Share updated results                |
| `message:reaction` | Emoji reaction added         | Track engagement or popular messages |

### Setting up your first WhatsApp assistant

{% stepper %}
{% step %}
**Build the assistant through chat**

Describe the kind of WhatsApp Assistant you want to create with your defined trigger, this can be a workflow automation.

Example 1: "Create a WhatsApp Assistant for my group that’s connected to an LLM and automatically responds to any message from group members."

Example 2: "Create a WhatsApp Assistant for my group that takes article URLs posted, adds it to my notion table with metadata. Only trigger if there is URL that is posted."
{% endstep %}

{% step %}
**Register your number**

Tell **Cody** your number:

> “Register my phone number +447000000000 for the WhatsApp group Assistant.”

Cody will create your registration and send setup instructions.
{% endstep %}

{% step %}
**Add the shared CodeWords group bot number to your WhatsApp group**

1. Open your group → Tap group name → “Add participant”
2. Add +447466216790
3. Confirm addition

You’ll see:

{% hint style="success" %}
"+447466216790 was added"
{% endhint %}
{% endstep %}

{% step %}
**Mention the CodeWords bot**

In your group, type:

```
@CodeWords
```

You’ll get confirmation:

{% hint style="success" %}
CodeWords bot linked successfully.
{% endhint %}
{% endstep %}

{% step %}
**Test your assistant**

Send any message in the group — the Assistant will detect any trigger and respond through your Custom WhatsApp Group Assistant.
{% endstep %}
{% endstepper %}

### Connect an existing WhatsApp automation template

{% stepper %}
{% step %}
**Access the template**

Go to the Run Page for the WhatsApp Automation template and review its description to understand how it works.
{% endstep %}

{% step %}
**Run the template**

Enter your phone number (including country code), then run the automation template and register your number with the automation.

You’ll see:

{% hint style="success" %}
Workflow automation registration created successfully!
{% endhint %}

Follow the instructions shown.
{% endstep %}

{% step %}
**Add the shared CodeWords group bot number to your WhatsApp group**

1. Open your group → Tap group name → “Add participant”
2. Add +447466216790
3. Confirm addition

You’ll see:

{% hint style="success" %}
"+447466216790 was added"
{% endhint %}
{% endstep %}

{% step %}
**Mention the CodeWords bot**

In your group, type:

```
@CodeWords
```

You’ll get confirmation:

{% hint style="success" %}
CodeWords bot linked successfully.
{% endhint %}
{% endstep %}

{% step %}
**Test your automation**

Send any message in the group — the Assistant will detect it and respond through your Custom WhatsApp Group Assistant.
{% endstep %}
{% endstepper %}

Once your automation is set up, you can manage its WhatsApp trigger directly from the [Triggers](https://codewords.agemo.ai/workflows/triggers) page including pausing or deleting it at any time.\
Alternatively, you can simply ask **Cody** to remove the trigger if you no longer want the automation to run.

### Cost

| Automation Message Type       | Cost per Message                          | Examples                                   |
| ----------------------------- | ----------------------------------------- | ------------------------------------------ |
| Text, Poll, Event, Location   | €0.002 + Cost of executing the Automation | “Daily update,” “New event added”          |
| Image, Video, Audio, Document | €0.004 + Cost of executing the Automation | Reports, media summaries                   |
| Receiving messages            | Free                                      | You only pay for what the Automation sends |

### Privacy and data handling

#### Key principle: Ephemeral by default

Each run executes in a fresh sandbox that is destroyed after completion. Most runs complete in seconds, with a maximum lifetime of 30 minutes for complex workflows.

* Created new for each event
* Deleted after execution
* No local storage between runs
* No automatic data retention

**Meaning:**

* Your bot forgets everything after each run.
* Data is only kept if you *explicitly choose* to store it.
* This ensures privacy-first design — no accidental data retention.

### Getting help

If your Assistant isn’t responding:

1. Confirm it’s linked by mentioning `@CodeWords`
2. Ask Cody to verify your linked groups
3. Check in-app support or use live chat at [codewords.ai](https://codewords.agemo.ai/)

### FAQs

<details>

<summary>What’s the difference between WhatsApp Automation for Groups and Direct Messages?</summary>

| Who you message   | WhatsApp **groups** (teams, communities)    | Individuals (1:1)                                  |
| ----------------- | ------------------------------------------- | -------------------------------------------------- |
| Shared bot number | +447466216790                               | +447424366129                                      |
| Service window    | No restrictions                             | 24-hour window after customer reply                |
| Events            | Messages, reactions, updates, group changes | Messages only                                      |
| Message types     | Text, media, polls, events, docs, etc.      | Templates, text, images                            |
| Best for          | Team coordination, community management     | Notifications, support, sales, personal assistants |

</details>

<details>

<summary>Do I need to know how to code?</summary>

No. Describe what you want to Cody; it asks clarifying questions, builds, tests, and deploys.\
Developers: Full code patterns are available if you want to customize.

</details>

<details>

<summary>How do I set up a WhatsApp Group Automation?</summary>

Two phases:

1. Register your phone with Cody by running a WhatsApp Group automation template or register while building your own automation.
2. Add the shared CodeWords group bot number (+447466216790) to the group and mention `@CodeWords`.\
   You’ll see a confirmation, and events start flowing to your workflow automation.

</details>

<details>

<summary>Do I register for each group?</summary>

Yes, you can refer to the steps [here](https://docs.codewords.ai/whatsapp/whatsapp-automations/whatsapp-groups#connect-an-existing-whatsapp-assistant-template).

</details>

<details>

<summary>What happens when I mention CodeWords?</summary>

The shared group bot captures the **group ID**, links it to your registration, posts a **success** message, and starts forwarding events to your workflow.

</details>

<details>

<summary>Can one automation template handle multiple groups?</summary>

Yes. Enter your phone number (with country code) on the Assistant’s Run Page and start it.\
Then in WhatsApp:

1. Add the shared CodeWords group bot number to the group you want to link
2. Mention it by sending: `@CodeWords`

You’ll receive a confirmation that the CodeWords bot is linked to the workflow.

Follow the exact steps shared [here](https://docs.codewords.ai/whatsapp/whatsapp-automations/whatsapp-groups#connect-an-existing-whatsapp-assistant-template).

</details>

<details>

<summary>What’s the CodeWords number I should add?</summary>

**Shared group bot number**: +447466216790 (add to groups)\
**Shared DM bot number**: +447424366129 (1:1 DMs)

</details>

<details>

<summary>I mentioned the CodeWords before registering—now what?</summary>

You’ll see “**No Active Registration.**”\
Fix: Register your phone with Cody, then mention CodeWords again in the group.

</details>

## Popular Group Bot Templates

Get started with a pre-built WhatsApp group bot template. Click any card to customize it with Cody.

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Group Q&#x26;A Bot</strong></td><td>Add an AI assistant to your group that answers questions from a shared knowledge base — FAQs, docs, or wikis.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgZ3JvdXAgUSZBIGJvdCB0aGF0IGFuc3dlcnMgcXVlc3Rpb25zIGZyb20gYSBzaGFyZWQga25vd2xlZGdlIGJhc2UuIEhlbHAgbWUgc2V0IGl0IHVwLg%3D%3D">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgZ3JvdXAgUSZBIGJvdCB0aGF0IGFuc3dlcnMgcXVlc3Rpb25zIGZyb20gYSBzaGFyZWQga25vd2xlZGdlIGJhc2UuIEhlbHAgbWUgc2V0IGl0IHVwLg%3D%3D</a></td></tr><tr><td><strong>Group Moderator Bot</strong></td><td>Automatically enforce group rules, summarize long discussions, and manage membership requests.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgZ3JvdXAgbW9kZXJhdG9yIGJvdCB0aGF0IGVuZm9yY2VzIHJ1bGVzLCBzdW1tYXJpemVzIGRpc2N1c3Npb25zLCBhbmQgbWFuYWdlcyBtZW1iZXJzaGlwLiBIZWxwIG1lIGN1c3RvbWl6ZSBpdC4%3D">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgZ3JvdXAgbW9kZXJhdG9yIGJvdCB0aGF0IGVuZm9yY2VzIHJ1bGVzLCBzdW1tYXJpemVzIGRpc2N1c3Npb25zLCBhbmQgbWFuYWdlcyBtZW1iZXJzaGlwLiBIZWxwIG1lIGN1c3RvbWl6ZSBpdC4%3D</a></td></tr><tr><td><strong>Engagement Analyzer</strong></td><td>Track group participation, identify trending topics, and generate weekly engagement reports.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgZ3JvdXAgZW5nYWdlbWVudCBhbmFseXplciB0aGF0IHRyYWNrcyBwYXJ0aWNpcGF0aW9uLCBpZGVudGlmaWVzIHRyZW5kaW5nIHRvcGljcywgYW5kIGdlbmVyYXRlcyB3ZWVrbHkgcmVwb3J0cy4gSGVscCBtZSBzZXQgaXQgdXAu">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgZ3JvdXAgZW5nYWdlbWVudCBhbmFseXplciB0aGF0IHRyYWNrcyBwYXJ0aWNpcGF0aW9uLCBpZGVudGlmaWVzIHRyZW5kaW5nIHRvcGljcywgYW5kIGdlbmVyYXRlcyB3ZWVrbHkgcmVwb3J0cy4gSGVscCBtZSBzZXQgaXQgdXAu</a></td></tr><tr><td><strong>Group Expense Tracker</strong></td><td>Split bills, track who owes what, and send automated payment reminders to group members.</td><td><a href="https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgZ3JvdXAgZXhwZW5zZSB0cmFja2VyIGZvciBzcGxpdHRpbmcgYmlsbHMsIHRyYWNraW5nIHdobyBvd2VzIHdoYXQsIGFuZCBzZW5kaW5nIHBheW1lbnQgcmVtaW5kZXJzLiBIZWxwIG1lIGN1c3RvbWl6ZSBpdC4%3D">https://codewords.agemo.ai/chat?sendAutomatically=true&#x26;initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgV2hhdHNBcHAgZ3JvdXAgZXhwZW5zZSB0cmFja2VyIGZvciBzcGxpdHRpbmcgYmlsbHMsIHRyYWNraW5nIHdobyBvd2VzIHdoYXQsIGFuZCBzZW5kaW5nIHBheW1lbnQgcmVtaW5kZXJzLiBIZWxwIG1lIGN1c3RvbWl6ZSBpdC4%3D</a></td></tr></tbody></table>


# Connect your Number

Connect your personal WhatsApp number to CodeWords and build automations that can send, receive, and process messages on your behalf.

{% hint style="warning" %}
This is a beta feature
{% endhint %}

Automate WhatsApp using your own phone number. Send and receive messages as yourself, access your contacts and groups, and build automations that reply on your behalf.

### How this differs from other WhatsApp features

CodeWords DM and group automations use shared CodeWords bot numbers. This feature connects your personal WhatsApp number, so messages are sent from you, not a shared bot.

### What you get

| Capability       | Details                                                                                                             |
| ---------------- | ------------------------------------------------------------------------------------------------------------------- |
| Send messages    | Text, images, videos, audio, files, stickers, contacts, locations, and polls                                        |
| Read your data   | Contacts, groups, recent chats, chat messages, and group participants                                               |
| Manage groups    | Create groups, add or remove members, promote or demote admins, and update names and descriptions                   |
| Receive messages | Incoming messages are forwarded to your workflow automatically, including messages, reactions, edits, and deletions |
| Media            | Download images, videos, and audio from messages                                                                    |

### Setup

Connecting usually takes about 30 seconds. You scan a QR code in WhatsApp, similar to linking WhatsApp Web or a new device.

1. Ask Cody, your AI automation assistant, to connect your WhatsApp. Cody generates a QR code.
2. Open WhatsApp on your phone and go to **Settings -> Linked Devices -> Link a Device**.
3. Scan the QR code. It expires in 30 seconds. If it expires, Cody generates a new one.
4. You are connected. Cody confirms the link, and you can start building automations.

### Walkthrough: connect, test, and go live safely

Use this quick walkthrough if you are connecting your personal number for the first time.

#### Step 1: Connect your number

1. Ask Cody: **"Connect my WhatsApp number."**
2. Scan the QR code from your phone in **Settings -> Linked Devices -> Link a Device**.
3. Wait for Cody to confirm connection.

#### Step 2: Verify inbound messages

1. Send a test message from another phone to your WhatsApp number.
2. Confirm your workflow receives the incoming event.
3. If nothing arrives, ask Cody to check that your trigger is active.

#### Step 3: Verify outbound replies

1. Ask Cody to send a reply to your test chat.
2. Confirm the message appears in WhatsApp.
3. Test one media message (image, audio, or file) if your workflow uses media.

#### Step 4: Start with known contacts

1. Send your first automated messages to people in your contacts or people who already messaged you.
2. Keep initial volume low and increase gradually as replies come in.
3. Avoid cold bulk outreach to unknown numbers from a newly connected account.

#### Step 5: Monitor quality signals

1. Track reply rates and blocks/reports.
2. If replies drop or sends start failing, reduce volume and focus on high-intent conversations.
3. Keep message content useful, expected, and personalized.

### Authentication and control

CodeWords does not require your WhatsApp password for this setup. Authentication runs through WhatsApp's Linked Devices flow.

You can disconnect your number at any time:

* In WhatsApp: **Settings -> Linked Devices**
* In CodeWords: ask Cody to disconnect it

### What your workflows can access

After you connect, your workflows can read and interact with:

* **Your contacts** — full contact list with names and phone numbers
* **Your groups** — groups you are a member of (up to 500), including participants, descriptions, and settings
* **Chat messages** — messages from selected conversations (recent messages only on first sync)
* **Media** — images, videos, audio, and documents from messages

### About message history

On first connection, WhatsApp syncs only recent messages for each conversation. Your contact list and group list are available right away.

Messages received after connection are stored and available to your workflows. If you need full history for a chat, use WhatsApp's **Export Chat** feature in the phone app.

### Example workflows

#### 1) Personal AI assistant

Build a workflow that listens to incoming WhatsApp messages, processes them with an AI model, and replies automatically.

Examples:

* A friend asks, "What was that restaurant we talked about?" -> your assistant checks recent chats and replies
* Someone sends an image -> your workflow describes the image and sends a summary
* You receive a voice note -> your workflow transcribes it and saves it to Google Docs

#### 2) Group digest

Build a workflow that reads messages from an active WhatsApp group, summarizes key points with AI, and sends a daily digest by WhatsApp or Email.

#### 3) Auto-reply while you are busy

Set up a workflow that detects incoming messages during specific hours and sends a custom availability reply. You can customize replies by contact or group.

### Limits and important details

| Limit             | Detail                                                                                |
| ----------------- | ------------------------------------------------------------------------------------- |
| Groups returned   | Up to 500 (WhatsApp protocol limit)                                                   |
| QR code expiry    | 30 seconds. Request a new one if needed                                               |
| Message history   | On first connect, only recent messages per chat are synced                            |
| Multiple numbers  | You can connect more than one WhatsApp number                                         |
| Session stability | Sessions can disconnect during platform maintenance. Re-scan the QR code to reconnect |

### WhatsApp Limits & Restrictions

WhatsApp introduced additional anti-spam safeguards that affect messaging behavior:

* **Rolling message cap for unanswered messages**: If you send messages that do not get replies, WhatsApp keeps a rolling count. After an internal threshold (not publicly disclosed), sending to new or non-contacts can be temporarily restricted. The cap eases as recipients reply.
* **Applies to both personal and business accounts**: This is not limited to the Business API. Regular personal accounts can also be rate-limited for high volumes of unreplied outreach.
* **Known vs unknown recipients are treated differently**: Messages to contacts, or to people who previously messaged you, are generally lower risk than cold outreach to strangers.
* **No public fixed limit**: WhatsApp does not publish a simple "X messages/day" rule. The limit is behavior-based and adaptive (for example, reply patterns, account history, and trust signals).
* **Spam reports and blocks increase risk**: Recipient reports/blocks can accelerate restrictions and may trigger account penalties faster than volume alone.
* **Too many new conversations can trigger temporary bans**: Starting a high number of new chats in a short period (especially with unknown recipients) can trigger temporary restrictions, including 24-hour blocks or longer in repeated/high-risk cases.

{% hint style="warning" %}
Best practice: prioritize opt-in conversations and high reply rates. If your use case involves cold outreach, start small, monitor replies, and avoid repetitive messaging patterns. Always follow WhatsApp's Terms and applicable policies when sending automated messages.
{% endhint %}

## Security

CodeWords does not store your WhatsApp password. Authentication is handled through WhatsApp's official Linked Devices protocol.

Your connected data is private to your workspace. Other CodeWords users cannot access your connected WhatsApp.

You can disconnect at any time from your phone or by asking Cody. Messages between your phone and CodeWords are encrypted in transit.

## Beta notice

This is a beta feature. If you run into issues, contact <support@codewords.ai>.

## What to do next

Open a chat with Cody and try one of these prompts:

* "Connect my WhatsApp number"
* "Build a WhatsApp auto-reply for when I'm busy"
* "Summarize my WhatsApp group messages daily"

Cody will guide you through connecting your number and building your workflow.


# Build a personal AI assistant

Step-by-step guide to building your own WhatsApp personal AI assistant with CodeWords. No coding required — connect your calendar, email, tasks, and more.

Your own AI that replies in your voice, checks your calendar, manages tasks, and searches the web — all from WhatsApp.

### What You'll Build

By the end of this guide, you'll have a fully working **personal AI assistant** living inside your WhatsApp — a no-code AI agent that can:

* **Reply to messages** in your tone and style
* **Check and manage your calendar** — create events, find free slots, and reschedule meetings
* **Read and draft emails** — summarize your inbox, compose replies, and send messages
* **Manage your tasks** — add to-dos, check deadlines, and mark items complete
* **Search the web** — answer questions with real-time information
* **Remember context** — recall past conversations and preferences over weeks
* **Understand voice notes** — transcribe and respond to audio messages
* **Analyze images** — read documents, receipts, and screenshots you send as photos

Think of it as your **personal Jarvis on WhatsApp** — always available, always learning, and connected to the tools you already use.

### Who This Is For

This guide is designed for **completely non-technical users**. You don't need to write a single line of code.

* **Busy founders and executives** who want an AI chief of staff
* **Freelancers and solopreneurs** who need a personal assistant without the cost
* **Anyone who wants a personal AI agent** that works where they already spend time — WhatsApp

{% hint style="info" %}
**No technical skills required.** If you can describe what you want in plain English, you can build this. Cody — your AI coding agent — handles all the technical work.
{% endhint %}

### Building Process

#### Step 1: Describe Your Vision

Open CodeWords and tell Cody what you want. Be specific about the tools and apps you use. Here's an example prompt you can customize:

{% hint style="info" %}
**Example prompt:**

*"I want to build a personal AI assistant on WhatsApp. It should:*

* *Reply to my WhatsApp messages in my tone (casual but professional)*
* *Connect to my Google Calendar to check my schedule and create events*
* *Connect to my Gmail to summarize emails and draft replies*
* *Manage my Todoist tasks — add, complete, and list them*
* *Search the web when I ask questions*
* *Remember our past conversations for at least 30 days*
* *Handle voice notes by transcribing them and responding*
* *Understand photos and screenshots I send*

*I want it to work in my personal WhatsApp DMs."*
{% endhint %}

The more detail you give, the better your assistant will be. Don't worry about being perfect — you can always refine later.

#### Step 2: Let Cody Research & Plan

After you submit your prompt, Cody will:

1. **Research** the best APIs and tools for your requirements
2. **Design** the architecture — which services to connect, how data flows
3. **Present a plan** for you to review and approve

You'll see Cody thinking through options in real time. If something doesn't look right, just tell Cody to adjust.

#### Step 3: Cody Builds & Deploys

Once you approve the plan, Cody writes the code, connects your tools, and deploys everything. During this phase, Cody will:

* Build the WhatsApp message handler
* Set up connections to your calendar, email, task manager, and other tools
* Configure memory so your assistant remembers past conversations
* Add voice note transcription and image analysis capabilities
* Deploy the bot to CodeWords' cloud infrastructure

You can watch the entire build process live and ask questions at any point.

#### Step 4: Register Your Phone Number

Cody will guide you through connecting your WhatsApp number. This guide uses the **Connect your own WhatsApp number (beta)** flow, not the shared CodeWords bot numbers used for DM and group workflow automations. This typically involves:

1. Scanning a QR code with your phone (just like WhatsApp Web)
2. Confirming the connection

That's it — your personal AI assistant is now live on WhatsApp.

#### Step 5: Test

Send your new assistant a few messages to make sure everything works:

* *"What's on my calendar tomorrow?"*
* *"Summarize my last 5 emails"*
* *"Add 'Review quarterly report' to my tasks"*
* *"What's the weather in New York today?"*
* Send a voice note and watch it get transcribed
* Send a photo of a receipt and ask it to extract the total

### Real Example: What We Built

To show what's possible, here's an actual personal AI assistant built entirely with CodeWords:

| Feature             | Details                                                                         |
| ------------------- | ------------------------------------------------------------------------------- |
| **Connected Tools** | 9 tools — including calendar, email, task manager, web search, memory, and more |
| **Channels**        | Works in both WhatsApp DMs and WhatsApp groups                                  |
| **Voice Notes**     | Transcribes audio messages and responds with context                            |
| **Image Analysis**  | Reads documents, receipts, and screenshots from photos                          |
| **Memory**          | Remembers conversations and preferences for 30+ days                            |
| **Response Style**  | Customized to match the owner's casual-professional tone                        |
| **Build Time**      | Under 30 minutes from idea to working bot                                       |

This assistant handles 50+ messages per day and has completely replaced manual calendar checking, email triaging, and task management for its owner.

{% hint style="info" %}
**Your results may vary** depending on which tools you connect and how detailed your initial prompt is. But the capability ceiling is very high — if an API exists for it, Cody can connect it.
{% endhint %}

### Build Your Personal AI Assistant

Ready to build your own? Click the button below to start a conversation with Cody. The prompt is pre-filled — just customize it with your preferred tools and style.

[**Build My Personal AI Assistant →**](https://codewords.agemo.ai/chat?sendAutomatically=true\&initialMessage=SSB3YW50IHRvIGJ1aWxkIGEgcGVyc29uYWwgQUkgYXNzaXN0YW50IG9uIFdoYXRzQXBwLCBzaW1pbGFyIHRvIE9wZW5DbGF3LiBJdCBzaG91bGQgY29ubmVjdCB0byBteSBjYWxlbmRhciwgZW1haWwsIGFuZCB0YXNrcywgYW5kIHJlcGx5IHRvIG1lc3NhZ2VzIGluIG15IHN0eWxlLiBMZXQncyBzdGFydCBieSBkaXNjdXNzaW5nIHdoYXQgYXBwcyBhbmQgdG9vbHMgSSB1c2UgZGFpbHku)

### Tips for Best Results

1. **Be specific about your tools.** Instead of "connect my calendar," say "connect my Google Calendar" or "connect my Outlook calendar." Cody works best with specifics.
2. **Define your tone.** Tell Cody how you want the assistant to reply — formal, casual, brief, detailed. Share a few example messages if possible.
3. **Start small, then expand.** Begin with 2-3 core capabilities (e.g., calendar + tasks + web search). Once those work well, ask Cody to add more.
4. **Test edge cases.** Try unusual requests, very long messages, and messages in different languages. Report any issues to Cody for quick fixes.
5. **Iterate with Cody.** Your assistant will improve over time. If something isn't working right, just tell Cody: *"When I ask about my schedule, I want it to also show the meeting links."*
6. **Set up memory carefully.** The longer your memory window, the more context your assistant has — but it also uses more resources. 30 days is a good starting point.


# Help Center

{% hint style="success" %}
**All systems operational** — No known issues.
{% endhint %}

<h2 align="center">What can we help you find?</h2>

<p align="center">Search for answers or browse by topic</p>

<p align="center"><button type="button" class="button primary" data-action="ask" data-icon="gitbook-assistant">How can we help?</button></p>

<table data-view="cards"><thead><tr><th align="center"></th><th></th><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td align="center"><strong>Billing</strong></td><td>Subscription, credit, payment, and other issues</td><td align="center">12 Answers</td><td><a href="https://docs.codewords.ai/help-center/billing/billing">https://docs.codewords.ai/help-center/billing/billing</a></td><td data-object-fit="contain"><a href="/files/kQS1GiW5eRLsavAzEirP">/files/kQS1GiW5eRLsavAzEirP</a></td></tr><tr><td align="center"><strong>Account</strong></td><td>Account email, password, settings, and other issues</td><td align="center">7 Answers</td><td><a href="https://docs.codewords.ai/help-center/billing/account">https://docs.codewords.ai/help-center/billing/account</a></td><td data-object-fit="contain"><a href="/files/e3T9zSU4qBz6TGlXOo32">/files/e3T9zSU4qBz6TGlXOo32</a></td></tr><tr><td align="center"><strong>Integrations</strong></td><td>Connect apps, manage accounts, and disconnect tools</td><td align="center">6 Answers</td><td><a href="https://docs.codewords.ai/help-center/billing/integrations">https://docs.codewords.ai/help-center/billing/integrations</a></td><td data-object-fit="contain"><a href="/files/k6ylr7P0kksQ0u1XQtUY">/files/k6ylr7P0kksQ0u1XQtUY</a></td></tr><tr><td align="center"><strong>Login/Sign-up</strong></td><td>Login methods, login errors, and other issues</td><td align="center">0 Answers</td><td></td><td data-object-fit="contain"><a href="/files/k6ylr7P0kksQ0u1XQtUY">/files/k6ylr7P0kksQ0u1XQtUY</a></td></tr><tr><td align="center"><strong>Privacy and Policies</strong></td><td>Terms of service, privacy policy and other issues</td><td align="center">8 Answers</td><td><a href="https://docs.codewords.ai/help-center/billing/privacy-and-policies">https://docs.codewords.ai/help-center/billing/privacy-and-policies</a></td><td data-object-fit="contain"><a href="/files/Im9IWBlXCvQszSOllmy0">/files/Im9IWBlXCvQszSOllmy0</a></td></tr><tr><td align="center"><strong>Features</strong></td><td>Feature issues, task errors and other issues</td><td align="center">0 Answers</td><td></td><td data-object-fit="contain"><a href="/files/QQszSBDyTBTJEfH6IUkq">/files/QQszSBDyTBTJEfH6IUkq</a></td></tr></tbody></table>


# Billing

Subscription, credit, payment, and other issues

<details>

<summary>Do I need to pay to use CodeWords?</summary>

No. The Free plan gives you starter credits and 100 workflow runs/month with no payment card required.

Beyond the free credits and allowance, you’ll need to subscribe to a paid plan or top up your wallet to continue building and running workflows.

</details>

<details>

<summary>What are the subscription plans?</summary>

CodeWords offers three plans:

* **Free ($0)** — Starter credits, 100 workflow runs/month, unlimited projects, unlimited codewords.run domains, full code ownership, and zero setup.
* **Pro ($39/month or $390/year)** — Everything in Free, plus 60 credits monthly (1.5x bonus), 2,500 workflow runs/month, on-demand credit top-ups at 1.5x, credit roll-overs, custom domains, remove CodeWords branding, and access to WhatsApp integration.
* **Business ($100/month)** — Everything in Pro, plus 200 credits monthly (2x bonus), unlimited workflow runs, on-demand credit top-ups at 2x, credit roll-overs, priority support, full access to Business Templates, and Cody for Business (white labeling).

Annual plans are available at up to 17% off monthly pricing. Compare and change plans in [Settings → Plans](https://codewords.agemo.ai/#settings/plans).

</details>

<details>

<summary>What’s included in the free plan?</summary>

The free plan includes:

* Starter credits
* 100 workflow runs/month
* Unlimited projects
* Unlimited codewords.run domains
* Full code ownership
* Zero setup

Free users can’t top up the wallet or create CodeWords API keys. Upgrade from [Plans](https://codewords.agemo.ai/#settings/plans) when you need those.

</details>

<details>

<summary>Can I buy extra credits?</summary>

Yes — on **Pro** and **Business**. Open [Wallet](https://codewords.agemo.ai/#settings/wallet-plans), click **Top up**, pick a preset ($25 / $50 / $100 / $300) or a custom amount (minimum $10), then continue to payment.

Pro top-ups get a **1.5x** bonus; Business gets **2x**. Free users can’t top up — they’ll be sent to Plans instead.

You can also turn on **Auto Top-Up** in Wallet on paid plans so your balance recharges automatically when it’s low.

</details>

<details>

<summary>Do unused credits roll over?</summary>

Yes. Unused subscription credits roll over into future billing periods on paid plans. Top-up credits stay in your wallet until used.

</details>

<details>

<summary>What’s the difference between Pro and Business plans?</summary>

The Business plan includes everything in Pro, plus:

* 200 credits/month (vs 60 on Pro)
* 2x top-up bonuses (vs 1.5x on Pro)
* Unlimited workflow runs (vs 2,500/month on Pro)
* Priority support
* Full access to Business Templates
* Cody for Business (white labeling)

</details>

<details>

<summary>Can I transfer credits between accounts?</summary>

Currently, credits are tied to the account or workspace where they were purchased.

</details>

<details>

<summary>What happens to scheduled workflows if my credits reach zero?</summary>

Scheduled workflows may fail to run, and you’ll receive an email notification asking you to top up your account.

</details>

<details>

<summary>Can I estimate workflow costs before running them?</summary>

Yes. After a workflow runs for the first time, you’ll see estimated costs per execution in [Settings → Usage](https://codewords.agemo.ai/#settings/usage), where you can also review your cycle spend, top category, and a per-chat / per-workflow breakdown of credits.

</details>

<details>

<summary>How can I see how my credits are being used?</summary>

Go to [**Settings → Usage**](https://codewords.agemo.ai/#settings/usage) (sidebar account menu → **Usage**). It shows:

* **Cycle spend** — total credits used this billing cycle, with a daily chart split between **Chat** and **Runs**.
* **Wallet, Plan, and Top Category** — your current balance, your subscription tier, and where most of your credits are going.
* **Day-by-day breakdown** — click any day to see exactly which chats and workflows consumed credits that day, with per-item call counts and costs.

For run logs and schedules (not credit spend), use the [Activity](https://docs.codewords.ai/automations/activity) page.

</details>

<details>

<summary>Where do I update my card or view invoices?</summary>

Open [Settings → Billing](https://codewords.agemo.ai/#settings/billing). You can see the card on file and open **Manage billing** for the Stripe customer portal (payment methods and related billing actions). The invoice table lists date, total, and status — **View** opens the Stripe invoice in a new tab.

</details>

<details>

<summary>What happens if I am unable to use a payment card?</summary>

If your payment is declined or you're unable to use your current card, please try again with a different payment method. If the issue continues, contact your bank or card provider for assistance. You can also update your payment method from [Billing](https://codewords.agemo.ai/#settings/billing) → **Manage billing**, or use **Update payment** if you see a pending renewal notice in Wallet.

</details>


# Account

Account email, password, settings and other issues

<details>

<summary>How do I update my name, photo, or timezone?</summary>

Open [Settings → Account](https://codewords.agemo.ai/#settings/profile) from the sidebar account menu (click your avatar / name at the bottom left, then **Account**).

There you can:

* Upload a profile picture (PNG or JPG, up to 4MB)
* Edit your display name
* Set your timezone (used for scheduled workflows)
* Turn marketing emails on or off

Your signed-in email is shown on Account but can’t be changed there. See the next answer if you need a different email.

</details>

<details>

<summary>How do I set custom instructions for Cody?</summary>

Tell Cody once how you want it to talk and what context matters — it applies across chats.

1. Open [Settings → Personalization](https://codewords.agemo.ai/#settings/personalization).
2. Write your **Custom instructions** (up to 5,000 characters). Helper text in the product: “Anything Cody should know about you, your work, your stack or how you want it to respond.”
3. Click **Save**.

Cody follows these preferences unless they conflict with platform rules. Change or clear them anytime by editing the text and saving again.

Examples:

* “I work in Sales at an AI startup; keep responses succinct.”
* “Always answer in bullet points. Prefer Python over TypeScript.”
* “I’m non-technical — explain like I’m new to automation.”

</details>

<details>

<summary>How do I update my account email or password?</summary>

At this time, it is not possible to change the email address associated with your CodeWords account. When creating an account, please use an email address you expect to have long-term access to.

If you would like to use CodeWords with a different email address, please follow the steps below:

**For users with a paid plan (Pro or Business):**

1. Log in to your CodeWords account.
2. Click your name or initials in the bottom-left corner to open the account menu.
3. Open [**Plans**](https://codewords.agemo.ai/#settings/plans) (or open Settings and choose **Plans**) and cancel or downgrade as needed so the paid subscription won’t renew on the old email.
4. To manage the card on file or cancel through Stripe, go to [**Billing**](https://codewords.agemo.ai/#settings/billing) → **Manage billing**.

Your subscription will remain active until the end of your current billing period, and you can continue using your paid plan until then.

{% hint style="warning" %}
To avoid being charged for the next billing cycle, cancel at least 24 hours before your renewal date.
{% endhint %}

If you no longer have access to the email address associated with your account and cannot log in, please contact our Support team using an email address you can access. In your message, CC the email address associated with the account and confirm that you would like to cancel the subscription tied to that email address. Our team will then be able to assist you further.

</details>

<details>

<summary>Can I switch plans at any time?</summary>

Yes. You can upgrade, downgrade, or cancel whenever you like from [Settings → Plans](https://codewords.agemo.ai/#settings/plans).

Upgrades are immediate. Downgrades take effect at the end of the billing period. Wallet (credits and top-ups) is a separate tab from Plans — see [Plans and Pricing](https://docs.codewords.ai/pricing).

</details>

<details>

<summary>What happens if my subscription expires?</summary>

Your paid features and monthly credit allocation will stop at the end of your billing period. Existing workflows remain in your account, but workflows requiring credits may stop running if your balance reaches zero.

</details>

<details>

<summary>How do I delete my account?</summary>

Open [Settings → Account](https://codewords.agemo.ai/#settings/profile), scroll to **Delete Account**, and confirm.

You’ll be asked to type `DELETE`. This permanently removes your personal information, chats, connected integrations, API keys, triggers, and scheduled workflows. Some data kept for audit or platform purposes is anonymized. This can’t be undone.

</details>

<details>

<summary>How do I contact support?</summary>

You can contact the team through:

* Email: <support@codewords.ai>
* Discord community
* In-app support chat (from the sidebar account menu → **Support** → **Chat to Support**)
* [Talk to an expert](https://cal.eu/team/codewords/user-call) (from the same Support menu)

Priority support is available on paid plans.

</details>


# Integrations

Connect apps like Gmail, Slack, Notion, and GitHub so Cody and your workflows can use them.

<details>

<summary>How do I connect an app?</summary>

Connect tools so Cody and your workflows can use them — Gmail, Google Sheets, Notion, Slack, GitHub, and more.

1. Open [Settings → Integrations](https://codewords.agemo.ai/#settings/integrations) from the sidebar account menu (**Integrations**).
2. Search for the app (for example “Gmail” or “Slack”).
3. Use filters if needed: **All** / **Connected** / **Not Connected**.
4. Click the status pill → **Connect**.
5. Finish login and permissions in the provider window.
6. Status shows **Connected** when it’s done.

Common apps include Notion, Gmail, Google Sheets, Google Drive, Google Calendar, GitHub, Instagram, Outlook, and Slack.

</details>

<details>

<summary>How do I add a second account for the same app?</summary>

Some apps support more than one login (for example Work and Personal):

1. Open [Integrations](https://codewords.agemo.ai/#settings/integrations).
2. Click the status pill → **Add account**.
3. Pick a label (**Work** / **Personal** / **Custom**).
4. Connect again with the other login.

</details>

<details>

<summary>How do I disconnect an app?</summary>

**One account:** click the status pill → **Disconnect**.

**Multiple accounts:** click **Manage connections** → disconnect one account, or **Disconnect All**.

</details>

<details>

<summary>What if connect fails?</summary>

* Retry in a moment — provider logins can time out.
* Allow pop-ups in your browser for the OAuth window.
* Make sure you’re signed in to the right account in the provider before connecting.

If it still fails, contact <support@codewords.ai>.

</details>

<details>

<summary>Is WhatsApp available on all plans?</summary>

WhatsApp integration is a **Pro** plan feature. If you’re on Free, upgrade from [Settings → Plans](https://codewords.agemo.ai/#settings/plans). See [Plans and Pricing](https://docs.codewords.ai/pricing) for details.

</details>

<details>

<summary>When do I need External API integration instead?</summary>

Use [Integrations](https://codewords.agemo.ai/#settings/integrations) for one-click OAuth apps Cody supports directly.

Use [External API integration](https://docs.codewords.ai/automations/external-api-integration) when you need to bring your own API key for a tool that isn’t in the integrations library.

</details>


# Privacy and Policies

<details>

<summary>Where are the privacy policy and terms of service?</summary>

You can view CodeWords’ Privacy Policy and Terms of Service here:

* Privacy Policy: [Privacy Policy](https://www.codewords.ai/security?utm_source=chatgpt.com)
* Terms of Service: [Terms](https://www.codewords.ai/terms)

</details>

<details>

<summary>Where is the data processing agreement?</summary>

You can view the data processing agreement [here](https://drive.google.com/file/d/1En8w4yStMyDWVoZWK9kbxOhHpIh4ff5A/view)

</details>

<details>

<summary>What personal information does CodeWords collect?</summary>

CodeWords may collect information such as your name, email address, company details, billing information, and any data you provide while using the platform or contacting support.

</details>

<details>

<summary>Does CodeWords collect sensitive personal information?</summary>

No. CodeWords does not intentionally collect sensitive personal information such as health, genetic, or religious data.

</details>

<details>

<summary>Does CodeWords use customer data to train AI models?</summary>

Some data processed through hosted or analytics services may be used to improve CodeWords systems and algorithms. However, data from third-party integrations such as Google Workspace APIs is not used to train generalized AI or machine learning models.

</details>

<details>

<summary>Does CodeWords sell my personal information?</summary>

We do not sell or rent your personal information. We may share data with trusted service providers, professional advisors, legal authorities when required, or during business transactions such as mergers or acquisitions.

</details>

<details>

<summary>Who does CodeWords share data with?</summary>

CodeWords may share information with trusted service providers such as hosting providers, analytics providers, payment processors, customer support platforms, and professional advisors when necessary to operate the service.

</details>

<details>

<summary>Does CodeWords use cookies?</summary>

Yes. CodeWords uses cookies and similar technologies to improve website functionality, analyze usage, and enhance user experience.

</details>

<details>

<summary>Can I disable cookies?</summary>

Yes. You can disable cookies through your browser settings, although some parts of the platform may not function properly.

</details>


