> ## Documentation Index
> Fetch the complete documentation index at: https://phidatainc.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Overriding Routes

> Resolve route conflicts between your custom FastAPI app and AgentOS with the on_route_conflict parameter.

When integrating your custom FastAPI application with AgentOS, route conflicts can occur if both your app and AgentOS define the same endpoint paths. For example, both might define a `/health` endpoint or a root `/` route.

AgentOS provides the `on_route_conflict` parameter to control how these conflicts are resolved, allowing you to choose whether your custom routes or AgentOS routes take precedence.

## When to Use

Override routes when you need:

* **Custom health checks**: Replace AgentOS's `/health` endpoint with your own monitoring logic
* **Branded landing pages**: Serve a custom homepage at `/` instead of the default AgentOS interface
* **Custom authentication**: Implement your own auth endpoints that conflict with AgentOS defaults
* **API versioning**: Control which version of an endpoint is exposed
* **Custom error handlers**: Define specialized error handling for specific routes

## Configuration Options

The `on_route_conflict` parameter accepts three values:

| Option                       | Custom Routes | AgentOS Routes             | On Conflict         |
| ---------------------------- | ------------- | -------------------------- | ------------------- |
| `preserve_base_app`          | ✓ Preserved   | ✗ Skipped (conflicts only) | Logs at debug level |
| `preserve_agentos` (default) | ✗ Overridden  | ✓ Preserved                | Logs a warning      |
| `error`                      | N/A           | N/A                        | Raises `ValueError` |

<Note>
  Non-conflicting routes from both your app and AgentOS are always included in the two preserve modes.
</Note>

## Example

The example below uses `on_route_conflict="preserve_base_app"` to preserve custom routes for the home page and health endpoint.

```python override_routes.py theme={null}
from agno.agent import Agent
from agno.db.postgres import PostgresDb
from agno.models.anthropic import Claude
from agno.os import AgentOS
from agno.tools.hackernews import HackerNewsTools
from fastapi import FastAPI

# Set up the database
db = PostgresDb(db_url="postgresql+psycopg://ai:ai@localhost:5532/ai")

web_research_agent = Agent(
    id="web-research-agent",
    name="Web Research Agent",
    model=Claude(id="claude-sonnet-4-5"),
    db=db,
    tools=[HackerNewsTools()],
    add_history_to_context=True,
    num_history_runs=3,
    add_datetime_to_context=True,
    markdown=True,
)

# Create custom FastAPI app
app: FastAPI = FastAPI(
    title="Custom FastAPI App",
    version="1.0.0",
)


# Custom landing page (conflicts with AgentOS home route)
@app.get("/")
async def get_custom_home():
    return {
        "message": "Custom FastAPI App",
        "note": "Using on_route_conflict=\"preserve_base_app\" to preserve custom routes",
    }


# Custom health endpoint (conflicts with AgentOS health route)
@app.get("/health")
async def get_custom_health():
    return {"status": "custom_ok", "note": "This is your custom health endpoint"}


# Set up the AgentOS app by passing your FastAPI app
# Use on_route_conflict="preserve_base_app" to preserve your custom routes over AgentOS routes
agent_os = AgentOS(
    description="Example app with route replacement",
    agents=[web_research_agent],
    base_app=app,
    on_route_conflict="preserve_base_app",  # Skip conflicting AgentOS routes, keep your custom routes
)

app = agent_os.get_app()

if __name__ == "__main__":
    """Run the AgentOS application.

    With on_route_conflict="preserve_base_app":
    - Your custom routes are preserved: http://localhost:7777/ and http://localhost:7777/health
    - AgentOS routes are available at other paths: http://localhost:7777/sessions, etc.
    - Conflicting AgentOS routes (GET / and GET /health) are skipped
    - API docs: http://localhost:7777/docs

    Try changing on_route_conflict to "preserve_agentos" to see AgentOS routes override your custom ones.
    """
    agent_os.serve(app="override_routes:app", reload=True)

```
