Help Center › AI Agent Platform
Setup Guide & API Reference

AI Agent Platform

Connect ChatGPT, Claude, Gemini, Zapier, or your own custom bot to your It's Buzzing account. Every action is scoped, logged, and guarded by a human approval queue.

In This Guide

  1. How It Works
  2. Quick Setup (5 Minutes)
  3. Connect ChatGPT
  4. Connect Claude
  5. Connect Zapier
  6. Connect Google Gemini
  7. Connect Perplexity
  8. Available Scopes
  9. All Available Actions
  10. Human Approval Queue
  11. Webhooks
  12. All Links at a Glance

How It Works

The Agent Platform gives AI tools a secure way to act on your behalf. You create a scoped API token, hand it to any AI tool, and the tool can then call actions like "create a QR code" or "draft an email blast" through a standard REST API.

No coding required. If you're using ChatGPT or Claude, you paste one URL and the AI discovers all actions automatically. Setup takes under 5 minutes.

Quick Setup (5 Minutes)

1

Log in and open your Agent Dashboard

Go to /admin/agents. This is your control center — token management, action history, and approval queue all live here.

2

Create your first agent token

In the dashboard, click Create Token. Give it a name (e.g. "ChatGPT Assistant"), choose the scopes you want, and optionally set an expiry. You'll see your token once — copy it immediately. A copy is also emailed to you.

3

Or create a token via API

If you prefer the API, POST to /api/v1/agent/token while logged in:

# Create a token (must be logged in to the web app first) curl -X POST https://itsbuzzing.com/api/v1/agent/token \ -H "Content-Type: application/json" \ -d '{ "name": "My ChatGPT Assistant", "client_type": "chatgpt", "scopes": ["buzzcards.write", "content.generate", "referrals.write"], "expires_in_days": 90 }' # Response — copy the token now, it won't be shown again { "token": "bza_your_raw_token_here", "prefix": "bza_a1b2c3d4e5f6g7h8...", "client_id": "uuid", "scopes": ["buzzcards.write", "content.generate", "referrals.write"], "note": "Store this token securely — it is shown only once." }
4

Test your token

Run a dry-run to confirm the token works and see what the approval policy would be, without executing anything:

curl -X POST "https://itsbuzzing.com/api/v1/agent/actions/generate_qr_code/run?dry_run=true" \ -H "Authorization: Bearer bza_your_token_here" \ -H "Content-Type: application/json" \ -d '{"target_url": "https://example.com", "label": "My QR"}' # Returns policy info — no action executed { "dry_run": true, "policy": { "requires_human_approval": false, "risk_level": "low" }, "message": "Dry run only. No action executed." }

Connect ChatGPT (Custom GPT)

1

Create a token with chatgpt type

Use "client_type": "chatgpt" when creating the token. Grant the scopes you want ChatGPT to access.

2

Open your GPT editor and add an Action

In ChatGPT, go to Explore GPTs → Create → Configure → Actions → Add Action.

3

Import the OpenAPI spec

Click Import from URL and paste:
https://itsbuzzing.com/api/v1/mcp/openapi.json
ChatGPT will auto-discover all available actions.

4

Set authentication

Choose API KeyBearer and paste your token (bza_...). Save.

Approval-required actions: ChatGPT will submit the action and receive a 202 awaiting_approval response. You'll get an email to approve it from your dashboard before anything executes.

Connect Claude (MCP Project)

1

Create a token with claude type

Use "client_type": "claude" and grant the scopes you want Claude to use.

2

Add the MCP manifest to your Claude project

In your Claude project settings, add a custom tool source and paste:
https://itsbuzzing.com/api/v1/mcp/manifest.json
Claude will read all action definitions automatically.

3

Set the bearer token in project instructions

In your project instructions, tell Claude: "Always include the header Authorization: Bearer bza_your_token when calling It's Buzzing actions."

Claude reads the manifest's requiresApproval field and will warn you proactively before submitting high-risk actions.

Connect Zapier (No-Code Automations)

1

Create a token with custom type

Use "client_type": "custom" and scope it to just what your Zap needs (e.g. buzzcards.write).

2

In Zapier, add a Webhooks by Zapier step

Choose POST, set the URL to the action you want, e.g.:
https://itsbuzzing.com/api/v1/agent/actions/create_buzzcard/run

3

Add the auth header

Under Headers, add:
AuthorizationBearer bza_your_token_here

4

Map your Zap data to the action payload

Set the Data field to a JSON object with the action's input fields. Example for create_buzzcard:

{ "business_name": "{{business_name from previous step}}", "slug": "{{slug}}", "email": "{{email}}", "phone": "{{phone}}" }
Use the Idempotency-Key header in Zapier to prevent duplicate actions if a Zap retries: add header Idempotency-Key{{zap_id}}-{{step_id}}.

Connect Google Gemini

Gemini uses a Tool Calling interface. You define It's Buzzing actions as tools in your API call, and Gemini decides when to invoke them based on the conversation.

1

Create a token with gemini type

Go to /admin/agents → Create Token. Set "client_type": "custom" (Gemini doesn't have a dedicated type). Recommended scopes: buzzcards.write, content.generate, referrals.write, crm.read.

2

Fetch the MCP manifest to auto-load tools

The manifest at /api/v1/mcp/manifest.json returns all action definitions. Pull them at startup so you don't hardcode schemas:

# Auto-load all It's Buzzing tools from the manifest import requests manifest = requests.get("https://itsbuzzing.com/api/v1/mcp/manifest.json").json() # Convert to Gemini tool format tools = [] for t in manifest["tools"]: tools.append({ "name": t["name"], "description": t["description"], "input_schema": t["inputSchema"], })
3

Wire up the tool executor and start a chat

import google.generativeai as genai genai.configure(api_key=YOUR_GEMINI_API_KEY) ITSBUZZING_TOKEN = "bza_your_token_here" model = genai.GenerativeModel(model_name="gemini-2.0-flash", tools=tools) chat = model.start_chat() response = chat.send_message("Create a BuzzCard for my salon") # Handle tool calls if response.tool_calls: for call in response.tool_calls: result = requests.post( f"https://itsbuzzing.com/api/v1/agent/actions/{call.name}/run", headers={"Authorization": f"Bearer {ITSBUZZING_TOKEN}"}, json=call.args, ).json() # Send result back to Gemini to continue the conversation response = chat.send_message(str(result))
Approval-required actions: Gemini will receive a 202 awaiting_approval response. Have your tool executor return "status": "approval_required — check /admin/agents" so Gemini can relay that to the user.
4

Use idempotency keys to prevent duplicate executions

Gemini may retry tool calls. Add an Idempotency-Key header derived from the conversation turn to deduplicate:

import uuid idempotency_key = str(uuid.uuid4()) # generate once per turn result = requests.post( f"https://itsbuzzing.com/api/v1/agent/actions/{call.name}/run", headers={ "Authorization": f"Bearer {ITSBUZZING_TOKEN}", "Idempotency-Key": idempotency_key, }, json=call.args, ).json()

Connect Perplexity

Perplexity uses the OpenAI-compatible chat completions API with tool calling. It's Buzzing's OpenAPI spec maps directly to Perplexity's tool format — load it once and Perplexity can call all available actions.

What makes Perplexity unique: It combines real-time web search with tool calling. Your assistant can look up current information about a business and take action in It's Buzzing in the same conversation turn.
1

Create a token

Go to /admin/agents → Create Token. Name it Perplexity – Research & Automation. Recommended scopes: all read scopes + content.generate, referrals.write, buzzcards.write.

2

Auto-load tools from the MCP manifest

Perplexity uses the OpenAI function-calling format. Convert the manifest once at startup:

import requests manifest = requests.get("https://itsbuzzing.com/api/v1/mcp/manifest.json").json() # Convert MCP manifest → OpenAI/Perplexity tool format tools = [ { "type": "function", "function": { "name": t["name"], "description": t["description"], "parameters": t["inputSchema"], } } for t in manifest["tools"] ]
3

Call Perplexity with tools enabled

Use Perplexity's OpenAI-compatible endpoint with your Perplexity API key:

from openai import OpenAI ITSBUZZING_TOKEN = "bza_your_token_here" PERPLEXITY_API_KEY = "pplx_your_key_here" client = OpenAI( api_key=PERPLEXITY_API_KEY, base_url="https://api.perplexity.ai", ) messages = [{"role": "user", "content": "Set up a BuzzCard for my barbershop"}] response = client.chat.completions.create( model="llama-3.1-sonar-large-128k-online", messages=messages, tools=tools, ) # Handle tool calls in a loop import json while response.choices[0].finish_reason == "tool_calls": tool_calls = response.choices[0].message.tool_calls messages.append(response.choices[0].message) for call in tool_calls: result = requests.post( f"https://itsbuzzing.com/api/v1/agent/actions/{call.function.name}/run", headers={ "Authorization": f"Bearer {ITSBUZZING_TOKEN}", "Idempotency-Key": call.id, # Perplexity provides stable call IDs }, json=json.loads(call.function.arguments), ).json() messages.append({ "role": "tool", "tool_call_id": call.id, "content": json.dumps(result), }) response = client.chat.completions.create( model="llama-3.1-sonar-large-128k-online", messages=messages, tools=tools, ) print(response.choices[0].message.content)
Tip: Perplexity's tool_call_id is stable per call, so you can use it directly as the Idempotency-Key — no need to generate your own.
4

Handle approval-required actions

When an action returns 202 awaiting_approval, pass the message back to Perplexity so it can tell the user what to do:

# In your tool executor if result.get("status") == "awaiting_approval": content = ( f"Action submitted for approval. " f"Approve it at https://itsbuzzing.com/admin/agents " f"(approval ID: {result['approval_id']})" ) else: content = json.dumps(result) messages.append({ "role": "tool", "tool_call_id": call.id, "content": content, })

Available Scopes

Every token is granted only the scopes you specify at creation time. You can also check the full scope list at /api/v1/agent/scopes.

buzzcards.readRead BuzzCard profiles
buzzcards.writeCreate & update BuzzCards
buzzpins.readRead BuzzPins listings
buzzpins.writeCreate & update pins
buzzpresence.readRead check-in data
buzzpresence.writeCreate check-in tokens
churchhub.readRead church hub data
churchhub.writeCreate church campaigns
commerce.readRead product/store data
commerce.writeCreate share pages
crm.readRead leads & contacts
crm.writeUpdate CRM records
referrals.readRead referral data
referrals.writeCreate referral links
content.generateAI content generation
email.prepareDraft email campaigns
email.send.requires_approvalSend emails (approval required)
sms.prepareDraft SMS campaigns
sms.send.requires_approvalSend SMS (approval required)
payments.readRead payout/billing data
payments.write.requires_approvalBilling actions (approval required)
public_publish.requires_approvalPublish public content (approval required)
agent.manageManage tokens & governance actions

All Available Actions

Fetch the live list any time at /api/v1/agent/actions. Each action links to its schema. High risk actions always require human approval before execution.

Growth & Presence

Action KeyRiskApproval?Description
create_buzzcardlowCreate a digital business card with QR code
generate_qr_codelowCreate a branded QR code for any URL
create_referral_linklowGenerate a trackable referral URL
create_buzzpinmediumYesDrop a location pin on the BuzzPins map
setup_smart_checkinlowGenerate an attendance token and check-in URL
create_product_share_pagelowBuild a shareable product micro-page
create_buzzbattle_matchuplowLaunch a community vote bracket
create_creator_daily_questionlowScaffold a BuzzPulse poll for creators

Outreach & CRM

Action KeyRiskApproval?Description
prepare_email_blasthighYesDraft an email campaign (held for review)
prepare_sms_blasthighYesDraft an SMS campaign (held for review)
list_leadslowPaginated CRM lead list with filters
update_lead_statusmediumYesMove a lead through the pipeline
create_church_engagement_campaignmediumYesSet up visitor follow-up for churches
launch_ai_workspace_planhighYesExecute a multi-step AI-generated setup plan

Onboarding & Ambassadors

Action KeyRiskApproval?Description
signup_userhighYesCreate a new It's Buzzing user account
enroll_ambassadorhighYesCreate ambassador profile with referral code
assign_ambassador_to_campaignmediumYesLink an ambassador to a campaign
payout_previewlowRead-only commission totals (no money movement)
create_or_update_local_listingmediumYesUpsert a BuzzPresence local listing
submit_business_claimhighYesInitiate a business ownership claim

Analytics

Action KeyRiskApproval?Description
analytics_overviewlowViews, clicks, conversions, and revenue totals
analytics_timeserieslowDaily/weekly metric series for charts
analytics_funnellowConversion funnel with drop-off rates
analytics_attributionlowLead breakdown by source, channel, ambassador
platform_health_summarylowSystem-wide action success rates and webhook health
action_failure_hotspotslowTop failing actions with error summaries

Webhooks

Action KeyRiskApproval?Description
create_webhooklowRegister a URL for HMAC-signed event payloads
list_webhookslowList all registered webhook endpoints
rotate_webhook_secretmediumYesGenerate a new HMAC signing secret
replay_webhook_eventmediumYesRe-fire a past payload to an endpoint

Governance & Control

Action KeyRiskApproval?Description
get_action_runlowFetch full detail for any action run
audit_log_querylowQuery immutable run log with filters
list_action_policieslowEvery action with risk level and scope requirements
validate_action_payloadlowSchema preflight without executing
simulate_action_policylowPreview approval policy for an action + payload
toggle_action_enabledhighYesEnable or disable any action in the registry
retry_action_runhighYesRe-run a failed action with the same payload
replay_action_runhighYesFresh run from a completed action's payload

Human Approval Queue

When an agent submits a high-risk action, execution is paused and you receive an email with Approve / Reject links. You can also manage approvals directly from your dashboard.

What triggers approval?

Approval flow

  1. Agent calls POST /api/v1/agent/actions/<key>/run
  2. Platform returns 202 awaiting_approval with an approval_id
  3. You receive an email with an Approve and a Reject button
  4. Clicking Approve executes the action and fires your webhooks with action.completed
  5. Clicking Reject marks the run as failed and fires action.rejected
Approval requests expire after 48 hours. If you don't act within that window the run stays in awaiting_approval and must be retried.

Managing approvals via API

# List pending approvals curl https://itsbuzzing.com/api/v1/agent/approvals \ -H "Authorization: Bearer bza_your_token" # Approve an action curl -X POST https://itsbuzzing.com/api/v1/agent/approvals/{approval_id}/approve \ -H "Authorization: Bearer bza_your_token" # Reject an action curl -X POST https://itsbuzzing.com/api/v1/agent/approvals/{approval_id}/reject \ -H "Authorization: Bearer bza_your_token" \ -d '{"reason": "Wrong recipient list"}'

Webhooks

Register a URL and receive HMAC-signed POST payloads whenever actions complete, fail, need approval, or are rejected.

Register a webhook

curl -X POST https://itsbuzzing.com/api/v1/agent/webhooks \ -H "Authorization: Bearer bza_your_token" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-server.com/hooks/buzzing", "event_types": ["action.completed", "action.rejected", "action.failed"] }'

Verify the signature

Every delivery includes an X-Buzzing-Signature header. Verify it to reject spoofed requests:

# Python example import hmac, hashlib def verify(body_bytes, signature_header, secret): expected = hmac.new(secret.encode(), body_bytes, hashlib.sha256).hexdigest() return hmac.compare_digest(f"sha256={expected}", signature_header)

Event types

EventWhen fired
action.completedAction executed successfully (including post-approval)
action.failedAction execution threw an error
action.rejectedApproval was denied by the account owner
webhook.testManual test ping from dashboard or API