ModelStudio Logo
ModelStudio

API

Integrate models via API

Use the ModelStudio API to integrate your fine-tuned models into applications.

Authentication

ModelStudio uses bearer tokens for API authentication. These tokens are created within ModelStudio itself.

Creating API Keys

  1. Navigate to Organizational Settings → API Keys
  2. Click Create API Key
  3. Give it a descriptive name
  4. Copy and securely store the token

Security: API keys are shown only once. Store them securely and never commit them to version control.

Using API Keys

Include your API key in the Authorization header:

Authorization: Bearer YOUR_API_KEY

Base URL

https://api.modelstudio.app

API Endpoints

Create Generation Job

POST /api/v1/organizations/<YOUR_ORGANIZATION_ID>/generate

Submit a generation job for processing.

Request Parameters:

{
  "model_id": "your_model_id",
  "messages": [[
    {"role": "user", "content": "Your prompt here"}
  ]],
  "temperature": 0.7,
  "max_tokens": 512
}
  • model_id (required): Your fine-tuned model ID
  • messages (required): Array of conversation arrays for batch processing
  • temperature (optional): 0.0-1.0, controls randomness, default 0.7
  • max_tokens (optional): Maximum response length, default 512

Response:

{
  "job_id": "job_abc123",
  "status": "CREATED",
  "message": "Generation job created successfully"
}

Retrieve Generation Output

GET /api/v1/organizations/<YOUR_ORGANIZATION_ID>/generate/<JOB_ID>

Poll for job completion and retrieve results.

Response:

{
  "job_id": "job_abc123",
  "job_status": "completed",
  "total_tasks": 1,
  "completed_tasks": 1,
  "results": [
    {
      "task_index": 0,
      "status": "completed",
      "result": "Generated text response",
      "error": null
    }
  ]
}

Code Examples

Python

import requests

API_KEY = "your_api_key"
ORG_ID = "your_org_id"
MODEL_ID = "your_model_id"

# Create generation job
response = requests.post(
    f"https://api.modelstudio.app/api/v1/organizations/{ORG_ID}/generate",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "model_id": MODEL_ID,
        "messages": [[
            {"role": "user", "content": "Hello, how are you?"}
        ]],
        "temperature": 0.7,
        "max_tokens": 512
    }
)

job_id = response.json()["job_id"]

# Get results
result = requests.get(
    f"https://api.modelstudio.app/api/v1/organizations/{ORG_ID}/generate/{job_id}",
    headers={"Authorization": f"Bearer {API_KEY}"}
)

print(result.json())
import requests
import time

API_KEY = "your_api_key"
ORG_ID = "your_org_id"
MODEL_ID = "your_model_id"

def generate_and_wait(messages, max_wait=60):
    # Submit job
    response = requests.post(
        f"https://api.modelstudio.app/api/v1/organizations/{ORG_ID}/generate",
        headers={"Authorization": f"Bearer {API_KEY}"},
        json={
            "model_id": MODEL_ID,
            "messages": messages,
            "temperature": 0.7,
            "max_tokens": 512
        }
    )

    job_id = response.json()["job_id"]

    # Poll for completion
    start_time = time.time()
    while time.time() - start_time < max_wait:
        result = requests.get(
            f"https://api.modelstudio.app/api/v1/organizations/{ORG_ID}/generate/{job_id}",
            headers={"Authorization": f"Bearer {API_KEY}"}
        )

        data = result.json()
        if data["job_status"] == "completed":
            return data["results"]

        time.sleep(2)

    raise TimeoutError("Job did not complete in time")

# Usage
messages = [[{"role": "user", "content": "Hello!"}]]
results = generate_and_wait(messages)
print(results[0]["result"])

JavaScript

const API_KEY = "your_api_key";
const ORG_ID = "your_org_id";
const MODEL_ID = "your_model_id";

// Create generation job
const response = await fetch(
  `https://api.modelstudio.app/api/v1/organizations/${ORG_ID}/generate`,
  {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${API_KEY}`,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      model_id: MODEL_ID,
      messages: [[
        { role: "user", content: "Hello, how are you?" }
      ]],
      temperature: 0.7,
      max_tokens: 512
    })
  }
);

const { job_id } = await response.json();

// Poll for results
const pollResults = async (jobId, maxAttempts = 30) => {
  for (let i = 0; i < maxAttempts; i++) {
    const result = await fetch(
      `https://api.modelstudio.app/api/v1/organizations/${ORG_ID}/generate/${jobId}`,
      { headers: { "Authorization": `Bearer ${API_KEY}` } }
    );

    const data = await result.json();
    if (data.job_status === "completed") {
      return data.results;
    }

    await new Promise(resolve => setTimeout(resolve, 2000));
  }
  throw new Error("Timeout");
};

const results = await pollResults(job_id);
console.log(results[0].result);

cURL

# Create generation job
curl -X POST https://api.modelstudio.app/api/v1/organizations/<ORG_ID>/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model_id": "your_model_id",
    "messages": [[
      {"role": "user", "content": "Hello!"}
    ]],
    "temperature": 0.7,
    "max_tokens": 512
  }'

# Get results
curl https://api.modelstudio.app/api/v1/organizations/<ORG_ID>/generate/<JOB_ID> \
  -H "Authorization: Bearer YOUR_API_KEY"

Batch Processing

Process multiple inputs in a single API call:

{
  "model_id": "your_model_id",
  "messages": [
    [{"role": "user", "content": "First input"}],
    [{"role": "user", "content": "Second input"}],
    [{"role": "user", "content": "Third input"}]
  ]
}

Results are returned in the same order.

Multi-Turn Conversations

Include conversation history:

{
  "model_id": "your_model_id",
  "messages": [[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "What is AI?"},
    {"role": "assistant", "content": "AI stands for..."},
    {"role": "user", "content": "Tell me more"}
  ]]
}

Vision Models

For vision models, include images as base64:

{
  "model_id": "your_vision_model_id",
  "messages": [[
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "What's in this image?"},
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
          }
        }
      ]
    }
  ]]
}

Error Handling

Common HTTP status codes:

CodeMeaning
401Invalid or missing API key
403Insufficient permissions
404Model or job not found
400Invalid request format
500Server error

Code Generation in Web UI

ModelStudio provides ready-to-use code examples directly in the web interface:

  1. Navigate to the Models section
  2. Select your fine-tuned model
  3. Click the code icon
  4. Copy the generated code for your preferred language

Best Practices

Security

  • Store API keys securely (environment variables, secrets management)
  • Never expose keys in client-side code
  • Rotate keys periodically

Performance

  • Use batch processing for multiple inputs
  • Implement exponential backoff for retries
  • Monitor job completion times

Error Handling

  • Implement retry logic
  • Validate inputs before submission
  • Log errors for debugging

Next Steps

  • Test your model in the web interface first
  • Start with small-scale API testing
  • Monitor performance and errors
  • Scale to production volumes

Support: For API issues or questions, contact manufactAI through the platform.