Skip to main content

Quickstart

Get started with Bizora in under 5 minutes.

Prerequisites​

Step 1: Get Your API Key​

  1. Log in to https://platform.bizora.ai
  2. Navigate to API Keys section
  3. Click Create API Key
  4. Copy and save your key securely

Choose an Integration Path​

Bizora supports several integration patterns, depending on where you want tax research to run:

  • OpenAI client SDKs: Use the standard OpenAI Python or JavaScript client with Bizora's base URL. This is the fastest path for application backends and services that already use OpenAI-compatible chat completions.
  • Direct HTTP: Call POST /chat/completions with curl, fetch, or any HTTP client. This is useful for lightweight integrations, testing, and platforms where installing an SDK is not preferred.
  • MCP clients: Connect Claude, ChatGPT, Cursor, Kiro, or another MCP-compatible client to Bizora's MCP server. This is recommended when you want an agent or IDE assistant to call Bizora tax research tools directly.

This Quickstart focuses on OpenAI-compatible SDK and HTTP usage. For MCP setup, see MCP Server.

Step 2: Install the OpenAI Client SDK​

Python​

pip install openai

JavaScript/TypeScript​

npm install openai
# or
yarn add openai

Step 3: Make Your First Request​

Ask a tax question and get streaming responses in real-time:

import openai

# Initialize client with your API key
client = openai.OpenAI(
api_key="sk_live_YOUR_API_KEY",
base_url="https://api-bizora.ai"
)

# Ask a tax question with streaming
stream = client.chat.completions.create(
model="bizora-1.0",
messages=[{"role": "human", "content": "What is section 179?"}],
stream=True
)

# Print the answer as it arrives
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)

Step 4: Enable Streaming​

Get responses in real-time as they're generated:

# Add stream=True to get responses in real-time
stream = client.chat.completions.create(
model="bizora-1.0",
messages=[{"role": "human", "content": "What is section 179?"}],
stream=True
)

# Print each chunk as it arrives
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)

Step 5: Handle Custom Messages​

When streaming, the API sends additional information like research steps, sources, and suggestions:

# Stream responses and get custom messages
stream = client.chat.completions.create(
model="bizora-1.0",
messages=[{"role": "human", "content": "What is section 179?"}],
stream=True
)

for chunk in stream:
# AI content - the actual answer
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)

# Custom messages - steps, sources, suggestions
elif hasattr(chunk, 'custom_data'):
msg_type = chunk.custom_data.get('type')

if msg_type == 'step_message':
# Shows what the AI is doing
print(f"\n🔄 {chunk.custom_data.get('title')}")

elif msg_type == 'source_message':
# Shows which documents were referenced
sources = chunk.custom_data.get('content', [])
print(f"\n📚 {len(sources)} sources found")

elif msg_type == 'suggestions':
# Follow-up question suggestions
suggestions = chunk.custom_data.get('suggestions', [])
print(f"\n💡 {len(suggestions)} suggested questions")

Common Parameters​

ParameterTypeRequiredDescription
modelstringYesMust be "bizora-1.0"
messagesarrayYesArray of message objects
streambooleanNoEnable streaming (default: false)
askModestringNoUse tax_research_fast_research, tax_research_deep_research, audit_research, or auto for backend route selection
allowedAskModesarrayNoConstrain auto-routing when askMode is auto
ZeroDataRetentionbooleanNoDisabled by default. Pass true only if you require zero data retention.

Prefer canonical askMode values for new integrations. Use tax_research_deep_research for complex tax questions that need deeper, multi-step research, and audit_research for complex financial and accounting analysis.

Multi-Turn Conversations​

Build context by including previous messages. Use "human" for user messages and "ai" for AI responses:

# Include conversation history for context
messages = [
{"role": "human", "content": "What is section 179?"},
{"role": "ai", "content": "Section 179 allows businesses to deduct the full purchase price of qualifying equipment..."},
{"role": "human", "content": "What are the dollar limits?"}
]

response = client.chat.completions.create(
model="bizora-1.0",
messages=messages
)

print(response.choices[0].message.content)

Next Steps​

Need Help?​