AI API Gateway Platform for Subscription Quota Distribution
$ npx -y skills add Wei-Shaw/sub2api --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
Repo: Wei-Shaw/sub2api
What's inside
AI API Gateway Platform for Subscription Quota Distribution
Please read the following carefully before using this project:
Want to appear here?
๐ The platform offers a variety of channels to choose from: an ultra-low-price 0.02x OpenAI promotional group (limited time), groups as low as 0.25x OpenAI, 0.7x Claude with 95% fixed cache, and a 1.2x Claude Max channel. It also provides a public status page showing real-time availability, latency, and operating status of each group for transparent and reliable service, plus 7ร24 human technical support (not bots) with fast responses to developer needs.
Sub2API is an AI API gateway platform designed to distribute and manage API quotas from AI product subscriptions. Users can access upstream AI services through platform-generated API Keys, while the platform handles authentication, billing, load balancing, and request forwarding.
Community projects that extend or integrate with Sub2API:
| Project | Description | Features |
|---|---|---|
| Now Built-in โ Payment is now integrated into Sub2API, no separate deployment needed. See Payment Configuration Guide | ||
| sub2api-mobile | Mobile admin console | Cross-platform app (iOS/Android/Web) for user management, account management, monitoring dashboard, and multi-backend switching; built with Expo + React Native |
| Component | Technology |
|---|---|
| Backend | Go 1.25.7, Gin, Ent |
| Frontend | Vue 3.4+, Vite 5+, TailwindCSS |
| Database | PostgreSQL 15+ |
| Cache/Queue | Redis 7+ |
When using Nginx as a reverse proxy for Sub2API (or CRS) with Codex CLI, add the following to the http block in your Nginx configuration:
underscores_in_headers on;
Nginx drops headers containing underscores by default (e.g. session_id), which breaks sticky session routing in multi-account setups.
One-click installation script that downloads pre-built binaries from GitHub Releases.
curl -sSL https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/deploy/install.sh | sudo bash
The script will:
/opt/sub2api# 1. Start the service
sudo systemctl start sub2api
# 2. Enable auto-start on boot
sudo systemctl enable sub2api
# 3. Open Setup Wizard in browser
# http://YOUR_SERVER_IP:8080
The Setup Wizard will guide you through:
You can upgrade directly from the Admin Dashboard by clicking the Check for Updates button in the top-left corner.
The web interface will:
# Check status
sudo systemctl status sub2api
# View logs
sudo journalctl -u sub2api -f
# Restart service
sudo systemctl restart sub2api
# Uninstall
curl -sSL https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/deploy/install.sh | sudo bash -s -- uninstall -y
Deploy with Docker Compose, including PostgreSQL and Redis containers.
Use the automated deployment script for easy setup:
# Create deployment directory
mkdir -p sub2api-deploy && cd sub2api-deploy
# Download and run deployment preparation script
curl -sSL https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/deploy/docker-deploy.sh | bash
# Start services
docker compose up -d
# View logs
docker compose logs -f sub2api
What the script does:
docker-compose.local.yml (saved as docker-compose.yml) and .env.example.env file with auto-generated secretsIf you prefer manual setup:
# 1. Clone the repository
git clone https://github.com/Wei-Shaw/sub2api.git
cd sub2api/deploy
# 2. Copy environment configuration
cp .env.example .env
chmod 600 .env
# 3. Edit configuration (generate secure passwords)
nano .env
Required configuration in .env:
# PostgreSQL password (REQUIRED)
POSTGRES_PASSWORD=your_secure_password_here
# JWT Secret (RECOMMENDED - keeps users logged in after restart)
JWT_SECRET=your_jwt_secret_here
# TOTP Encryption Key (RECOMMENDED - preserves 2FA after restart)
TOTP_ENCRYPTION_KEY=your_totp_key_here
# Optional: Admin account
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=your_admin_password
# Optional: Custom port
SERVER_PORT=8080
Generate secure secrets:
# Generate JWT_SECRET
openssl rand -hex 32
# Generate TOTP_ENCRYPTION_KEY
openssl rand -hex 32
# Generate POSTGRES_PASSWORD
openssl rand -hex 32
# 4. Create data directories (for local version)
mkdir -p data postgres_data redis_data
# 5. Start all services
# Option A: Local directory version (recommended - easy migration)
docker compose -f docker-compose.local.yml up -d
# Option B: Named volumes version (simple setup)
docker compose up -d
# 6. Check status
docker compose -f docker-compose.local.yml ps
# 7. View logs
docker compose -f docker-compose.local.yml logs -f sub2api
| Version | Data Storage | Migration | Best For |
|---|---|---|---|
| docker-compose.local.yml | Local directories | โ Easy (tar entire directory) | Production, frequent backups |
| docker-compose.yml | Named volumes | โ ๏ธ Requires docker commands | Simple setup |
Recommendation: Use docker-compose.local.yml (deployed by script) for easier data management.
Open http://YOUR_SERVER_IP:8080 in your browser.
If admin password was auto-generated, find it in logs:
docker compose -f docker-compose.local.yml logs sub2api | grep "admin password"
# Pull latest image and recreate container
docker compose -f docker-compose.local.yml pull
docker compose -f docker-compose.local.yml up -d
When using docker-compose.local.yml, migrate to a new server easily:
# On source server
docker compose -f docker-compose.local.yml down
cd ..
tar czf sub2api-complete.tar.gz sub2api-deploy/
# Transfer to new server
scp sub2api-complete.tar.gz user@new-server:/path/
# On new server
tar xzf sub2api-complete.tar.gz
cd sub2api-deploy/
docker compose -f docker-compose.local.yml up -d
# Stop all services
docker compose -f docker-compose.local.yml down
# Restart
docker compose -f docker-compose.local.yml restart
# View all logs
docker compose -f docker-compose.local.yml logs -f
# Remove all data (caution!)
docker compose -f docker-compose.local.yml down
rm -rf data/ postgres_data/ redis_data/
Apple-silicon Macs running macOS 26 can run the full Sub2API, PostgreSQL, and Redis stack with Apple container 1.1.0 or newer:
git clone https://github.com/Wei-Shaw/sub2api.git
cd sub2api/deploy
./apple-container.sh init
./apple-container.sh up
./apple-container.sh status
This is an operator-managed local workflow; Docker Compose remains the recommended production path. See deploy/APPLE_CONTAINER.md for lifecycle commands, persistence, upgrades, and runtime limitations.
Build and run from source code for development or customization.
# 1. Clone the repository
git clone https://github.com/Wei-Shaw/sub2api.git
cd sub2api
# 2. Install pnpm (if not already installed)
npm install -g pnpm
# 3. Build frontend
cd frontend
pnpm install
pnpm run build
# Output will be in ../backend/internal/web/dist/
# 4. Build backend with embedded frontend
cd ../backend
VERSION="$(./scripts/resolve-version.sh)"
go build -tags embed -ldflags="-X main.Version=${VERSION}" -o sub2api ./cmd/server
# 5. Create configuration file
cp ../deploy/config.example.yaml ./config.yaml
# 6. Edit configuration
nano config.yaml
Note: The
-tags embedflag embeds the frontend into the binary. Without this flag, the binary will not serve the frontend UI.
Key configuration in config.yaml:
server:
host: "0.0.0.0"
port: 8080
mode: "release"
database:
host: "localhost"
port: 5432
user: "postgres"
password: "your_password"
dbname: "sub2api"
redis:
host: "localhost"
port: 6379
username: ""
password: ""
jwt:
secret: "change-this-to-a-secure-random-string"
expire_hour: 24
default:
user_concurrency: 5
user_balance: 0
api_key_prefix: "sk-"
rate_multiplier: 1.0
โ ๏ธ Sora-related features are temporarily unavailable due to technical issues in upstream integration and media delivery. Please do not rely on Sora in production at this time. Existing
gateway.sora_*configuration keys are reserved and may not take effect until these issues are resolved.
Additional security-related options are available in config.yaml:
cors.allowed_origins for CORS allowlistsecurity.url_allowlist for upstream/pricing/CRS host allowlistssecurity.url_allowlist.enabled to disable URL validation (use with caution)security.url_allowlist.allow_insecure_http to allow HTTP URLs when validation is disabledsecurity.url_allowlist.allow_private_hosts to allow private/local IP addressessecurity.response_headers.enabled to enable configurable response header filtering (disabled uses default allowlist)security.csp to control Content-Security-Policy headersbilling.circuit_breaker to fail closed on billing errorssecurity.trust_forwarded_ip_for_api_key_acl enables legacy raw forwarded-header takeover (enabled by default for upgrade compatibility); disable it to enforce server.trusted_proxies, which should contain only the exact proxy CIDRs that connect directly to Sub2APIsecurity.forwarded_client_ip_headers configures up to 16 third-party CDN client-IP header names; they are checked in order before the built-in headers only while legacy takeover is enabledturnstile.required to require Turnstile in release modeCustom client-IP headers can be set in YAML or as a comma-separated environment variable:
SECURITY_FORWARDED_CLIENT_IP_HEADERS=True-Client-IP,X-CDN-Client-IP
Header names are validated, canonicalized, and de-duplicated. The admin security settings can update the list without a restart; new installations persist YAML/environment defaults and existing installations backfill a missing database value. When legacy takeover is disabled, all custom and built-in raw forwarding headers are ignored and Gin uses only server.trusted_proxies. While takeover is enabled, firewall the origin to CDN/proxy addresses and make the edge overwrite every trusted client-IP header. See deploy/EDGE_SECURITY.md for the complete migration and trust-boundary rules.
โ ๏ธ Security Warning: HTTP URL Configuration
When security.url_allowlist.enabled=false, the system performs minimal URL validation and allows HTTP URLs by default (dev-friendly mode; Docker Compose deployments use the same default). For production, explicitly tighten this to HTTPS-only:
security:
url_allowlist:
enabled: false # Disable allowlist checks
allow_insecure_http: false # HTTPS only (recommended for production)
Or via environment variable:
SECURITY_URL_ALLOWLIST_ENABLED=false
SECURITY_URL_ALLOWLIST_ALLOW_INSECURE_HTTP=false
Risks of allowing HTTP:
When to use HTTP:
Example error for HTTP URLs when allow_insecure_http: false is set:
Invalid base URL: invalid url scheme: http
If you disable URL validation or response header filtering, harden your network layer:
gateway.openai_ws bounds the lifetime and aggregate count of client-facing
Responses WebSocket sessions. These safeguards apply independently from
per-turn user and account concurrency slots, which are released between turns.
gateway:
openai_ws:
# Total time to receive and decompress the first client message.
client_first_message_timeout_seconds: 30
# Close a client socket idle between completed turns; 0 disables this safeguard.
ingress_inter_turn_idle_timeout_seconds: 300
# Distributed API-key limit for live client ingress sessions; 0 disables it.
max_ingress_connections_per_api_key: 64
The first-message timeout is a total read deadline. Deployments that accept large contexts or image-heavy requests over slower links can raise it to 120-300 seconds. It expires before HTTP bridge routing, so bridge mode does not override this limit.
The connection cap is coordinated through Redis using a 60-second lease that is refreshed every 20 seconds. A process that cannot confirm a lease for a full lease lifetime closes its local WebSocket rather than continuing outside the global cap.
Enable the v2 mode router before selecting an account-level WS mode such as
http_bridge:
gateway:
openai_ws:
mode_router_v2_enabled: true
Or set GATEWAY_OPENAI_WS_MODE_ROUTER_V2_ENABLED=true in the environment.
Use http_bridge for client-WebSocket/upstream-HTTP operation when rolling out
or mitigating upstream WebSocket issues.
The initial admin account is only created via the setup wizard (served at http://<host>:8080 on first run). The default.admin_email / default.admin_password fields in config.yaml are not used to create it โ they exist in the template for historical reasons.
Because step 5 above pre-creates config.yaml, the setup wizard will be skipped on first run: the server detects an existing config and boots straight into normal mode with an empty users table, so the first login attempt fails with invalid email or password.
Two ways to create the admin account:
Recommended โ let the wizard generate config.yaml: Skip step 5 (do not run the cp). Start ./sub2api directly; the setup wizard at http://localhost:8080 walks you through database, Redis, and admin account setup, then writes config.yaml for you.
If you already created config.yaml: Temporarily move it aside so the wizard can trigger on first run, then restore it afterwards:
mv config.yaml config.yaml.bak
./sub2api # wizard runs at http://localhost:8080 and writes a fresh config.yaml
# stop the server (Ctrl+C) once the wizard completes, then restore your config:
mv config.yaml.bak config.yaml
./sub2api # restart in normal mode and log in with the admin you just created
# 6. Run the application
./sub2api
# Backend (with hot reload)
cd backend
go run ./cmd/server
# Frontend (with hot reload)
cd frontend
pnpm run dev
When editing backend/ent/schema, regenerate Ent + Wire:
cd backend
go generate ./ent
go generate ./cmd/server
Simple Mode is designed for individual developers or internal teams who want quick access without full SaaS features.
RUN_MODE=simpleSIMPLE_MODE_CONFIRM=true to allow startupLong-running OpenAI/Grok image generation and editing can be submitted through /v1/images/generations/async or /v1/images/edits/async, then polled at /v1/images/tasks/{task_id} without holding a CDN connection open. See Asynchronous Image Tasks for request and response examples.
Sub2API supports both Grok subscription accounts through xAI OAuth and standard xAI API-key accounts. Both account types forward OpenAI-compatible Responses traffic to xAI.
grok/v1/responses, /responses, and /backend-api/codex/responses, forwarded to the Grok subscription proxy for OAuth accounts or https://api.x.ai/v1/responses for API-key accounts/v1/messages, converted to xAI Responses and returned as Anthropic Messages output for Claude CLI style clients/v1/chat/completions and /chat/completions, forwarded to the account-type-specific xAI upstreamgrok-4.5, grok-4.3, grok-build-0.1, grok-composer-2.5-fast, grok-4.20-0309-reasoning, grok-4.20-0309-non-reasoning, and grok-4.20-multi-agent-0309/v1/images/generations, /images/generations, /v1/images/edits, /images/edits, /v1/videos/generations, /videos/generations, /v1/videos/edits, /videos/edits, /v1/videos/extensions, /videos/extensions, /v1/videos/{request_id}, and /videos/{request_id}. Generation, editing, and extension requests require the group image-generation permission.grok-imagine, grok-imagine-image-quality, grok-imagine-image, grok-imagine-edit, grok-imagine-video, and grok-imagine-video-1.5image, images, reference_images, and mask objects. Use url for xAI-compatible payloads; the legacy image_url field remains accepted and is normalized to url before forwarding.The Grok OAuth flow uses PKCE and does not require committing private secrets. The default client details follow the public xAI OAuth flow used by compatible clients, and every value can be overridden by environment variable:
| Variable | Default |
|---|---|
XAI_OAUTH_CLIENT_ID | Public xAI OAuth client ID |
XAI_OAUTH_SCOPE | openid profile email offline_access grok-cli:access api:access |
XAI_OAUTH_REDIRECT_URI | http://127.0.0.1:56121/callback |
XAI_OAUTH_AUTHORIZE_URL | https://auth.x.ai/oauth2/authorize |
XAI_OAUTH_TOKEN_URL | https://auth.x.ai/oauth2/token |
XAI_BASE_URL | https://api.x.ai/v1; runtime-diagnostics override (account base_url controls request forwarding) |
XAI_GROK_CLI_VERSION | 0.2.114; optional override for the client identity sent to cli-chat-proxy.grok.com. The pinned value is also the floor: an override below it is dropped |
Administrators can create Grok OAuth or API-key accounts from the dashboard. OAuth authorization and reauthorization are also available through the admin API:
| Endpoint | Purpose |
|---|---|
POST /api/v1/admin/grok/oauth/auth-url | Generate an xAI OAuth authorization URL |
POST /api/v1/admin/grok/oauth/exchange-code | Exchange a callback URL, query string, or code for OAuth credentials |
POST /api/v1/admin/grok/oauth/refresh-token | Validate or refresh a Grok refresh token |
POST /api/v1/admin/grok/accounts/:id/refresh | Refresh an existing Grok account |
OAuth credential storage reuses the existing account JSON fields: access_token, refresh_token, token_type, expires_at, base_url, optional email, optional subscription_tier, and entitlement_status. OAuth inference defaults to https://cli-chat-proxy.grok.com/v1; existing OAuth accounts that stored the old https://api.x.ai/v1 default are redirected to the subscription proxy at runtime. Explicit custom upstreams remain unchanged.
For API-key accounts, select Grok โ API Key in the create-account dialog. The official base URL defaults to https://api.x.ai/v1; credentials use the existing base_url and api_key account fields. OAuth accounts continue to use the subscription flow above.
grok OAuth account and complete xAI authorization, or add a Grok API-key account.~/.grok/config.toml (Windows: %USERPROFILE%\.grok\config.toml):[models]
default = "grok"
web_search = "grok"
[model."grok"]
model = "grok-4.5"
base_url = "https://your-sub2api.example.com/v1"
name = "Grok 4.5"
api_key = "sk-your-sub2api-key"
api_backend = "responses"
context_window = 1000000
supports_backend_search = true
Back up an existing config.toml before merging the entry. The file contains a Sub2API API key, so keep it private and restrict its permissions where supported. Verify the effective configuration and make a smoke request:
grok inspect
grok -p "Reply with sub2api-ok" -m grok
The base_url above is the public Sub2API URL ending in /v1, not api.x.ai or the internal xAI OAuth proxy URL.
xAI quota is passive. Sub2API does not invent subscription quota values; it records whitelisted xAI rate-limit headers from successful or rate-limited upstream responses when xAI sends them. Before the first usable upstream response, the dashboard shows quota as unknown and still displays local Sub2API usage stats.
401 responses temporarily remove accounts with invalid credentials from scheduling. 403 responses are treated as access or entitlement failures instead of token-refresh loops. 429 responses use Retry-After or a short cooldown to temporarily remove the account from scheduling.
New Grok image and video generation requests use a media-specific eligibility check. API-key accounts remain eligible. OAuth accounts require positive paid-entitlement evidence from the xAI billing probe; Free, forbidden, missing, malformed, and inconclusive billing observations are excluded from new media generation. Unobserved OAuth accounts are probed before the first media request is forwarded, and imports run the billing-first quota probe proactively. Chat requests and video status lookups are not affected by this media-only quarantine. If no eligible account remains, the media endpoint returns HTTP 503 with error type grok_media_no_eligible_account.
Administrators can override automatic media eligibility through the account create/update API by setting extra.grok_media_eligible to false (exclude) or true (force eligible). On update, set it to null to remove the override and return to automatic probe-based behavior; omitting the field preserves the current override. A weekly allowance period alone is not treated as a paid tier signal. Successful image responses must contain at least one actual image output; empty HTTP 200 responses trigger account failover instead of being counted and returned as successful generations.
Sub2API supports Antigravity accounts. After authorization, dedicated endpoints are available for Claude and Gemini models.
| Endpoint | Model |
|---|---|
/antigravity/v1/messages | Claude models |
/antigravity/v1beta/ | Gemini models |
export ANTHROPIC_BASE_URL="http://localhost:8080/antigravity"
export ANTHROPIC_AUTH_TOKEN="sk-xxx"
Antigravity accounts support optional hybrid scheduling. When enabled, the general endpoints /v1/messages and /v1beta/ will also route requests to Antigravity accounts.
โ ๏ธ Warning: Anthropic Claude and Antigravity Claude cannot be mixed within the same conversation context. Use groups to isolate them properly.
sub2api/
โโโ backend/ # Go backend service
โ โโโ cmd/server/ # Application entry
โ โโโ internal/ # Internal modules
โ โ โโโ config/ # Configuration
โ โ โโโ model/ # Data models
โ โ โโโ service/ # Business logic
โ โ โโโ handler/ # HTTP handlers
โ โ โโโ gateway/ # API gateway core
โ โโโ resources/ # Static resources
โ
โโโ frontend/ # Vue 3 frontend
โ โโโ src/
โ โโโ api/ # API calls
โ โโโ stores/ # State management
โ โโโ views/ # Page components
โ โโโ components/ # Reusable components
โ
โโโ deploy/ # Deployment files
โโโ docker-compose.yml # Docker Compose configuration
โโโ .env.example # Environment variables for Docker Compose
โโโ config.example.yaml # Full config file for binary deployment
โโโ install.sh # One-click installation script
This project is licensed under the GNU Lesser General Public License v3.0 (or later).
Copyright (c) 2026 Wesley Liddick
If you find this project useful, please give it a star!
.dockerignore
.gitattributes
.github/
audit-exceptions.yml
workflows/
backend-ci.yml
cla.yml
release.yml
security-scan.yml
.gitignore
.goreleaser.simple.yaml
.goreleaser.yaml
assets/
logo.svg
partners/
logos/
aigocode.png
aimzoon.jpg
apikey-fun.png
bestproxy.png
bmoplus.jpg
cctk.jpg
claudeapi.jpg
code0.jpg
ctok.png
etok.png
fastaitoken.jpg
fennoai.jpg
haoai.png
haoai.svg
lanox.jpg
nagora.png
novada.png
openmodel.jpg
pateway.png
pincc-logo.png
poixe.png
pptoken.png
proxy4free.png
qiniu.jpg
rapidproxy.jpg
RoxyBrowser.png
runapi.png
silkapi.png
sui-xiang.jpg
veilx.png
backend/
.dockerignore
.golangci.yml
cmd/
cleanup-ingress-reject-logs/
main_test.go
main.go
README.md
jwtgen/
main.go
profit-preview/
main_test.go
main.go
server/
main.go
VERSION
wire_gen_test.go
wire_gen.go
wire.go
Dockerfile
ent/
account/
account_create.go
account_delete.go
account_query.go
account_update.go
account.go
account.go
where.go
accountgroup/
accountgroup_create.go
accountgroup_delete.go
accountgroup_query.go
accountgroup_update.go
accountgroup.go
accountgroup.go
where.go
announcement/
announcement_create.go
announcement_delete.go
announcement_query.go
announcement_update.go
announcement.go
announcement.go
where.go
announcementread/
announcementread_create.go
announcementread_delete.go
announcementread_query.go
announcementread_update.go
announcementread.go
announcementread.go
where.go
apikey/
apikey_create.go
apikey_delete.go
apikey_query.go
apikey_update.go
apikey.go
apikey.go
where.go
authidentity/
authidentity_create.go
authidentity_delete.go
authidentity_query.go
authidentity_update.go
authidentity.go
authidentity.go
where.go
authidentitychannel/
authidentitychannel_create.go
authidentitychannel_delete.go
authidentitychannel_query.go
authidentitychannel_update.go
authidentitychannel.go
authidentitychannel.go
where.go
batchimageevent/
batchimageevent_create.go
batchimageevent_delete.go
batchimageevent_query.go
batchimageevent_update.go
batchimageevent.go
batchimageevent.go
where.go
batchimageitem/
batchimageitem_create.go
batchimageitem_delete.go
batchimageitem_query.go
batchimageitem_update.go
batchimageitem.go
batchimageitem.go
where.go
batchimagejob/
batchimagejob_create.go
batchimagejob_delete.go
batchimagejob_query.go
batchimagejob_update.go
batchimagejob.go
batchimagejob.go
where.go
channelmonitor/
channelmonitor_create.go
channelmonitor_delete.go
channelmonitor_query.go
channelmonitor_update.go
channelmonitor.go
channelmonitor.go
where.go
channelmonitordailyrollup/
channelmonitordailyrollup_create.go
channelmonitordailyrollup_delete.go
channelmonitordailyrollup_query.go
channelmonitordailyrollup_update.go
channelmonitordailyrollup.go
channelmonitordailyrollup.go
where.go
channelmonitorhistory/
channelmonitorhistory_create.go
channelmonitorhistory_delete.go
channelmonitorhistory_query.go
channelmonitorhistory_update.go
channelmonitorhistory.go
channelmonitorhistory.go
where.go
channelmonitorrequesttemplate/
channelmonitorrequesttemplate_create.go
channelmonitorrequesttemplate_delete.go
channelmonitorrequesttemplate_query.go
channelmonitorrequesttemplate_update.go
channelmonitorrequesttemplate.go
channelmonitorrequesttemplate.go
where.go
client.go
compositemodelroute/
compositemodelroute_create.go
compositemodelroute_delete.go
compositemodelroute_query.go
compositemodelroute_update.go
compositemodelroute.go
compositemodelroute.go
where.go
driver_access.go
ent.go
enttest/
enttest.go
errorpassthroughrule/
errorpassthroughrule_create.go
errorpassthroughrule_delete.go
errorpassthroughrule_query.go
errorpassthroughrule_update.go
errorpassthroughrule.go
errorpassthroughrule.go
where.go
generate.go
group/
group_create.go
group_delete.go
group_query.go
group_update.go
group.go
group.go
where.go
hook/
hook.go
idempotencyrecord/
idempotencyrecord_create.go
idempotencyrecord_delete.go
idempotencyrecord_query.go
idempotencyrecord_update.go
idempotencyrecord.go
idempotencyrecord.go
where.go
identityadoptiondecision/
identityadoptiondecision_create.go
identityadoptiondecision_delete.go
identityadoptiondecision_query.go
identityadoptiondecision_update.go
identityadoptiondecision.go
identityadoptiondecision.go
where.go
intercept/
intercept.go
migrate/
auth_identity_fk_ondelete_test.go
migrate.go
schema.go
mutation.go
paymentauditlog/
paymentauditlog_create.go
paymentauditlog_delete.go
paymentauditlog_query.go
paymentauditlog_update.go
paymentauditlog.go
paymentauditlog.go
where.go
paymentorder/
paymentorder_create.go
paymentorder_delete.go
paymentorder_query.go
paymentorder_update.go
paymentorder.go
paymentorder.go
where.go
paymentproviderinstance/
paymentproviderinstance_create.go
paymentproviderinstance_delete.go
paymentproviderinstance_query.go
paymentproviderinstance_update.go
paymentproviderinstance.go
paymentproviderinstance.go
where.go
pendingauthsession/
pendingauthsession_create.go
pendingauthsession_delete.go
pendingauthsession_query.go
pendingauthsession_update.go
pendingauthsession.go
pendingauthsession.go
where.go
predicate/
predicate.go
promocode/
promocode_create.go
promocode_delete.go
promocode_query.go
promocode_update.go
promocode.go
promocode.go
where.go
promocodeusage/
promocodeusage_create.go
promocodeusage_delete.go
promocodeusage_query.go
promocodeusage_update.go
promocodeusage.go
promocodeusage.go
where.go
proxy/
proxy_create.go
proxy_delete.go
proxy_query.go
proxy_update.go
proxy.go
proxy.go
where.go
redeemcode/
redeemcode_create.go
redeemcode_delete.go
redeemcode_query.go
redeemcode_update.go
redeemcode.go
redeemcode.go
where.go
runtime/
runtime.go
runtime.go
schema/
account_group.go
account.go
announcement_read.go
announcement.go
api_key.go
auth_identity_channel.go
auth_identity_schema_test.go
auth_identity.go
batch_image_event.go
batch_image_item.go
batch_image_job.go
channel_monitor_daily_rollup.go
channel_monitor_history.go
channel_monitor_request_template.go
channel_monitor.go
composite_model_route.go
error_passthrough_rule.go
group.go
idempotency_record.go
identity_adoption_decision.go
mixins/
soft_delete.go
time.go
payment_audit_log.go
payment_order.go
payment_provider_instance.go
pending_auth_session.go
promo_code_usage.go
promo_code.go
proxy.go
redeem_code.go
security_secret.go
setting.go
subscription_plan.go
tls_fingerprint_profile.go
usage_cleanup_task.go
usage_log.go
user_allowed_group.go
user_attribute_definition.go
user_attribute_value.go
user_platform_quota.go
user_subscription.go
user.go
securitysecret/
securitysecret_create.go
securitysecret_delete.go
securitysecret_query.go
securitysecret_update.go
securitysecret.go
securitysecret.go
where.go
setting/
setting_create.go
setting_delete.go
setting_query.go
setting_update.go
setting.go
setting.go
where.go
subscriptionplan/
subscriptionplan_create.go
subscriptionplan_delete.go
subscriptionplan_query.go
subscriptionplan_update.go
subscriptionplan.go
subscriptionplan.go
where.go
tlsfingerprintprofile/
tlsfingerprintprofile_create.go
tlsfingerprintprofile_delete.go
tlsfingerprintprofile_query.go
tlsfingerprintprofile_update.go
tlsfingerprintprofile.go
tlsfingerprintprofile.go
where.go
tx_context.go
tx.go
usagecleanuptask/
usagecleanuptask_create.go
usagecleanuptask_delete.go
usagecleanuptask_query.go
usagecleanuptask_update.go
usagecleanuptask.go
usagecleanuptask.go
where.go
usagelog/
usagelog_create.go
usagelog_delete.go
usagelog_query.go
usagelog_update.go
usagelog.go
usagelog.go
where.go
user/
user_create.go
user_delete.go
... 1600 moreShowing a partial view of a very large repo.
FAQ
sub2api is a Claude Code plugin with 1 hand-picked skill for development work, indexed on Flowy. Install it with the command on its page. It includes sub2api-admin. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.