Gen FAC API

Private API for Instagram account generation. You bring proxies and phone numbers, the API handles everything else and gives you back credentials and session files.

Buy a License

Pay with crypto — key delivered instantly after on-chain confirmation. No account required.

Trial
$30
1 key · 3 days
Monthly
$150
1 key · 30 days
3 Months
$380
1 key · 90 days · save $70

Keys are non-transferable. Sharing keys or reselling access gets your key pulled with no refund.

Quickstart

Three calls to get an account:

# 1. start the job, pass your proxy and phone
POST /jobs

# 2. once status is awaiting_otp, submit the code
POST /jobs/{job_id}/otp

# 3. poll until done, collect the result
GET /jobs/{job_id}

Use client.py and it handles all of this for you automatically.

Auth

Every request needs your API key. Two ways to pass it:

# header - use on GET /jobs/:id and POST /jobs/:id/otp
x-api-key: YOUR_KEY_HERE

# body field - use on POST /jobs
{ "key": "YOUR_KEY_HERE", ... }
Keep your key private. If it leaks contact support to get it replaced.

GET /health

GET /health check if the api is up

No auth needed. Good to ping before starting a big run.

Response

{
  "ok": true,
  "total_jobs": 45,
  "running": 38,
  "queued": 7,
  "awaiting_otp": 12,
  "worker_slots": 100
}

POST /jobs

POST /jobs start a generation job

Submit a job. Starts immediately, poll GET /jobs/:id for the result. Fire hundreds at once, they queue and drain automatically.

Request body

FieldTypeDescription
keystringrequiredYour API key
proxystringrequiredsocks5://user:pass@host:port
phonestringrequiredPhone with country code, e.g. +14155550123
usernamestringoptionalOverride the auto-generated username
passwordstringoptionalOverride the auto-generated password
full_namestringoptionalOverride the auto-generated name
yearintoptionalBirth year, defaults to random 1990-2002
monthintoptionalBirth month
dayintoptionalBirth day

Example

POST /jobs
Content-Type: application/json

{
  "key":   "YOUR_KEY_HERE",
  "proxy": "socks5://user:pass@proxy.example.com:1080",
  "phone": "+14155550123"
}

Response 202

{
  "job_id": "a3f9b2c1-...",
  "status": "running"
}

GET /jobs/:id

GET /jobs/{job_id} poll status / grab result

Poll every 3-5 seconds.

Headers

x-api-key: YOUR_KEY_HERE

status: queued

Server is at capacity, your job is in line. Starts automatically when a slot frees up.

{
  "job_id":         "a3f9b2c1-...",
  "status":         "queued",
  "queue_position": 4
}

status: running

{
  "job_id": "a3f9b2c1-...",
  "status": "running"
}

status: awaiting_otp

{
  "job_id": "a3f9b2c1-...",
  "status": "awaiting_otp",
  "phone":  "+14155550123"
}
120 second window. Once a job hits awaiting_otp you have 2 minutes to submit the code. Miss it and the job fails, retry with a fresh number.

status: done

{
  "job_id": "a3f9b2c1-...",
  "status": "done",
  "result": {
    "username": "jordan_smith92",
    "password": "Xk9#mLp3wQ!z",
    "phone":    "+14155550123",
    "user_id":  "58291047382",
    "active":   true,
    "exit_ip":  "104.28.11.92"
  }
}
Collected once. The result is deleted the moment you retrieve it. Polling again returns 404, save it immediately.

status: failed

{
  "job_id": "a3f9b2c1-...",
  "status": "failed",
  "error":  "instagram: challenge required"
}

POST /jobs/:id/otp

POST /jobs/{job_id}/otp submit the sms code

When your job hits awaiting_otp, grab the code from your SMS provider and drop it here. Job picks back up instantly.

Headers

x-api-key: YOUR_KEY_HERE

Body

{ "code": "123456" }

Response

{
  "ok": true,
  "message": "code accepted — job resuming"
}

Job Statuses

StatusWhat it meansWhat to do
queued Waiting for a free slot — check queue_position Nothing — it starts automatically
running Signup in progress Keep polling
awaiting_otp Waiting on your SMS code POST /jobs/:id/otp with the code
done Account created Collect result - deleted after retrieval
failed Something went wrong, check error Retry with a fresh phone and proxy

Error Codes

HTTPMeaning
400Bad request - missing or invalid field, check proxy format and phone format
401Invalid or missing API key
403Key suspended, contact support
404Job not found, already collected, failed, or expired

Full Flow

1.  get a phone number from your SMS provider

2.  POST /jobs
      {job_id, status: "running"} or "queued" if busy

3.  poll GET /jobs/{job_id} every 3s

      queued        check queue_position, starts automatically
      running       keep polling
      awaiting_otp  grab OTP from your SMS provider
                    POST /jobs/{job_id}/otp  {"code": "123456"}
      done          save result immediately (username/password/phone/session)
      failed        check error field, retry with new phone and proxy

Limits

No cap on concurrent jobs from your end. If the server is at capacity your jobs queue automatically and start as slots free. You'll see queue_position in the response counting down.

client.py

Handles everything automatically - SMS polling, OTP submission, job polling, saves credentials and session files locally. Just run it and follow the prompts.

Install deps

pip install requests colorama

Run

python client.py

First run setup

All settings saved to config.json, skipped on future runs.

Proxy modes

proxies.txt format

socks5://user:pass@host1:port
socks5://user:pass@host2:port
# lines starting with # are skipped

Output

# accounts.txt
[2025-01-15 14:32:01] [ACTIVE] username=jordan_smith92 | password=Xk9#mLp3wQ!z | phone=+14155550123

# sessions/jordan_smith92.json
full instagrapi session saved locally
Issues? DM support and include the error field from the failed job response.

Automate Your Accounts

Once you have credentials, you need a tool to actually run them. Volari is a Windows desktop app built for exactly this — multi-account Instagram automation with per-account proxy support, account warmup, and human-like timing so the accounts you generate don't get flagged on first use.

Recommended workflow: Generate accounts via Gen FAC → import into Volari with the same proxy used during creation → run the 7-day organic warmup → enable automation tasks. This is the lowest-risk path to accounts that stay active long-term.
volari.app Instagram automation — warmup, repost, schedule, bulk captions

gen fac api v1.0