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

# 빠른 시작

> 5분 안에 첫 Tiro API 호출을 해보세요.

export const TwoDoors = ({restHref, restTitle, restDescription, mcpHref, mcpTitle, mcpDescription}) => <div className="tiro-two-doors">
    <a className="tiro-two-doors__door" href={restHref}>
      <span className="tiro-two-doors__label">REST API</span>
      <h3 className="tiro-two-doors__title">{restTitle}</h3>
      <p className="tiro-two-doors__desc">{restDescription}</p>
    </a>
    <a className="tiro-two-doors__door" href={mcpHref}>
      <span className="tiro-two-doors__label">MCP Server</span>
      <h3 className="tiro-two-doors__title">{mcpTitle}</h3>
      <p className="tiro-two-doors__desc">{mcpDescription}</p>
    </a>
  </div>;

Tiro에 연결하는 방법은 두 가지예요. 백엔드에서 프로그래밍 방식으로 접근하는 REST API, 그리고 Claude나 ChatGPT 같은 AI 클라이언트를 위한 MCP Server예요.

<TwoDoors restHref="/ko/developers/fundamentals/api-overview" restTitle="REST API" restDescription="노트, 전사, 요약, Webhook까지 전체 프로그래밍 방식 접근." mcpHref="/ko/developers/mcp/mcp-overview" mcpTitle="MCP Server" mcpDescription="Claude, ChatGPT, Cursor 등 AI 클라이언트를 몇 분 만에 연결." />

## API 키 발급

[Tiro Platform API Keys 페이지](https://platform.tiro.ooo/dashboard/api-keys)로 이동해 키를 생성하세요.

<Steps>
  <Step title="로그인">
    [platform.tiro.ooo/dashboard/api-keys](https://platform.tiro.ooo/dashboard/api-keys)로 이동하세요.
  </Step>

  <Step title="워크스페이스 선택">
    사이드바의 워크스페이스 전환기에서 키가 접근할 워크스페이스를 고르세요. 키는 그 워크스페이스에 한정돼요.
  </Step>

  <Step title="키 생성">
    **Create New API Key**를 클릭하세요. 점(.)을 포함한 **전체 키**를 복사하세요 — `abc123.xR7mK9pL2qW4...`.
  </Step>

  <Step title="저장">
    환경 변수로 저장하세요. 생성 대화 상자를 닫으면 다시 볼 수 없어요.
  </Step>
</Steps>

<Warning>
  API 키는 환경 변수에 저장하세요. 절대 하드코딩하거나 커밋하지 마세요.
</Warning>

<Note>
  워크스페이스 도입 이전의 개인 API 키를 쓰고 있나요? 그 키는 지원이 중단됐고 **2026년 6월 30일**부로 작동을 멈춰요. [워크스페이스 키로 마이그레이션하세요](/ko/developers/fundamentals/authentication#레거시-개인-키-지원-중단).
</Note>

## 첫 요청 보내기

노트를 가져와 볼게요.

<CodeGroup>
  ```bash cURL theme={"system"}
  curl -H "Authorization: Bearer $TIRO_API_KEY" \
       -H "Content-Type: application/json" \
       https://api.tiro.ooo/v1/external/notes
  ```

  ```javascript Node.js theme={"system"}
  const response = await fetch("https://api.tiro.ooo/v1/external/notes", {
    headers: {
      "Authorization": `Bearer ${process.env.TIRO_API_KEY}`,
      "Content-Type": "application/json",
    },
  });

  const data = await response.json();
  console.log(`Found ${data.content.length} notes`);
  ```

  ```python Python theme={"system"}
  import os
  import requests

  headers = {
      'Authorization': f'Bearer {os.getenv("TIRO_API_KEY")}',
      'Content-Type': 'application/json'
  }

  response = requests.get('https://api.tiro.ooo/v1/external/notes', headers=headers)
  data = response.json()
  print(f"Found {len(data['content'])} notes")
  ```

  ```go Go theme={"system"}
  package main

  import (
      "encoding/json"
      "fmt"
      "net/http"
      "os"
  )

  func main() {
      client := &http.Client{}
      req, _ := http.NewRequest("GET", "https://api.tiro.ooo/v1/external/notes", nil)
      
      apiKey := os.Getenv("TIRO_API_KEY")
      req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", apiKey))
      req.Header.Set("Content-Type", "application/json")
      
      resp, _ := client.Do(req)
      defer resp.Body.Close()
      
      var data map[string]interface{}
      json.NewDecoder(resp.Body).Decode(&data)
      fmt.Printf("Found %v notes\n", len(data["content"].([]interface{})))
  }
  ```

  ```kotlin Kotlin + Spring theme={"system"}
  @RestController
  class NotesController {
      
      @Value("\${tiro.api.key}")
      private lateinit var apiKey: String
      
      private val restTemplate = RestTemplate()
      
      @GetMapping("/my-notes")
      fun getMyNotes(): ResponseEntity<Map<String, Any>> {
          val headers = HttpHeaders()
          headers.set("Authorization", "Bearer $apiKey")
          headers.contentType = MediaType.APPLICATION_JSON
          
          val entity = HttpEntity<String>(headers)
          
          val response = restTemplate.exchange(
              "https://api.tiro.ooo/v1/external/notes",
              HttpMethod.GET,
              entity,
              object : ParameterizedTypeReference<Map<String, Any>>() {}
          )
          
          val data = response.body!!
          println("Found ${(data["content"] as List<*>).size} notes")
          
          return ResponseEntity.ok(data)
      }
  }
  ```
</CodeGroup>

Tiro는 노트 목록을 페이지네이션된 형태로 반환해요. 각 객체에는 제목, 생성 날짜, 처리 상태, 그리고 전사·요약·문서를 가져올 때 사용하는 `guid`가 담겨 있어요.

이제 목록을 얻었으니 [노트 데이터 모델](/ko/developers/fundamentals/note-data-model)을 읽고 각 `guid`로 무엇을 할 수 있는지 알아보세요 — 전사, 요약, 문서, 폴더까지요.
