API Documentation

Use your API key to generate Python code from prompts. Rate limit: 5,000/month. IP lock enabled.

Endpoint

POST https://isomorfo.ai/api/generate

Required Headers

Authorization: Bearer sk_early_xxxxxxxxxxxxxxxx
Content-Type: application/json

curl Example

curl -X POST https://isomorfo.ai/api/generate \
  -H "Authorization: Bearer YOUR_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Write a Python function that validates an email"
  }'

Python Usage (recommended)

import requests

API_KEY = "sk_early_yourkey"
URL = "https://isomorfo.ai/api/generate"

def generate_code(prompt: str) -> str:
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }
    data = {"prompt": prompt}

    response = requests.post(URL, headers=headers, json=data)

    if response.status_code == 200:
        return response.json()["result"]
    else:
        return f"Error {response.status_code}: {response.json().get('error', 'Unknown')}"

# Example
print(generate_code("Create a function that reverses a string"))

pip install requests

Expected Response

{
  "result": "def reverse_string(s: str) -> str:\n    return s[::-1]"
}

Prompt Concatenation (Iterative)

The model supports conversation memory. Each prompt is concatenated to the previous history, enabling iterations on the same code.

import requests

API_KEY = "sk_early_yourkey"
URL = "https://isomorfo.ai/api/generate"

class IsomorfoClient:
    """Client with history for prompt concatenation"""

    def __init__(self, api_key: str, user_id: str = "default"):
        self.api_key = api_key
        self.user_id = user_id
        self.history = []

    def generate(self, prompt: str, use_history: bool = True) -> str:
        """Generate code with history context"""
        headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }

        data = {
            "prompt": prompt,
            "user_id": self.user_id,
            "use_history": use_history
        }

        response = requests.post(URL, headers=headers, json=data)

        if response.status_code == 200:
            result = response.json()["result"]
            if use_history:
                self.history.append({"prompt": prompt, "response": result})
            return result
        else:
            return f"Error: {response.json().get('error', 'Unknown')}"

    def clear_history(self):
        """Clear local history"""
        self.history = []

# ========== ITERATIVE USAGE EXAMPLE ==========
client = IsomorfoClient(API_KEY, user_id="my_project_123")

# Iteration 1: Create base function
code1 = client.generate("Create a User class with name and email")
print("V1:", code1)

# Iteration 2: Model remembers previous class
code2 = client.generate("Add a validate_email method to the class")
print("V2:", code2)

# Iteration 3: Still remembers all context
code3 = client.generate("Add a __str__ method that displays the data")
print("V3:", code3)

Multiple Generation Functions

Implement different generation strategies based on your use case:

import requests
from typing import Optional, List

API_KEY = "sk_early_yourkey"
URL = "https://isomorfo.ai/api/generate"
PROMPT_SEP = "\n\n###\n\n"

class IsomorfoMultiGen:
    """Multiple code generation modes"""

    def __init__(self, api_key: str):
        self.api_key = api_key
        self.sessions = {}  # History per session

    def _call_api(self, prompt: str, user_id: str = "default") -> str:
        """Base API call"""
        headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }
        data = {"prompt": prompt, "user_id": user_id}
        response = requests.post(URL, headers=headers, json=data)
        return response.json().get("result", "Error")

    # ========== MODE 1: SIMPLE GENERATION ==========
    def generate_single(self, prompt: str) -> str:
        """No history - each call is independent"""
        return self._call_api(prompt)

    # ========== MODE 2: SESSION GENERATION ==========
    def generate_with_session(self, prompt: str, session_id: str) -> str:
        """Maintains history per session"""
        if session_id not in self.sessions:
            self.sessions[session_id] = []

        # Concatenate history
        history = PROMPT_SEP.join(self.sessions[session_id])
        full_prompt = f"{history}{PROMPT_SEP}{prompt}" if history else prompt

        result = self._call_api(full_prompt, user_id=session_id)
        self.sessions[session_id].append(f"{prompt}{PROMPT_SEP}{result}")

        return result

    # ========== MODE 3: CHAIN GENERATION ==========
    def generate_chain(self, prompts: List[str], session_id: str = "chain") -> List[str]:
        """Execute multiple prompts in sequence, each sees the previous"""
        results = []
        for prompt in prompts:
            result = self.generate_with_session(prompt, session_id)
            results.append(result)
        return results

    # ========== MODE 4: ITERATIVE REFINEMENT ==========
    def refine(self, initial_prompt: str, refinements: List[str],
               session_id: str = "refine") -> str:
        """Generate initial code and refine iteratively"""
        # Clear session
        self.sessions[session_id] = []

        # Base code
        result = self.generate_with_session(initial_prompt, session_id)

        # Apply refinements
        for refinement in refinements:
            result = self.generate_with_session(refinement, session_id)

        return result

    # ========== MODE 5: SESSION FORK ==========
    def fork_session(self, source_id: str, new_id: str) -> None:
        """Copy history from one session to another (branching)"""
        if source_id in self.sessions:
            self.sessions[new_id] = self.sessions[source_id].copy()

    def clear_session(self, session_id: str) -> None:
        """Clear a specific session"""
        if session_id in self.sessions:
            del self.sessions[session_id]


# ========== USAGE EXAMPLES ==========
gen = IsomorfoMultiGen(API_KEY)

# MODE 1: Simple (no memory)
print(gen.generate_single("fibonacci function"))

# MODE 2: With session (memory per project)
print(gen.generate_with_session("Product class with price", "ecommerce"))
print(gen.generate_with_session("add apply_discount method", "ecommerce"))

# MODE 3: Prompt chain
results = gen.generate_chain([
    "create Calculator class",
    "add add method",
    "add subtract method",
    "add operation history"
], session_id="calc")

# MODE 4: Iterative refinement
final = gen.refine(
    "Basic REST API with Flask",
    [
        "add JWT authentication",
        "add input validation",
        "add error handling",
        "add logging"
    ]
)

# MODE 5: Branching (fork)
gen.fork_session("ecommerce", "ecommerce_v2")
print(gen.generate_with_session("add shopping cart", "ecommerce_v2"))

Concatenation Flow

┌─────────────────────────────────────────────────────────────┐
│                    CONCATENATION FLOW                        │
└─────────────────────────────────────────────────────────────┘

  Prompt 1          Prompt 2              Prompt 3
     │                  │                     │
     ▼                  ▼                     ▼
┌─────────┐      ┌───────────────┐    ┌─────────────────────┐
│ "User   │      │ history +     │    │ history +           │
│ class"  │ ───► │ "add method"  │───►│ "add validation"    │
└─────────┘      └───────────────┘    └─────────────────────┘
     │                  │                     │
     ▼                  ▼                     ▼
┌─────────┐      ┌───────────────┐    ┌─────────────────────┐
│ class   │      │ class User    │    │ class User:         │
│ User:   │      │   + validate  │    │   + method          │
│   ...   │      │   method()    │    │   + validation      │
└─────────┘      └───────────────┘    └─────────────────────┘

SEPARATOR: "\n\n###\n\n"

SAVED HISTORY:
prompt1 ### response1 ### prompt2 ### response2 ### ...

SLIDING WINDOW:
- Maximum ~5000 tokens of history
- Oldest prompts are automatically discarded

API Parameters

ParameterTypeDefaultDescription
promptstringrequiredThe generation prompt
user_idstring"default"Unique ID to maintain separate history
use_historybooleantrueWhether to concatenate previous history
clear_historybooleanfalseClear history before generating