For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://modelgates.ai/docs/_mcp/server.
Management API Keys
ModelGates provides endpoints to programmatically manage your API keys, enabling key creation and management for applications that need to distribute or rotate keys automatically.
Creating a Management API Key
To use the key management API, you first need to create a Management API key:
- Go to the Management API Keys page
- Click "Create New Key"
- Complete the key creation process
Management keys cannot be used to make API calls to ModelGates's completion endpoints - they are exclusively for administrative operations.
Use Cases
Common scenarios for programmatic key management include:
- SaaS Applications: Automatically create unique API keys for each customer instance
- Key Rotation: Regularly rotate API keys for security compliance
- Usage Monitoring: Track key usage and automatically disable keys that exceed limits (with optional daily/weekly/monthly limit resets)
Example Usage
All key management endpoints are under /api/v1/keys and require a Management API key in the Authorization header.
import { ModelGates } from '@modelgates/sdk'; const modelgates = new ModelGates({ apiKey: 'your-management-key', // Use your Management API key}); // List the most recent 100 API keysconst keys = await modelgates.apiKeys.list(); // You can paginate using the offset parameterconst keysPage2 = await modelgates.apiKeys.list({ offset: 100 }); // Create a new API keyconst newKey = await modelgates.apiKeys.create({ name: 'Customer Instance Key', limit: 1000, // Optional credit limit}); // Get a specific keyconst keyHash = '<YOUR_KEY_HASH>';const key = await modelgates.apiKeys.get(keyHash); // Update a keyconst updatedKey = await modelgates.apiKeys.update(keyHash, { name: 'Updated Key Name', disabled: true, // Optional: Disable the key includeByokInLimit: false, // Optional: control BYOK usage in limit limitReset: 'daily', // Optional: reset limit every day at midnight UTC}); // Delete a keyawait modelgates.apiKeys.delete(keyHash);import requests MANAGEMENT_API_KEY = "your-management-key"BASE_URL = "https://modelgates.ai/api/v1/keys" # List the most recent 100 API keysresponse = requests.get( BASE_URL, headers={ "Authorization": f"Bearer {MANAGEMENT_API_KEY}", "Content-Type": "application/json" }) # You can paginate using the offset parameterresponse = requests.get( f"{BASE_URL}?offset=100", headers={ "Authorization": f"Bearer {MANAGEMENT_API_KEY}", "Content-Type": "application/json" }) # Create a new API keyresponse = requests.post( f"{BASE_URL}/", headers={ "Authorization": f"Bearer {MANAGEMENT_API_KEY}", "Content-Type": "application/json" }, json={ "name": "Customer Instance Key", "limit": 1000 # Optional credit limit }) # Get a specific keykey_hash = "<YOUR_KEY_HASH>"response = requests.get( f"{BASE_URL}/{key_hash}", headers={ "Authorization": f"Bearer {MANAGEMENT_API_KEY}", "Content-Type": "application/json" }) # Update a keyresponse = requests.patch( f"{BASE_URL}/{key_hash}", headers={ "Authorization": f"Bearer {MANAGEMENT_API_KEY}", "Content-Type": "application/json" }, json={ "name": "Updated Key Name", "disabled": True, # Optional: Disable the key "include_byok_in_limit": False, # Optional: control BYOK usage in limit "limit_reset": "daily" # Optional: reset limit every day at midnight UTC }) # Delete a keyresponse = requests.delete( f"{BASE_URL}/{key_hash}", headers={ "Authorization": f"Bearer {MANAGEMENT_API_KEY}", "Content-Type": "application/json" })const MANAGEMENT_API_KEY = 'your-management-key';const BASE_URL = 'https://modelgates.ai/api/v1/keys'; // List the most recent 100 API keysconst listKeys = await fetch(BASE_URL, { headers: { Authorization: `Bearer ${MANAGEMENT_API_KEY}`, 'Content-Type': 'application/json', },}); // You can paginate using the `offset` query parameterconst listKeys = await fetch(`$?offset=100`, { headers: { Authorization: `Bearer ${MANAGEMENT_API_KEY}`, 'Content-Type': 'application/json', },}); // Create a new API keyconst createKey = await fetch(`$`, { method: 'POST', headers: { Authorization: `Bearer ${MANAGEMENT_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ name: 'Customer Instance Key', limit: 1000, // Optional credit limit }),}); // Get a specific keyconst keyHash = '<YOUR_KEY_HASH>';const getKey = await fetch(`$/$`, { headers: { Authorization: `Bearer ${MANAGEMENT_API_KEY}`, 'Content-Type': 'application/json', },}); // Update a keyconst updateKey = await fetch(`$/$`, { method: 'PATCH', headers: { Authorization: `Bearer ${MANAGEMENT_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ name: 'Updated Key Name', disabled: true, // Optional: Disable the key include_byok_in_limit: false, // Optional: control BYOK usage in limit limit_reset: 'daily', // Optional: reset limit every day at midnight UTC }),}); // Delete a keyconst deleteKey = await fetch(`$/$`, { method: 'DELETE', headers: { Authorization: `Bearer ${MANAGEMENT_API_KEY}`, 'Content-Type': 'application/json', },});Response Format
API responses return JSON objects containing key information:
{ "data": [ { "created_at": "2025-02-19T20:52:27.363244+00:00", "updated_at": "2025-02-19T21:24:11.708154+00:00", "hash": "<YOUR_KEY_HASH>", "label": "sk-mg-v1-abc...123", "name": "Customer Key", "disabled": false, "limit": 10, "limit_remaining": 10, "limit_reset": null, "include_byok_in_limit": false, "usage": 0, "usage_daily": 0, "usage_weekly": 0, "usage_monthly": 0, "byok_usage": 0, "byok_usage_daily": 0, "byok_usage_weekly": 0, "byok_usage_monthly": 0 } ]}When creating a new key, the response will include the key string itself. Read more in the API reference.