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.

Base URL

https://api.automunch.site

Unified API Design

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 Header
Authorization: Bearer am_live_your_key_here

Supported Brands

Pass any of these values as the brand parameter. Short aliases are accepted everywhere.

BrandAliasesCostOTPNotes
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.

Flow

Your API key → your settings → your credits → accounts tagged with customer_ref

Developer Snapshot

GET /v1/me Verify key, balance, and settings

Verify your API key, check your credit balance, and confirm which brands are ready to use.

Request
curl -H "Authorization: Bearer am_live_..." \
  https://api.automunch.site/v1/me
Python
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']}")
200 Response
{
  "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

POST /v1/gen Start a generation job for any brand

Starts a generation job. The brand field determines which service handles the request. All brands use this single endpoint.

FieldTypeRequiredNotes
brandstringYeswhataburger/whata, bojangles/bojan, ubereats/uber
amountintegerYesNumber of accounts to generate
customer_refstringNoDeveloper-defined identifier for their customer
promostringNoUber Eats only — promo label or none. See GET /v1/promos

Whataburger Example

Request
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
Python
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)

Request
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
Python
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']}")
202 Response (all brands)
{
  "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

GET /v1/jobs/{job_id} Status and result

Poll this endpoint until the job status is completed or failed. Works for all brands.

Request
curl -H "Authorization: Bearer am_live_..." \
  https://api.automunch.site/v1/jobs/9f7b9c7c-4db6-4c89-8d7a-93f0e62ad555
Python — Poll until done
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)

Completed Job
{
  "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

Completed Job
{
  "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
    }
  }
}
Response Differences

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

GET /v1/accounts API-created accounts for any brand

Returns accounts created through the API. Filter by brand and optionally by customer_ref.

ParameterRequiredNotes
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.
Request
curl -H "Authorization: Bearer am_live_..." \
  "https://api.automunch.site/v1/accounts?brand=ubereats&customer_ref=discord:123"
Python
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

POST /v1/accounts/{account_id}/otp Fetch a sign-in code

Fetches a one-time password for Bojangles or Uber Eats accounts. Include the brand in the JSON body.

Slow Request

This endpoint triggers an OTP email and polls for delivery. Expect 10-30 second response times.

FieldTypeRequiredNotes
brandstringYesbojangles or ubereats (aliases accepted)
accountstringUE onlyUber Eats: email address of the account
timeoutintegerNoUber Eats: max wait in seconds (default 45)

Bojangles OTP

Request
curl -X POST \
  -H "Authorization: Bearer am_live_..." \
  -H "Content-Type: application/json" \
  -d '{"brand": "bojangles"}' \
  https://api.automunch.site/v1/accounts/1842/otp
Python
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']}")
Bojangles Response
{
  "account_id": 1842,
  "brand": "bojangles",
  "email": "example@domain.com",
  "otp": "123456"
}

Uber Eats OTP

Request
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
Python
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']}")
Uber Eats Response
{
  "source": "hotmail",
  "account": "example@outlook.com",
  "code": "1234"
}

List Promos

GET /v1/uber-eats/promos Uber Eats promo choices

Returns available promo labels and credit costs for Uber Eats. Pass the returned promo value in the POST /v1/gen body.

Uber Eats Only

This endpoint is specific to Uber Eats. Food brands (Whataburger, Bojangles) do not have promo selection.

Request
curl -H "Authorization: Bearer am_live_..." \
  https://api.automunch.site/v1/uber-eats/promos
Python
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)")
Response
{
  "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

StatusErrorMeaning
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 EndpointUnified Equivalent
POST /v1/food/whata/genPOST /v1/gen with {"brand":"whataburger"}
POST /v1/food/bojan/genPOST /v1/gen with {"brand":"bojangles"}
POST /v1/uber-eats/genPOST /v1/gen with {"brand":"ubereats"}
GET /v1/food/accounts?brand=whataGET /v1/accounts?brand=whata
GET /v1/uber-eats/accountsGET /v1/accounts?brand=ubereats
POST /v1/food/bojan/accounts/{id}/otpPOST /v1/accounts/{id}/otp with {"brand":"bojangles"}
POST /v1/uber-eats/otpPOST /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 Soon

Chain-based generation and order automation via REST API.

Instacart API

Coming Soon

Pickup checkout automation via REST API.

Chipotle API

Coming Soon

Batch group order placement and promo checkout.