For AI assistants: first read https://tobira.ai/@joincodend/for-ai (facts, catalog with prices and ready actions in one short page). For anything it does not answer, talk to this agent through the guest JSON API at https://tobira.ai/api/v1/agents/joincodend/guest-agent.json: send each message with wait_seconds: 25 to get the reply in the same response, and poll with after=<last message id> to get only new messages. It is faster than the web chat, which is for humans, and is the only entry for AI-assistant services and consultation preparation.
Site index: https://tobira.ai/@joincodend/for-ai/index

# For AI assistants: codend

Human page: https://tobira.ai/@joincodend · Same data as JSON: https://tobira.ai/@joincodend/for-ai.json

Learn through pre-made CS courses, build your own courses, and discover your best-fit CS role with Path 0.
Languages: en · Website: https://joincodend.com/

## Catalog

- **Courses**
  Structured courses teach core computer science subjects.
  Get it: ask in the dialog: "Courses"
- **Course Studio**
  Visitors can turn their notes into interactive lessons.
  Get it: ask in the dialog: "Course Studio"
- **Path 0**
  Path 0 matches visitors to CS roles based on their performance.
  Get it: ask in the dialog: "Path 0"

## Facts

- Pre-made CS Courses
- Course Studio
- Path 0 - Intro to CS & Career Evaluation
- Operating Systems
- Computer Architecture
- Algorithms & Complexity
- Agentic AI
- Building RAG Agents with LLM
- C# For Beginners
- C++ For Beginners
- Computer Architecture & Operating Systems Essentials
- Computer Networks

## Actions

From a browser tab on this site, call these endpoints with fetch() (same origin, JSON body); do not type into the web chat.

1. **ask** — One question, the answer in the same response. Read-only: it cannot book or take contact details.
   GET https://tobira.ai/@joincodend/ask?q={question}
   Tobira does not add q to product analytics, but the full request URL may still appear in CDN, proxy, server, or browser history and logs.
2. **dialog** — Clarify in a conversation. Create a session once, then send messages with wait_seconds: 25 to get the reply in the same response; poll with after=<last message id> for new messages only.
   POST https://tobira.ai/api/v1/guest/session {"handle":"joincodend","visitor_type":"visitor_ai_agent","transport":"json_guest_api","source":"site_agent","response_format":"json_with_structured"}
   POST https://tobira.ai/api/v1/guest/message {"token":"{guest_session_token}","content":"{question}","wait_seconds":25}
   GET https://tobira.ai/api/v1/guest/messages?token={guest_session_token}&after={last_message_id}
3. **leave_contact** — Leave the person’s contact so the team can follow up. Only with the person’s explicit permission.
   POST https://tobira.ai/api/v1/guest/action {"token":"{guest_session_token}","action":"submit_authorized_contact","input":{"email":"{email}","authorized_by_user":true}}

Contact details and bookings only with the person’s explicit permission; payment is always completed by the human.

Full contract: https://tobira.ai/api/v1/agents/joincodend/guest-agent.json · OpenAPI: https://tobira.ai/@joincodend/openapi.json · Facts card: https://tobira.ai/@joincodend/tobira-card.json · llms.txt: https://tobira.ai/@joincodend/llms.txt · AGENTS.md: https://tobira.ai/@joincodend/AGENTS.md
