API Documentation
Build your own bots powered by AutoMunch. One unified API for all supported brands.
Overview
The AutoMunch API lets developers build their own Discord bots (or any application) that generate
accounts using AutoMunch's infrastructure. All brands use the same unified endpoints — just change the brand parameter.
https://api.automunch.site
All brands share the same endpoint structure. Use POST /v1/gen with a brand field to generate for any supported brand. API keys are created in the main AutoMunch bot with
/api_key. Each user can have one active key.
Authentication
All API requests require a Bearer token in the Authorization header.
API keys are prefixed with am_live_.
Authorization: Bearer am_live_your_key_here
Supported Brands
Pass any of these values as the brand parameter. Short aliases are accepted everywhere.
| Brand | Aliases | Cost | OTP | Notes |
|---|---|---|---|---|
whataburger |
whata |
1 credit | ✗ | Android device emulation with reward polling |
bojangles |
bojan |
1 credit | ✓ | OloAuth + Braze + Sparkfly. OTP available |
ubereats |
uber |
1-2 credits | ✓ | Promo selection, Hotmail007 or IMAP email |
How It Works
As a provider, you create an API key linked to your Discord account, credits, and service settings.
Your backend calls the API to generate accounts for your customers, identified by a customer_ref you define.
Your API key → your settings → your credits → accounts tagged with customer_ref
Developer Snapshot
Verify your API key, check your credit balance, and confirm which brands are ready to use.
curl -H "Authorization: Bearer am_live_..." \ https://api.automunch.site/v1/me
import requests
API_KEY = "am_live_..."
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.get("https://api.automunch.site/v1/me", headers=headers)
data = resp.json()
print(f"Credits: {data['credits']}")
print(f"Brands: {data['brands']}")
{
"owner_user_id": "123456789012345678",
"credits": 25,
"settings": {
"gen_mode": "hotmail",
"hotmail_configured": true,
"email_domain_configured": false,
"imap_configured": true,
"whata_ready": true,
"bojan_ready": true,
"ubereats_ready": true
},
"brands": ["whataburger", "bojangles", "ubereats"]
}
Generate Accounts
Starts a generation job. The brand field determines which service handles the request. All brands use this single endpoint.
| Field | Type | Required | Notes |
|---|---|---|---|
brand | string | Yes | whataburger/whata, bojangles/bojan, ubereats/uber |
amount | integer | Yes | Number of accounts to generate |
customer_ref | string | No | Developer-defined identifier for their customer |
promo | string | No | Uber Eats only — promo label or none. See GET /v1/promos |
Whataburger Example
curl -X POST \
-H "Authorization: Bearer am_live_..." \
-H "Content-Type: application/json" \
-d '{"brand": "whataburger", "amount": 1, "customer_ref": "discord:123456789012345678"}' \
https://api.automunch.site/v1/gen
import requests
API_KEY = "am_live_..."
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.post(
"https://api.automunch.site/v1/gen",
headers=headers,
json={
"brand": "whataburger",
"amount": 1,
"customer_ref": "discord:123456789012345678"
}
)
job = resp.json()["job"]
print(f"Job ID: {job['job_id']}, Status: {job['status']}")
Uber Eats Example (with promo)
curl -X POST \
-H "Authorization: Bearer am_live_..." \
-H "Content-Type: application/json" \
-d '{"brand": "ubereats", "amount": 1, "promo": "$20 off $25 (x2)", "customer_ref": "discord:123456789012345678"}' \
https://api.automunch.site/v1/gen
import requests
API_KEY = "am_live_..."
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.post(
"https://api.automunch.site/v1/gen",
headers=headers,
json={
"brand": "ubereats",
"amount": 1,
"promo": "$20 off $25 (x2)",
"customer_ref": "discord:123456789012345678"
}
)
job = resp.json()["job"]
print(f"Job ID: {job['job_id']}")
{
"job": {
"job_id": "9f7b9c7c-4db6-4c89-8d7a-93f0e62ad555",
"owner_user_id": "123456789012345678",
"brand": "whataburger",
"amount": 1,
"customer_ref": "discord:123456789012345678",
"status": "queued",
"progress_current": 0,
"progress_total": 1
}
}
Poll Job Status
Poll this endpoint until the job status is completed or failed. Works for all brands.
curl -H "Authorization: Bearer am_live_..." \ https://api.automunch.site/v1/jobs/9f7b9c7c-4db6-4c89-8d7a-93f0e62ad555
import time, requests
API_KEY = "am_live_..."
headers = {"Authorization": f"Bearer {API_KEY}"}
job_id = "9f7b9c7c-4db6-4c89-8d7a-93f0e62ad555"
while True:
resp = requests.get(
f"https://api.automunch.site/v1/jobs/{job_id}",
headers=headers
)
job = resp.json()["job"]
if job["status"] in ("completed", "failed"):
break
print(f"Status: {job['status']} — waiting...")
time.sleep(3)
if job["status"] == "completed":
for acct in job["result"]["accounts"]:
print(f"{acct['email']} — {acct['brand']}")
else:
print(f"Job failed: {job}")
Food Brand Response (Whataburger / Bojangles)
{
"job": {
"job_id": "9f7b9c7c-4db6-4c89-8d7a-93f0e62ad555",
"brand": "bojangles",
"status": "completed",
"result": {
"generated_count": 1,
"failed_count": 0,
"customer_ref": "discord:123456789012345678",
"accounts": [
{
"id": 1842,
"brand": "bojangles",
"email": "example@domain.com",
"phone": "5551234567",
"first_name": "James",
"last_name": "Smith",
"member_uuid": "abc-123",
"rewards": []
}
],
"credits_remaining": 24
}
}
}
Uber Eats Response
{
"job": {
"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"brand": "ubereats",
"status": "completed",
"result": {
"generated_count": 1,
"failed_count": 0,
"customer_ref": "discord:123456789012345678",
"accounts": [
{
"email": "example@outlook.com",
"first_name": "James",
"last_name": "Smith",
"promotion_name": "$20 off $25 (x2)",
"promo_error": null,
"access_token": "eyJhbGciOi...",
"refresh_token": "dGhpcyBpcy..."
}
],
"credits_remaining": 24
}
}
}
Food brands return id, phone, member_uuid, and rewards. Uber Eats returns promotion_name, promo_error, access_token, and refresh_token. Common fields: email, first_name, last_name.
List Accounts
Returns accounts created through the API. Filter by brand and optionally by customer_ref.
| Parameter | Required | Notes |
|---|---|---|
brand |
Yes | Full name or short alias (whataburger/whata, bojangles/bojan, ubereats/uber) |
customer_ref |
No | Filter to a specific customer |
limit |
No | Defaults to 50. Maximum 100. |
curl -H "Authorization: Bearer am_live_..." \ "https://api.automunch.site/v1/accounts?brand=ubereats&customer_ref=discord:123"
import requests
API_KEY = "am_live_..."
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.get(
"https://api.automunch.site/v1/accounts",
headers=headers,
params={"brand": "ubereats", "customer_ref": "discord:123"}
)
accounts = resp.json()["accounts"]
for acct in accounts:
print(f"{acct['email']} — {acct['brand']}")
Fetch OTP
Fetches a one-time password for Bojangles or Uber Eats accounts. Include the brand in the JSON body.
This endpoint triggers an OTP email and polls for delivery. Expect 10-30 second response times.
| Field | Type | Required | Notes |
|---|---|---|---|
brand | string | Yes | bojangles or ubereats (aliases accepted) |
account | string | UE only | Uber Eats: email address of the account |
timeout | integer | No | Uber Eats: max wait in seconds (default 45) |
Bojangles OTP
curl -X POST \
-H "Authorization: Bearer am_live_..." \
-H "Content-Type: application/json" \
-d '{"brand": "bojangles"}' \
https://api.automunch.site/v1/accounts/1842/otp
import requests
API_KEY = "am_live_..."
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.post(
"https://api.automunch.site/v1/accounts/1842/otp",
headers=headers,
json={"brand": "bojangles"}
)
print(f"OTP: {resp.json()['otp']}")
{
"account_id": 1842,
"brand": "bojangles",
"email": "example@domain.com",
"otp": "123456"
}
Uber Eats OTP
curl -X POST \
-H "Authorization: Bearer am_live_..." \
-H "Content-Type: application/json" \
-d '{"brand": "ubereats", "account": "example@outlook.com", "timeout": 45}' \
https://api.automunch.site/v1/accounts/0/otp
import requests
API_KEY = "am_live_..."
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.post(
"https://api.automunch.site/v1/accounts/0/otp",
headers=headers,
json={"brand": "ubereats", "account": "example@outlook.com", "timeout": 45}
)
data = resp.json()
print(f"OTP: {data['code']}")
{
"source": "hotmail",
"account": "example@outlook.com",
"code": "1234"
}
List Promos
Returns available promo labels and credit costs for Uber Eats. Pass the returned promo value in the POST /v1/gen body.
This endpoint is specific to Uber Eats. Food brands (Whataburger, Bojangles) do not have promo selection.
curl -H "Authorization: Bearer am_live_..." \ https://api.automunch.site/v1/uber-eats/promos
import requests
API_KEY = "am_live_..."
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.get(
"https://api.automunch.site/v1/uber-eats/promos",
headers=headers
)
for p in resp.json()["promos"]:
print(f"{p['label']} — {p['credit_cost']} credit(s)")
{
"promos": [
{
"label": "No promo",
"promo": "none",
"credit_cost": 1
},
{
"label": "$20 off $25 (x2)",
"promo": "$20 off $25 (x2)",
"credit_cost": 1
}
]
}
Developer Workflow
Create key
Run /api_key action:Create in the main AutoMunch bot on Discord.
Configure settings
Use the matching bot's /settings to set up your email provider for the brands you need.
Start job
POST to /v1/gen with brand, amount, and optional customer_ref.
Deliver result
Poll /v1/jobs/{job_id} until completed, then send account details to your users.
Error Codes
| Status | Error | Meaning |
|---|---|---|
401 |
unauthorized |
Missing, invalid, or revoked API key. |
402 |
insufficient_credits |
Not enough credits for the requested amount. |
400 |
bad_request |
Missing or invalid brand, amount, or other required fields. |
400 |
settings_required |
Must configure bot settings before using that brand's API. |
409 |
active_job_exists |
Already has a queued or running API generation job. |
504 |
otp_not_found |
No matching OTP found within the polling window. |
Legacy Endpoints
The original per-brand endpoints still work and are fully supported. The unified endpoints above are recommended for new integrations.
| Legacy Endpoint | Unified Equivalent |
|---|---|
POST /v1/food/whata/gen | POST /v1/gen with {"brand":"whataburger"} |
POST /v1/food/bojan/gen | POST /v1/gen with {"brand":"bojangles"} |
POST /v1/uber-eats/gen | POST /v1/gen with {"brand":"ubereats"} |
GET /v1/food/accounts?brand=whata | GET /v1/accounts?brand=whata |
GET /v1/uber-eats/accounts | GET /v1/accounts?brand=ubereats |
POST /v1/food/bojan/accounts/{id}/otp | POST /v1/accounts/{id}/otp with {"brand":"bojangles"} |
POST /v1/uber-eats/otp | POST /v1/accounts/0/otp with {"brand":"ubereats"} |
GET /v1/uber-eats/jobs/{id} | GET /v1/jobs/{id} |
Future APIs
These brands are planned for API access but not yet available.
DoorDash API
Coming SoonChain-based generation and order automation via REST API.
Instacart API
Coming SoonPickup checkout automation via REST API.
Chipotle API
Coming SoonBatch group order placement and promo checkout.
