Skip to main content

Base URLs

  • Admin API (REST): https://api.metabind.ai/app/v1
  • Client API (REST): https://api.metabind.ai/api/v1
  • GraphQL API: https://api.metabind.ai/graphql
  • CDN: https://cdn.metabind.ai

URL Structure

REST API Path Pattern

All REST API endpoints follow this pattern:
https://api.metabind.ai/app/v1/organizations/{organizationId}/projects/{projectId}/[resource]
Example paths:
ResourcePath
List components/app/v1/organizations/org123/projects/proj456/components
Get content/app/v1/organizations/org123/projects/proj456/content/cont789
Upload asset/app/v1/organizations/org123/projects/proj456/assets
Create package/app/v1/organizations/org123/projects/proj456/packages

CDN Asset URLs

Assets are served from the CDN with this pattern:
https://cdn.metabind.ai/{organizationId}/{projectId}/assets/{assetId}/{filename}

API Versioning

The API uses semantic versioning in the URL path (e.g., /app/v1/).
VersionStatusDescription
v1CurrentInitial release with core functionality

Versioning Policy

  • Breaking changes are introduced in new major versions (v2, v3, etc.)
  • Backward-compatible changes may be added to existing versions
  • Deprecated features will be announced with a migration timeline
  • Old versions will be supported for at least 12 months after a new major version

Response Format

All successful responses follow a consistent format:
{
  "data": {
    // Response data
  },
  "meta": {
    "requestId": "unique-request-identifier",
    "timestamp": "2024-03-21T10:00:00Z"
  }
}

Paginated Responses

List endpoints use one of two pagination styles:

Cursor-Based Pagination

Used by content-heavy endpoints (content, components, assets, packages):
{
  "data": [
    { "id": "item1", "name": "First Item" },
    { "id": "item2", "name": "Second Item" }
  ],
  "pagination": {
    "lastKey": "encoded-pagination-key"
  }
}
ParameterTypeDefaultDescription
limitnumber10Items per page (max: 100)
lastKeystring-Cursor from previous response for next page

Offset-Based Pagination

Used by organizational endpoints (tags, api-keys):
{
  "data": [
    { "id": "user1", "name": "Jane Doe" },
    { "id": "user2", "name": "John Smith" }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 45
  }
}
ParameterTypeDefaultDescription
pagenumber1Page number (1-indexed)
limitnumber20Items per page (max: 100)

Request Headers

Required Headers

Admin API (/app/v1/...):
Authorization: Bearer YOUR_JWT
Content-Type: application/json
Client API (/api/v1/...):
x-api-key: YOUR_API_KEY
Content-Type: application/json

Optional Headers

HeaderDescription
Accept-LanguagePreferred response language
X-Request-IDCustom request identifier for tracing

Configuring Your Application

Environment Variables

METABIND_API_URL=https://api.metabind.ai/app/v1
METABIND_CDN_URL=https://cdn.metabind.ai

JavaScript Example

const config = {
  apiUrl: process.env.METABIND_API_URL || 'https://api.metabind.ai/app/v1',
  cdnUrl: process.env.METABIND_CDN_URL || 'https://cdn.metabind.ai',
  jwt: process.env.METABIND_JWT
};

class MetabindClient {
  constructor(config) {
    this.apiUrl = config.apiUrl;
    this.cdnUrl = config.cdnUrl;
    this.jwt = config.jwt;
  }

  async getContent(orgId, projectId, contentId) {
    const url = `${this.apiUrl}/organizations/${orgId}/projects/${projectId}/content/${contentId}`;
    const response = await fetch(url, {
      headers: {
        'Authorization': `Bearer ${this.jwt}`,
        'Content-Type': 'application/json'
      }
    });
    return response.json();
  }
}

Health Check

GET https://api.metabind.ai/health
Response:
{
  "status": "healthy",
  "version": "1.0.0",
  "timestamp": "2024-03-21T10:00:00Z"
}