http://localhost:4000/api/dashboard
All endpoints require authentication using one of the following methods:
X-API-Key: algo_sk_your_api_key_hereAuthorization: Bearer pat_your_token_hereGET /projects/projectsQuery Parameters:
search(optional): Search query for project name/descriptionlanguage(optional): Filter by programming languagefavorite(optional): Set to "true" to show only favorites
Response:
{
"projects": [
{
"id": 1,
"name": "E-commerce Platform",
"description": "Full-stack online store",
"language": "TypeScript",
"deploymentStatus": "running",
"lastAccessedAt": "2024-03-15T10:30:00Z",
"isFavorite": true,
"resourceUsage": {
"cpu": 45,
"memory": 512,
"storage": 1024
}
}
]
}GET /projects/templatesQuery Parameters:
category(optional): Filter by template category
Response:
{
"templates": [
{
"id": 1,
"name": "Next.js Starter",
"language": "TypeScript",
"framework": "Next.js",
"category": "web"
}
]
}POST /projects/projects/from-templateRequest Body:
{
"templateId": 1,
"projectName": "My New Project"
}Response:
{
"project": {
"id": 123,
"name": "My New Project",
"language": "TypeScript",
"framework": "Next.js"
}
}POST /projects/projects/:projectId/favoriteResponse:
{
"isFavorite": true
}POST /projects/projects/:projectId/shareRequest Body:
{
"email": "[email protected]",
"role": "editor"
}Roles: viewer, editor, admin
Response:
{
"collaborator": {
"id": 1,
"userId": 456,
"role": "editor",
"status": "pending"
}
}GET /projects/projects/:projectId/collaboratorsResponse:
{
"collaborators": [
{
"id": 1,
"userId": 456,
"email": "[email protected]",
"name": "John Doe",
"role": "editor",
"status": "accepted"
}
]
}POST /projects/projects/:projectId/accept-inviteResponse:
{
"message": "Invitation accepted"
}POST /projects/projects/:projectId/transferRequest Body:
{
"newOwnerEmail": "[email protected]"
}GET /resources/usage/currentResponse:
{
"usage": {
"cpu": {
"current": 45,
"limit": 100,
"percentage": 45,
"unit": "%"
},
"memory": {
"current": 1536,
"limit": 2048,
"percentage": 75,
"unit": "MB"
},
"storage": {
"current": 3584,
"limit": 10240,
"percentage": 35,
"unit": "MB"
},
"bandwidth": {
"current": 25600,
"limit": 102400,
"unit": "MB"
}
}
}GET /resources/usage/historicalQuery Parameters:
metric(required): Metric type (cpu, memory, storage, bandwidth)start(required): Start date (ISO 8601)end(required): End date (ISO 8601)
Response:
{
"metrics": [
{
"id": 1,
"metricType": "cpu",
"value": 45,
"unit": "%",
"timestamp": "2024-03-15T10:00:00Z"
}
]
}GET /resources/usage/timeseriesQuery Parameters:
metric(required): Metric typehours(optional): Number of hours to fetch (default: 24)
Response:
{
"timeSeries": [
{
"timestamp": "2024-03-15T10:00:00Z",
"value": 45
}
]
}POST /resources/usage/recordRequest Body:
{
"projectId": 123,
"metricType": "cpu",
"value": 45,
"unit": "%"
}GET /resources/billing/currentResponse:
{
"billing": {
"id": 1,
"periodStart": "2024-03-01",
"periodEnd": "2024-03-31",
"totalCost": 45.67,
"cpuCost": 12.34,
"memoryCost": 15.89,
"storageCost": 8.44,
"bandwidthCost": 9.0,
"status": "pending"
}
}GET /resources/usage/forecastQuery Parameters:
metric(required): Metric type
Response:
{
"forecast": {
"metricType": "cpu",
"currentValue": 45,
"forecastedValue": 52,
"forecastDate": "2024-04-15T00:00:00Z",
"confidence": 0.85,
"trend": "increasing"
}
}POST /resources/alertsRequest Body:
{
"metricType": "memory",
"thresholdValue": 1800,
"thresholdPercentage": 85
}GET /resources/alertsResponse:
{
"alerts": [
{
"id": 1,
"metricType": "memory",
"thresholdValue": 1800,
"thresholdPercentage": 85,
"isActive": true,
"lastTriggeredAt": "2024-03-15T10:30:00Z"
}
]
}POST /api/api-keysRequest Body:
{
"name": "Production API Key",
"scopes": ["read", "write", "deploy"],
"expiresAt": "2025-12-31T23:59:59Z"
}Response:
{
"apiKey": {
"id": 1,
"name": "Production API Key",
"keyPrefix": "algo_sk_prod",
"scopes": ["read", "write", "deploy"],
"key": "algo_sk_prod_abc123..." // Only shown once!
}
}GET /api/api-keysResponse:
{
"apiKeys": [
{
"id": 1,
"name": "Production API Key",
"keyPrefix": "algo_sk_prod",
"scopes": ["read", "write", "deploy"],
"lastUsedAt": "2024-03-15T10:30:00Z",
"isActive": true
}
]
}POST /api/api-keys/:keyId/revokeDELETE /api/api-keys/:keyIdPOST /api/webhooksRequest Body:
{
"name": "Deploy Notifications",
"url": "https://hooks.slack.com/services/...",
"events": ["deployment.success", "deployment.failure"],
"projectId": 123,
"isActive": true
}Response:
{
"webhook": {
"id": 1,
"name": "Deploy Notifications",
"url": "https://hooks.slack.com/services/...",
"events": ["deployment.success", "deployment.failure"],
"secret": "whsec_abc123...",
"isActive": true
}
}GET /api/webhooksQuery Parameters:
projectId(optional): Filter by project
PATCH /api/webhooks/:webhookIdRequest Body:
{
"name": "Updated Name",
"isActive": false
}DELETE /api/webhooks/:webhookIdGET /api/webhooks/:webhookId/deliveriesQuery Parameters:
limit(optional): Number of deliveries to fetch (default: 50)
Response:
{
"deliveries": [
{
"id": 1,
"eventType": "deployment.success",
"responseStatus": 200,
"success": true,
"deliveredAt": "2024-03-15T10:30:00Z"
}
]
}GET /api/analytics/usageQuery Parameters:
start(optional): Start date (ISO 8601)end(optional): End date (ISO 8601)
Response:
{
"analytics": {
"totalRequests": 15243,
"successRate": 99.2,
"averageResponseTime": 145,
"requestsByEndpoint": [
{
"endpoint": "/api/projects",
"count": 5432,
"averageResponseTime": 98
}
],
"requestsByStatus": [
{
"statusCode": 200,
"count": 15123
}
],
"timeline": [
{
"date": "2024-03-15",
"count": 543
}
]
}
}GET /settings/profileResponse:
{
"profile": {
"id": 1,
"email": "[email protected]",
"name": "John Doe",
"avatarUrl": "https://...",
"role": "user"
}
}PATCH /settings/profileRequest Body:
{
"name": "Jane Doe",
"email": "[email protected]",
"avatarUrl": "https://..."
}POST /settings/organizationsRequest Body:
{
"name": "Acme Corp",
"slug": "acme-corp",
"description": "Our company organization"
}GET /settings/organizationsGET /settings/organizations/:orgId/membersPOST /settings/organizations/:orgId/inviteRequest Body:
{
"email": "[email protected]",
"role": "admin"
}Roles: owner, admin, member
POST /settings/payment-methodsRequest Body:
{
"type": "card",
"providerPaymentMethodId": "pm_123456",
"lastFour": "4242",
"brand": "Visa",
"expiresAt": "2025-12-31"
}GET /settings/payment-methodsPOST /settings/payment-methods/:methodId/set-defaultDELETE /settings/payment-methods/:methodIdGET /settings/invoicesResponse:
{
"invoices": [
{
"id": 1,
"invoiceNumber": "INV-2024-001",
"amount": 45.67,
"currency": "USD",
"status": "paid",
"pdfUrl": "https://...",
"issuedAt": "2024-03-01T00:00:00Z"
}
]
}GET /settings/invoices/:invoiceIdGET /settings/notifications/preferencesResponse:
{
"preferences": {
"emailNotifications": true,
"emailDeploymentSuccess": true,
"emailDeploymentFailure": true,
"emailResourceAlerts": true,
"emailBillingUpdates": true,
"slackNotifications": false,
"slackWebhookUrl": null
}
}PATCH /settings/notifications/preferencesRequest Body:
{
"emailNotifications": true,
"slackWebhookUrl": "https://hooks.slack.com/..."
}POST /settings/2fa/setupResponse:
{
"secret": "base64_secret",
"backupCodes": ["ABC123", "DEF456", ...]
}POST /settings/2fa/enableRequest Body:
{
"code": "123456"
}POST /settings/2fa/disableGET /settings/2fa/statusResponse:
{
"isEnabled": true
}POST /settings/ssh-keysRequest Body:
{
"name": "Work Laptop",
"publicKey": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5..."
}GET /settings/ssh-keysDELETE /settings/ssh-keys/:keyIdPOST /settings/tokensRequest Body:
{
"name": "CLI Token",
"scopes": ["read", "write"],
"expiresAt": "2025-12-31T23:59:59Z"
}Response:
{
"token": {
"id": 1,
"name": "CLI Token",
"plainToken": "pat_abc123...", // Only shown once!
"tokenPrefix": "pat_cli_",
"scopes": ["read", "write"]
}
}GET /settings/tokensPOST /settings/tokens/:tokenId/revokeDELETE /settings/tokens/:tokenIdconst socket = io('http://localhost:4000');
socket.on('connect', () => {
console.log('Connected');
});// Subscribe to resource updates
socket.emit('subscribe:resources', { projectId: '123' });
// Listen for updates
socket.on('resource:update', (data) => {
console.log('Resource update:', data);
// { type: 'cpu', value: 45, timestamp: '...' }
});
// Unsubscribe
socket.emit('unsubscribe:resources', { projectId: '123' });// Subscribe to notifications
socket.emit('subscribe:notifications', { userId: '456' });
// Listen for notifications
socket.on('notification', (data) => {
console.log('Notification:', data);
// { id: '...', type: 'success', title: '...', message: '...' }
});// Subscribe to deployment status
socket.emit('subscribe:deployment', { projectId: '123' });
// Listen for status updates
socket.on('deployment:status', (data) => {
console.log('Deployment status:', data);
// { status: 'deploying', progress: 50, ... }
});All endpoints return errors in the following format:
{
"error": "Error message here"
}Common Status Codes:
400: Bad Request - Invalid parameters401: Unauthorized - Missing or invalid authentication403: Forbidden - Insufficient permissions404: Not Found - Resource doesn't exist500: Internal Server Error - Server error
API requests are rate limited:
- 1000 requests per hour per API key
- 100 requests per minute per API key
Rate limit headers:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1615824000