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/generateRequired Headers
Authorization: Bearer sk_early_xxxxxxxxxxxxxxxx
Content-Type: application/jsoncurl 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 discardedAPI Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| prompt | string | required | The generation prompt |
| user_id | string | "default" | Unique ID to maintain separate history |
| use_history | boolean | true | Whether to concatenate previous history |
| clear_history | boolean | false | Clear history before generating |