# Your assistant can run benjiads. You stay in charge of the money.

Connect benjiads to ChatGPT, Claude or any assistant that supports MCP. Ask in plain words. It reads your leads and results, edits and publishes your site, prepares, launches and pauses your ads. You choose what it is allowed to do and can revoke it anytime. It never sees your card and cannot spend past the budget you funded.

Page: https://benjiads.com/ai-agents
MCP server: https://api.benjiads.com/mcp
REST API: https://api.benjiads.com/v1 (OpenAPI: https://api.benjiads.com/v1/openapi.json)

Assistants: ChatGPT, Claude, and any assistant that supports remote MCP. Muse is shown as an example client (soon): its availability depends on Meta's connector review; the MCP connection itself works today.

## How you connect

1. **Add benjiads to your assistant.** Paste one address in its connectors or MCP settings. api.benjiads.com/mcp
2. **Sign in with your phone.** Same login as your dashboard. A code by text, no password.
3. **Choose what it is allowed to do.** Tick the permissions when you create a key, or review the ones your assistant asks for and pick your business. Change or revoke them anytime in Integrations.

Your assistant never sees your card and cannot spend past the budget you funded.

## Permissions

Each permission is granted separately when you create an API key or approve an assistant, and can be revoked anytime in Integrations (/app/integrations).

| Permission | Label | Type |
| --- | --- | --- |
| `site:read` | Read your site and workspace | read |
| `site:write` | Edit and publish your site | write |
| `ads:read` | Read campaigns and advertising balance | read |
| `ads:write` | Create, launch and pause campaigns within your funded budget | write |
| `leads:read` | Read leads, subject to your subscription | read |
| `metrics:read` | Read performance and integration usage | read |
| `billing:read` | Read subscription and invoices | read |
| `billing:write` | Open checkout to subscribe or manage billing | write |

## Everything it can do

19 operations. Each one runs the same checks as your dashboard, whoever asks.

### 1. Monday check-in

Coffee, phone, thirty seconds. Ask what happened while you were on jobs.

| Tool | What you can ask | Example answer | Permission | Caveat |
| --- | --- | --- | --- | --- |
| `get_metrics` | How did last week go? | 214 people visited your site and 11 left their number. 8 of those came from your ads. | Read results & usage (`metrics:read`) | Visits, form starts and leads for the last 1, 7 or 30 days, same numbers as your dashboard. Cost per lead comes from combining this with your ad spend. |
| `list_campaigns` | What is running, and how much ad money do I have left? | One campaign is active, Electrical repair in Long Beach. You spent $61 this week and have $189 left in your ad balance. | Read ads & balance (`ads:read`) | Balance is what you funded in your dashboard. The assistant cannot add money to it. If Meta is unreachable, spend may come from the last stored figure. |
| `list_leads` | Who reached out this weekend? | 3 new leads since Friday: a panel upgrade in Lakewood, an outlet repair in Signal Hill and an EV charger quote. Want me to read them out? | Read leads (`leads:read`) | Phone numbers and emails stay masked when your subscription or trial is not active, exactly like your dashboard. Names stay visible. |
| `get_job` | Is my new campaign ready yet? | Yes. 8 ads are prepared and paused. Say launch when you want them live. | Read ads & balance (`ads:read`) | Ready means prepared, not live. A licence hold shows here too and is cleared in your dashboard. |

### 2. Slammed week, slow week

Turn the tap down or up without opening a laptop.

| Tool | What you can ask | Example answer | Permission | Caveat |
| --- | --- | --- | --- | --- |
| `pause_campaign` | I am slammed until Monday. Pause my ads. | Paused Electrical repair in Long Beach. Nothing spends until you say go. | Prepare, launch & pause ads (`ads:write`) | Pausing is immediate and uses the same access rules as the dashboard. Relaunching is a separate ask. |
| `launch_campaign` | It is Monday. Turn them back on. | Electrical repair in Long Beach is live again at the budget you saved. I checked your subscription and ad balance first, both fine. | Prepare, launch & pause ads (`ads:write`) | Needs an active subscription or trial, available ad balance, finished preparation and any required licence. Billing pauses cannot be overridden. Your assistant is told to confirm the budget with you before launching; benjiads itself enforces those checks. |
| `create_campaign` | Set up a water heater campaign with my usual daily budget across both locations. Do not turn it on yet. | Preparing it now, paused. I will tell you when it is ready to review. It will not go live until you say so. | Prepare, launch & pause ads (`ads:write`) | Always prepared paused. Runs the subscription, wallet, creative ownership and licence checks. The daily budget is the total across your locations, not per location. |

### 3. New service area, new service

Your site changes as fast as your business does.

| Tool | What you can ask | Example answer | Permission | Caveat |
| --- | --- | --- | --- | --- |
| `get_site` | What does my site say about service areas right now? | Long Beach, Lakewood and Seal Beach. Your headline is 'Same-day electrical repair'. There is an unpublished draft from Tuesday. | Read site & workspace (`site:read`) | Reads the live site and the draft. Works without a subscription. |
| `update_site` | Add Signal Hill to my service area and update the phone number on the site. | Done. Signal Hill is listed and your public number is updated. | Edit & publish site (`site:write`) | Business details, appearance, service areas and publication status. Lead capture keeps working without a subscription. |
| `save_site_draft` | Add a section about EV charger installs, but do not publish yet. | Saved as a draft. Check it in your dashboard, or tell me to publish. | Edit & publish site (`site:write`) | Same checks as the site builder. The assistant reads your current site first. Nothing changes on the live site. |
| `publish_site` | Looks good. Publish it. | Published. Your site now shows the EV charger section. | Edit & publish site (`site:write`) | Publishes the saved draft only. Review it first. No subscription needed. Buying a domain stays in the dashboard. |

### 4. Before you spend

Know what your state and your trade require before an ad goes anywhere.

| Tool | What you can ask | Example answer | Permission | Caveat |
| --- | --- | --- | --- | --- |
| `get_workspace` | Which business are you connected to? | Mike's Electric, mike.benjiads.com. I can read your site, ads and results and pause or launch ads. Billing is off on this connection. | Read site & workspace (`site:read`) | One business per connection. The assistant cannot switch to another workspace. |
| `get_workspace_requirements` | Is anything blocking my ads in California? | One thing: your contractor licence number is missing for CA. Add it in your dashboard and the ads can go live. | Read site & workspace (`site:read`) | Only a missing licence number blocks launch. Other fields guide your ad copy. Verification happens in the dashboard, never in chat. Subscription and funding are checked separately at launch. |
| `list_verticals` | Do you handle HVAC too? My brother-in-law asked. | Yes, HVAC is supported, with its own state rules and ad-copy restrictions. Each business gets its own benjiads workspace. | Read site & workspace (`site:read`) | A listed trade can still be on hold in some states. Reading the catalog does not open a new ad channel. |
| `get_vertical` | What am I not allowed to say in an electrician ad? | Here are the copy rules, required disclosures and the states that need a licence number, in plain words. | Read site & workspace (`site:read`) | Describes the trade's rules. It does not check your own licence; ask about blockers for that. |

### 5. Tax time and the bill

The paperwork, without logging in.

| Tool | What you can ask | Example answer | Permission | Caveat |
| --- | --- | --- | --- | --- |
| `get_subscription` | Am I still on the trial? | Your subscription is active. The current period ends on the 28th. | Read billing (`billing:read`) | Read only. Active includes an eligible trial, exactly as your dashboard shows it. |
| `start_subscription` | Sign me up. | Here is your checkout link. Open it, sign in and confirm. I cannot take card details or confirm payment from here. | Open checkout (`billing:write`) | Hands you to the benjiads checkout in your browser. The call itself never charges a card or unlocks access. Existing subscribers manage billing from the same link. |
| `list_invoices` | Send me all my benjiads invoices for taxes. | Here are your subscription invoices for the year, with dates and amounts. | Read billing (`billing:read`) | Subscription invoices only. Ad funding lives in your ad balance, not here. |
| `get_usage` | How much have you been doing on my account? | In the last 30 days: 41 actions, mostly reading results and leads, plus 2 pauses. None of it adds to your bill. | Read results & usage (`metrics:read`) | Counters only, over the last 30 days. Using the assistant costs nothing extra. |

Not on the list: topping up the ad wallet, verifying a licence, buying a domain, generating new creatives, deleting campaigns, touching your Facebook page or ad account. Those stay in your dashboard.

## Example conversations

- **ChatGPT.** Owner: "How did my ads do this week?" Tools: `get_metrics`, `list_campaigns`. Assistant: "9 people texted you from your ads this week. You spent $61, so about $7 a lead. Electrical repair · Long Beach is your only active campaign and you have $189 left in your ad balance."
- **Claude.** Owner: "Set up a $30/day campaign for Long Beach and Signal Hill with my three newest ads. Don't turn it on yet." Tools: `create_campaign`, `get_job`. Assistant: "Prepared and paused. 3 ads, $30 a day total split across both areas. Nothing spends until you say go. Say launch and I'll turn it on at that budget."
- **Muse (soon).** Owner: "Add Signal Hill to my service area and say we install EV chargers." Tools: `get_site`, `update_site`, `save_site_draft`, `publish_site`. Assistant: "Signal Hill is in your service area now. Here is the draft with the EV charger line. Publish it? (Yes) Published. Want a campaign with your existing ads for EV chargers? It would stay paused until you approve."

Numbers are examples. Yours come from your own workspace. Muse support depends on Meta's connector review; the MCP connection itself works today.

## What it can never do

- **Never sees your card.** Subscribing hands you to the benjiads checkout in your browser; the call itself charges nothing and unlocks nothing.
- **Cannot spend past what you funded.** Ads run on money already in your ad wallet, launch is refused when the balance is gone, and topping up happens in your dashboard only.
- **Every campaign starts paused.** Going live is a separate ask that checks your subscription, ad balance, preparation and any required licence first.
- **You choose the permissions.** Reading, editing your site, launching and pausing ads, leads and billing are each their own permission. Change or revoke them anytime in Integrations, and connections expire on their own.
- **Leads masked without a subscription.** Lead phone numbers and emails stay masked when your subscription or trial is not active, on the server, exactly as in your dashboard. Names stay visible.
- **One connection, one business.** The assistant works on the workspace you approved and cannot reach another, even with its IDs.
- **A retry never runs twice.** Every action carries a key, so a flaky connection cannot launch two campaigns or publish twice.

These are checks in benjiads itself, the same code your dashboard runs. An assistant cannot talk its way around them. Full details in the docs: limits, retries and errors.
Limits: https://benjiads.com/docs/limits

## For developers

Every tool on this page is also a REST endpoint under https://api.benjiads.com/v1, described by an OpenAPI file at https://api.benjiads.com/v1/openapi.json. The tool name is the operationId. Same workspace, permissions, subscription, licence, funding and retry checks. Every write carries an idempotency key so a retry never runs twice. 120 operations and 20 writes per minute per workspace.

```sh
curl https://api.benjiads.com/v1/workspace \
  -H "Authorization: Bearer <api-key>"
```

- API reference: https://benjiads.com/docs/api
- Connect an AI agent: https://benjiads.com/docs/mcp
- Authentication: https://benjiads.com/docs/authentication
- Personal API keys: https://benjiads.com/app/integrations

Using the API or MCP adds nothing to your bill.

## Questions owners ask

### Which assistants work with benjiads?
ChatGPT, Claude and any assistant that supports remote MCP. You paste one address, api.benjiads.com/mcp, in its connectors or MCP settings and sign in with your phone. Muse is shown as an example client; benjiads does not claim a Muse directory listing yet.

### Does it cost extra?
No. Your assistant uses the same benjiads subscription and ad balance as your dashboard. There is no usage price for the connection or the API.

### Can my assistant spend my money?
Only inside what you already funded, and only when you ask to launch. It never sees your card, cannot top up the ad wallet, and every campaign it prepares starts paused.

### Will it launch ads on its own?
No. Everything it prepares starts paused. Launch is a separate step, at the budget you approved, and it still has to pass the subscription, funding and licence checks.

### Can it read my leads?
Yes, if you give it the Read leads permission. Phone numbers and emails stay masked when your subscription or trial is not active, exactly like your dashboard; names stay visible. Leads are still captured either way.

### What can it not do?
Fund the ad wallet, verify a licence, buy a domain, generate new creatives, delete campaigns or touch your Facebook page and ad account. Those stay in your dashboard. It also cannot reach a business you did not connect.

### How do I disconnect it?
Open Integrations in your dashboard and revoke the connection or key. Access stops immediately. Connections also expire on their own: an API key after 90 days by default, an assistant connection stops renewing after 30 days.

### Do I need a developer?
No. Paste the address, sign in with the code we text you, allow the permissions. Developers can use the same operations as a REST API at api.benjiads.com/v1 with an OpenAPI file.

Get started: https://benjiads.com/login
