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

# Get Started

```bash cURL theme={null}
curl --request POST \
  --url https://api.yutori.com/v1/chat/completions \
  --header "Authorization: Bearer <api_key>" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "n2",
    "reasoning_effort": "medium",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "I need to research Yutori pricing, but I am not sure whether to search the web or go straight to their site. Decide which is better from this screen, explain your choice, then take the first step."
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://docs.yutori.com/assets/google_homepage_2024.jpg"
            }
          }
        ]
      }
    ]
  }'
```

```python Python theme={null}
from openai import OpenAI

client = OpenAI(
    base_url="https://api.yutori.com/v1",
    api_key="YOUR_API_KEY",
)

response = client.chat.completions.create(
    model="n2",
    extra_body={"reasoning_effort": "medium"},
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "I need to research Yutori pricing, but I am not sure whether to search the web or go straight to their site. Decide which is better from this screen, explain your choice, then take the first step."
                },
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://docs.yutori.com/assets/google_homepage_2024.jpg"
                    }
                }
            ]
        }
    ]
)
```

```javascript JavaScript theme={null}
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.yutori.com/v1",
  apiKey: "YOUR_API_KEY",
});

const response = await client.chat.completions.create({
  model: "n2",
  reasoning_effort: "medium",
  messages: [
    {
      role: "user",
      content: [
        {
          type: "text",
          text: "I need to research Yutori pricing, but I am not sure whether to search the web or go straight to their site. Decide which is better from this screen, explain your choice, then take the first step.",
        },
        {
          type: "image_url",
          image_url: {
            url: "https://docs.yutori.com/assets/google_homepage_2024.jpg",
          },
        },
      ],
    },
  ],
});
```

```json 200 theme={null}
{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "model": "n2",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "I'll go with a web search rather than typing a URL directly. I don't know Yutori's exact domain, and guessing one risks landing on the wrong company.",
        "reasoning_content": "The screen shows Google homepage. The user asks to decide whether to search the web or go straight to their site, explain, then take the first step.\n\nI don't know Yutori's domain offhand. Going straight to their site requires knowing the domain, and pricing pages are often behind sign-up. A web search is safer.",
        "tool_calls": [
          {
            "id": "call_0a01d9d9c9db46f5a2f4264a",
            "index": 0,
            "type": "function",
            "function": {
              "name": "computer_batch",
              "arguments": "{\"actions\": [{\"name\": \"left_click\", \"arguments\": {\"coordinates\": [499, 440]}}, {\"name\": \"type\", \"arguments\": {\"text\": \"Yutori pricing\"}}, {\"name\": \"key_press\", \"arguments\": {\"key\": \"enter\"}}]}"
            }
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ],
  "usage": {
    "prompt_tokens": 5355,
    "completion_tokens": 387,
    "reasoning_tokens": 156,
    "total_tokens": 5742
  },
  "request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
```

## Overview

The **Navigator** API provides a computer-use model family. Given a task in natural language, the current screenshot, and the full action history, the model predicts the next action to take to accomplish the task.

The API follows the OpenAI `chat.completions` format. Pick the model that matches your environment:

| Model | API model id | Description |
| - | - | - |
| **Navigator n2** | `n2` | General computer use — operates a full desktop, with a batched action space and shell access. [Details →](https://yutori.mintlify.site/reference/n2.md) |
| **Navigator n1.5** | `n1.5-latest` | Optimized for browser use — operates a webpage, with an expanded action space, selectable tool sets, and JSON structured output. [Details →](https://yutori.mintlify.site/reference/n1-5.md) |

n2 reasons before it acts. `reasoning_effort` sets how much — `none`, `low`, `medium` (the default, shown above), or `xhigh`. The trace comes back on `reasoning_content` and its tokens are counted in `usage.reasoning_tokens`. A task the model can just do returns an empty trace; the example below asks it to weigh two approaches, which is where reasoning shows up. See [Reasoning](https://yutori.mintlify.site/reference/n2.md#reasoning).

## Response Format

Actions are returned via the `tool_calls` field in the response message:

```json theme={null}
{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "I'll go with a web search rather than typing a URL directly.",
        "reasoning_content": "I don't know Yutori's domain offhand, and pricing pages are often behind sign-up. A web search is safer.",
        "tool_calls": [
          {
            "id": "call_0a01d9d9c9db46f5a2f4264a",
            "type": "function",
            "function": {
              "name": "computer_batch",
              "arguments": "{\"actions\": [{\"name\": \"left_click\", \"arguments\": {\"coordinates\": [499, 440]}}, {\"name\": \"type\", \"arguments\": {\"text\": \"Yutori pricing\"}}, {\"name\": \"key_press\", \"arguments\": {\"key\": \"enter\"}}]}"
            }
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ]
}
```

`content` is the model's narration, `tool_calls` carries the predicted actions, and `request_id` is a unique identifier useful for debugging. Which tool names appear depends on the model — n2 batches GUI actions into `computer_batch`, while n1.5 calls browser actions directly. n2 also returns its reasoning trace on `reasoning_content`; see [Reasoning](https://yutori.mintlify.site/reference/n2.md#reasoning).

When the model is done with the task, it returns a response with only `content` text and no `tool_calls` — the signal to end the loop. You can append a new user message to continue from the same history.


## OpenAPI

````yaml POST /v1/chat/completions
openapi: 3.1.0
info:
  title: FastAPI
  version: 0.1.0
servers:
  - url: https://api.yutori.com
    description: Production
security:
  - ApiKeyAuth: []
paths:
  /v1/chat/completions:
    post:
      tags:
        - Chat Completions
      summary: Create Chat Completion
      operationId: create_chat_completion_v1_chat_completions_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChatCompletionRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - BearerAuth: []
components:
  schemas:
    ChatCompletionRequest:
      properties:
        messages:
          items:
            anyOf:
              - $ref: '#/components/schemas/ChatCompletionDeveloperMessageParam'
              - $ref: '#/components/schemas/ChatCompletionSystemMessageParam'
              - $ref: '#/components/schemas/ChatCompletionUserMessageParam'
              - $ref: '#/components/schemas/ChatCompletionAssistantMessageParam'
              - $ref: '#/components/schemas/ChatCompletionToolMessageParam'
              - $ref: '#/components/schemas/ChatCompletionFunctionMessageParam'
              - $ref: '#/components/schemas/ChatCompletionToolImageMessageParam'
              - $ref: '#/components/schemas/ChatCompletionObservationMessageParam'
          type: array
          title: Messages
        model:
          type: string
          enum:
            - n2
            - n1.5-latest
            - n1.5-20260428
          title: Model
        max_completion_tokens:
          type: integer
          title: Max Completion Tokens
          description: >-
            Maximum output tokens. Defaults to 16384 for n2, because its
            reasoning trace and tool call share this budget. n1.5 defaults to
            1572.
          default: 16384
        temperature:
          anyOf:
            - type: number
            - type: 'null'
          title: Temperature
          description: Sampling temperature. Defaults to 0.6 for n2. n1.5 defaults to 0.3.
          default: 0.6
        top_p:
          anyOf:
            - type: number
            - type: 'null'
          title: Top P
          description: Nucleus sampling threshold. Defaults to 0.95 for n2. Unset for n1.5.
          default: 0.95
        repetition_penalty:
          anyOf:
            - type: number
            - type: 'null'
          title: Repetition Penalty
          description: >-
            Penalizes token repetition. 1.0 = no penalty, >1.0 = less
            repetition. Only supported by vLLM-backed models. Defaults to 1.0
            for n2. Unset for n1.5.
          default: 1
        presence_penalty:
          anyOf:
            - type: number
            - type: 'null'
          title: Presence Penalty
          description: Defaults to 0.0 for n2. Unset for n1.5.
          default: 0
        frequency_penalty:
          anyOf:
            - type: number
            - type: 'null'
          title: Frequency Penalty
          description: Unset for both models; neither sets a server-side default for it.
        reasoning_effort:
          anyOf:
            - type: string
            - type: 'null'
          enum:
            - none
            - low
            - medium
            - xhigh
          title: Reasoning Effort
          description: >-
            n2 only. How much the model reasons before acting. Defaults to
            `medium`; `none` turns reasoning off. OpenAI's `high` and `minimal`
            are accepted as aliases for `xhigh` and `low`, and any unrecognized
            value falls back to `medium`.
          default: medium
        tools:
          anyOf:
            - items:
                additionalProperties: true
                type: object
              type: array
            - type: 'null'
          title: Tools
          description: >-
            Additional tools, merged with the selected tool set rather than
            replacing it. n1.5 merges them with the built-in browser actions
            (left_click, scroll, type, etc.). n2 serves them alongside the tool
            set; a definition whose name the set already serves is rejected
            rather than shadowed — disable it first via disable_tools.
        tool_choice:
          anyOf:
            - type: string
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Tool Choice
          description: >-
            Controls whether tool calls are parsed from the response. Model
            always decides whether to call a tool. 'none' treats the response as
            text-only, but tool calls may be present inside `<tool_call>` tags,
            'auto' (default) parses tool calls automatically as `tool_calls`
            list in response. n2 supports 'auto' only.
          default: auto
        response_format:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Response Format
          description: An object specifying the format that the model must output.
        tool_set:
          anyOf:
            - type: string
            - type: 'null'
          title: Tool Set
          description: >-
            Named tool set. n2 defaults to the current desktop set
            ('computer_use_tools-20260830': computer_batch, bash, read, write,
            edit) and accepts earlier dated sets. n1.5 defaults to
            'browser_tools_core-20260403' (coordinate-based tools);
            'browser_tools_expanded-20260403' adds extract_elements, find,
            set_element_value, execute_js.
        disable_tools:
          anyOf:
            - items:
                type: string
              type: array
            - type: 'null'
          title: Disable Tools
          description: >-
            List of tool names to remove from the selected tool set. For n2 only
            the shell/file tools (bash, read, write, edit) may be removed —
            computer_batch is the GUI surface and cannot be disabled.
        json_schema:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Json Schema
          description: >-
            JSON Schema for structured output. n1.5 only — n2 rejects this
            field. Appended to your task message. Model returns JSON in ```json
            fences, parsed and returned as 'parsed_json' in the response.
        prev_request_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Prev Request Id
          description: >-
            The `request_id` returned by the previous Navigator call in this
            conversation. Echo it back on each subsequent call to link the calls
            into one conversation for usage reporting.
      additionalProperties: true
      type: object
      title: ChatCompletionRequest
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ChatCompletionDeveloperMessageParam:
      properties:
        content:
          anyOf:
            - type: string
            - items:
                $ref: '#/components/schemas/ChatCompletionContentPartTextParam'
              type: array
          title: Content
        role:
          type: string
          const: developer
          title: Role
        name:
          type: string
          title: Name
      additionalProperties: true
      type: object
      required:
        - content
        - role
      title: ChatCompletionDeveloperMessageParam
      description: >-
        Developer-provided instructions that the model should follow, regardless
        of

        messages sent by the user. With o1 models and newer, `developer`
        messages

        replace the previous `system` messages.
    ChatCompletionSystemMessageParam:
      properties:
        content:
          anyOf:
            - type: string
            - items:
                $ref: '#/components/schemas/ChatCompletionContentPartTextParam'
              type: array
          title: Content
        role:
          type: string
          const: system
          title: Role
        name:
          type: string
          title: Name
      additionalProperties: true
      type: object
      required:
        - content
        - role
      title: ChatCompletionSystemMessageParam
      description: >-
        Developer-provided instructions that the model should follow, regardless
        of

        messages sent by the user. With o1 models and newer, use `developer`
        messages

        for this purpose instead.
    ChatCompletionUserMessageParam:
      properties:
        content:
          anyOf:
            - type: string
            - items:
                anyOf:
                  - $ref: '#/components/schemas/ChatCompletionContentPartTextParam'
                  - $ref: '#/components/schemas/ChatCompletionContentPartImageParam'
                  - $ref: >-
                      #/components/schemas/ChatCompletionContentPartInputAudioParam
                  - $ref: '#/components/schemas/File'
              type: array
          title: Content
        role:
          type: string
          const: user
          title: Role
        name:
          type: string
          title: Name
      additionalProperties: true
      type: object
      required:
        - content
        - role
      title: ChatCompletionUserMessageParam
      description: |-
        Messages sent by an end user, containing prompts or additional context
        information.
    ChatCompletionAssistantMessageParam:
      properties:
        role:
          type: string
          const: assistant
          title: Role
        audio:
          anyOf:
            - $ref: '#/components/schemas/Audio'
            - type: 'null'
        content:
          anyOf:
            - type: string
            - items:
                anyOf:
                  - $ref: '#/components/schemas/ChatCompletionContentPartTextParam'
                  - $ref: '#/components/schemas/ChatCompletionContentPartRefusalParam'
              type: array
            - type: 'null'
          title: Content
        function_call:
          anyOf:
            - $ref: '#/components/schemas/FunctionCall'
            - type: 'null'
        name:
          type: string
          title: Name
        refusal:
          anyOf:
            - type: string
            - type: 'null'
          title: Refusal
        tool_calls:
          items:
            anyOf:
              - $ref: >-
                  #/components/schemas/ChatCompletionMessageFunctionToolCallParam
              - $ref: '#/components/schemas/ChatCompletionMessageCustomToolCallParam'
          type: array
          title: Tool Calls
      additionalProperties: true
      type: object
      required:
        - role
      title: ChatCompletionAssistantMessageParam
      description: Messages sent by the model in response to user messages.
    ChatCompletionToolMessageParam:
      properties:
        content:
          anyOf:
            - type: string
            - items:
                $ref: '#/components/schemas/ChatCompletionContentPartTextParam'
              type: array
          title: Content
        role:
          type: string
          const: tool
          title: Role
        tool_call_id:
          type: string
          title: Tool Call Id
      additionalProperties: true
      type: object
      required:
        - content
        - role
        - tool_call_id
      title: ChatCompletionToolMessageParam
    ChatCompletionFunctionMessageParam:
      properties:
        content:
          anyOf:
            - type: string
            - type: 'null'
          title: Content
        name:
          type: string
          title: Name
        role:
          type: string
          const: function
          title: Role
      additionalProperties: true
      type: object
      required:
        - content
        - name
        - role
      title: ChatCompletionFunctionMessageParam
    ChatCompletionToolImageMessageParam:
      properties:
        role:
          type: string
          const: tool
          title: Role
        content:
          anyOf:
            - type: string
            - items:
                anyOf:
                  - $ref: '#/components/schemas/ChatCompletionContentPartTextParam'
                  - $ref: '#/components/schemas/ChatCompletionContentPartImageParam'
              type: array
          title: Content
        tool_call_id:
          type: string
          title: Tool Call Id
      additionalProperties: true
      type: object
      required:
        - role
        - content
        - tool_call_id
      title: ChatCompletionToolImageMessageParam
    ChatCompletionObservationMessageParam:
      properties:
        role:
          type: string
          const: observation
          title: Role
        content:
          anyOf:
            - type: string
            - items:
                anyOf:
                  - $ref: '#/components/schemas/ChatCompletionContentPartTextParam'
                  - $ref: '#/components/schemas/ChatCompletionContentPartImageParam'
              type: array
          title: Content
        name:
          type: string
          title: Name
      additionalProperties: true
      type: object
      required:
        - role
        - content
      title: ChatCompletionObservationMessageParam
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    ChatCompletionContentPartTextParam:
      properties:
        text:
          type: string
          title: Text
        type:
          type: string
          const: text
          title: Type
      additionalProperties: true
      type: object
      required:
        - text
        - type
      title: ChatCompletionContentPartTextParam
      description: >-
        Learn about [text
        inputs](https://platform.openai.com/docs/guides/text-generation).
    ChatCompletionContentPartImageParam:
      properties:
        image_url:
          $ref: '#/components/schemas/ImageURL'
        type:
          type: string
          const: image_url
          title: Type
      additionalProperties: true
      type: object
      required:
        - image_url
        - type
      title: ChatCompletionContentPartImageParam
      description: >-
        Learn about [image
        inputs](https://platform.openai.com/docs/guides/vision).
    ChatCompletionContentPartInputAudioParam:
      properties:
        input_audio:
          $ref: '#/components/schemas/InputAudio'
        type:
          type: string
          const: input_audio
          title: Type
      additionalProperties: true
      type: object
      required:
        - input_audio
        - type
      title: ChatCompletionContentPartInputAudioParam
      description: >-
        Learn about [audio
        inputs](https://platform.openai.com/docs/guides/audio).
    File:
      properties:
        file:
          $ref: '#/components/schemas/FileFile'
        type:
          type: string
          const: file
          title: Type
      additionalProperties: true
      type: object
      required:
        - file
        - type
      title: File
      description: >-
        Learn about [file inputs](https://platform.openai.com/docs/guides/text)
        for text generation.
    Audio:
      properties:
        id:
          type: string
          title: Id
      additionalProperties: true
      type: object
      required:
        - id
      title: Audio
      description: |-
        Data about a previous audio response from the model.
        [Learn more](https://platform.openai.com/docs/guides/audio).
    ChatCompletionContentPartRefusalParam:
      properties:
        refusal:
          type: string
          title: Refusal
        type:
          type: string
          const: refusal
          title: Type
      additionalProperties: true
      type: object
      required:
        - refusal
        - type
      title: ChatCompletionContentPartRefusalParam
    FunctionCall:
      properties:
        arguments:
          type: string
          title: Arguments
        name:
          type: string
          title: Name
      additionalProperties: true
      type: object
      required:
        - arguments
        - name
      title: FunctionCall
      description: >-
        Deprecated and replaced by `tool_calls`.


        The name and arguments of a function that should be called, as generated
        by the model.
    ChatCompletionMessageFunctionToolCallParam:
      properties:
        id:
          type: string
          title: Id
        function:
          $ref: '#/components/schemas/Function'
        type:
          type: string
          const: function
          title: Type
      additionalProperties: true
      type: object
      required:
        - id
        - function
        - type
      title: ChatCompletionMessageFunctionToolCallParam
      description: A call to a function tool created by the model.
    ChatCompletionMessageCustomToolCallParam:
      properties:
        id:
          type: string
          title: Id
        custom:
          $ref: '#/components/schemas/Custom'
        type:
          type: string
          const: custom
          title: Type
      additionalProperties: true
      type: object
      required:
        - id
        - custom
        - type
      title: ChatCompletionMessageCustomToolCallParam
      description: A call to a custom tool created by the model.
    ImageURL:
      properties:
        url:
          type: string
          title: Url
        detail:
          type: string
          enum:
            - auto
            - low
            - high
          title: Detail
      additionalProperties: true
      type: object
      required:
        - url
      title: ImageURL
    InputAudio:
      properties:
        data:
          type: string
          title: Data
        format:
          type: string
          enum:
            - wav
            - mp3
          title: Format
      additionalProperties: true
      type: object
      required:
        - data
        - format
      title: InputAudio
    FileFile:
      properties:
        file_data:
          type: string
          title: File Data
        file_id:
          type: string
          title: File Id
        filename:
          type: string
          title: Filename
      additionalProperties: true
      type: object
      title: FileFile
    Function:
      properties:
        arguments:
          type: string
          title: Arguments
        name:
          type: string
          title: Name
      additionalProperties: true
      type: object
      required:
        - arguments
        - name
      title: Function
      description: The function that the model called.
    Custom:
      properties:
        input:
          type: string
          title: Input
        name:
          type: string
          title: Name
      additionalProperties: true
      type: object
      required:
        - input
        - name
      title: Custom
      description: The custom tool that the model called.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      name: x-api-key
      in: header
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Use Authorization: Bearer <api_key>'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.