{"query":"Your First API Request","corpusVersion":"local","generatedAt":"2026-11-02T05:38:22.864Z","results":[{"blockId":"public-api.quickstart#your-first-api-request","pageId":"public-api.quickstart","title":"Your First API Request","pageTitle":"Your First API Request","url":"https://teammately.ai/docs/public-api/quickstart.md","humanUrl":"https://teammately.ai/docs/public-api/quickstart#your-first-api-request","markdownUrl":"https://teammately.ai/docs/public-api/quickstart.md","sectionId":"your-first-api-request","kind":"quickstart","productArea":"public_api","score":3376.879912347754,"reasons":["search_match","exact_match","title_match","term_match"],"markdown":"# Your First API Request"},{"blockId":"public-api.quickstart#send-a-read-request","pageId":"public-api.quickstart","title":"Send a read request","pageTitle":"Your First API Request","url":"https://teammately.ai/docs/public-api/quickstart.md","humanUrl":"https://teammately.ai/docs/public-api/quickstart#send-a-read-request","markdownUrl":"https://teammately.ai/docs/public-api/quickstart.md","sectionId":"send-a-read-request","kind":"quickstart","productArea":"public_api","score":1746.0588609343065,"reasons":["search_match","exact_match","page_title_match","term_match"],"markdown":"## Send a read request"},{"blockId":"public-api.quickstart#configure-the-destination","pageId":"public-api.quickstart","title":"Configure the destination","pageTitle":"Your First API Request","url":"https://teammately.ai/docs/public-api/quickstart.md","humanUrl":"https://teammately.ai/docs/public-api/quickstart#configure-the-destination","markdownUrl":"https://teammately.ai/docs/public-api/quickstart.md","sectionId":"configure-the-destination","kind":"quickstart","productArea":"public_api","score":1276.5013057356714,"reasons":["search_match","exact_match","page_title_match","term_match"],"markdown":"## Configure the destination\n\n```sh\nexport TEAMMATELY_ORGANIZATION='<organization-key>'\nexport TEAMMATELY_PROJECT='<issued-project-id>'\nPROJECT_URL=\"https://api.teammately.ai/v1/organizations/${TEAMMATELY_ORGANIZATION}\"\nPROJECT_URL=\"${PROJECT_URL}/projects/${TEAMMATELY_PROJECT}\"\nexport PROJECT_URL\n```\n\nOnly nonsecret identifiers are configured here. Keep the API key out of URLs, source and shell history."},{"blockId":"public-api.quickstart#example-retrieve-a-case-page","pageId":"public-api.quickstart","title":"Example: Retrieve a Case page","pageTitle":"Your First API Request","url":"https://teammately.ai/docs/public-api/quickstart.md","humanUrl":"https://teammately.ai/docs/public-api/quickstart#example-retrieve-a-case-page","markdownUrl":"https://teammately.ai/docs/public-api/quickstart.md","sectionId":"example-retrieve-a-case-page","kind":"quickstart","productArea":"public_api","score":1111.2271234331295,"reasons":["search_match","exact_match","page_title_match","term_match","prefix_or_fuzzy_match"],"markdown":"### Example: Retrieve a Case page\n\n```sh\ncurl --fail-with-body \\\n  --header \"Authorization: Bearer ${TEAMMATELY_API_KEY}\" \\\n  \"${PROJECT_URL}/cases?limit=1&offset=0\"\n```\n\n```python\nimport os\nfrom urllib.parse import quote, urlencode\nfrom urllib.request import HTTPRedirectHandler, Request, build_opener\n\nclass NoRedirect(HTTPRedirectHandler):\n    def redirect_request(self, req, fp, code, msg, headers, newurl):\n        return None\n\nopener = build_opener(NoRedirect())\napi_key = os.environ[\"TEAMMATELY_API_KEY\"]\n\nurl = os.environ[\"PROJECT_URL\"] + \"/cases\"\nurl += \"?\" + urlencode({\"limit\": \"1\", \"offset\": \"0\"})\nheaders = {\"Authorization\": \"Bearer \" + api_key}\nrequest = Request(url, headers=headers, method=\"GET\")\nwith opener.open(request) as response:\n    print(response.read().decode(\"utf-8\"))\n```\n\n```typescript\nconst apiKey = process.env.TEAMMATELY_API_KEY!;\n\n{\n  const url = new URL(process.env.PROJECT_URL! + \"/cases\");\n  url.searchParams.set(\"limit\", \"1\");\n  url.searchParams.set(\"offset\", \"0\");\n  const response = await fetch(url, {\n    method: \"GET\",\n    redirect: \"error\",\n    headers: {\n      Authorization: `Bearer ${apiKey}`,\n    },\n  });\n  if (!response.ok) throw new Error(`HTTP ${response.status}`);\n  console.log(await response.text());\n}\n```\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"fmt\"\n    \"io\"\n    \"log\"\n    \"net/http\"\n    \"net/url\"\n    \"os\"\n)\n\nfunc main() {\n    if err := run(context.Background()); err != nil { log.Fatal(err) }\n}\n\nfunc run(ctx context.Context) error {\n    client := &http.Client{\n        CheckRedirect: func(req *http.Request, via []*http.Request) error {\n            return http.ErrUseLastResponse\n        },\n    }\n    {\n        target := os.Getenv(\"PROJECT_URL\") + \"/cases\"\n        query := url.Values{}\n        query.Set(\"limit\", \"1\")\n        query.Set(\"offset\", \"0\")\n        target += \"?\" + query.Encode()\n        request, err := http.NewRequestWithContext(ctx, \"GET\", target, nil)\n        if err != nil { return err }\n        request.Header.Set(\"Authorization\", \"Bearer \" + os.Getenv(\"TEAMMATELY_API_KEY\"))\n        response, err := client.Do(request)\n        if err != nil { return err }\n        payloadBytes, readErr := io.ReadAll(response.Body)\n        response.Body.Close()\n        if readErr != nil { return readErr }\n        fmt.Println(string(payloadBytes))\n        if response.StatusCode < 200 || response.StatusCode >= 300 { return fmt.Errorf(\"HTTP %d\", response.StatusCode) }\n    }\n    return nil\n}\n```\n\nThe response has `message` and `data.columns`/`data.rows`. Empty `rows` can be a valid empty Project. Read a returned `case_id` through `/cases/{caseId}`; that detail response uses `result`."},{"blockId":"public-api.quickstart#related-reference-pages","pageId":"public-api.quickstart","title":"Related reference pages","pageTitle":"Your First API Request","url":"https://teammately.ai/docs/public-api/quickstart.md","humanUrl":"https://teammately.ai/docs/public-api/quickstart#related-reference-pages","markdownUrl":"https://teammately.ai/docs/public-api/quickstart.md","sectionId":"related-reference-pages","kind":"quickstart","productArea":"public_api","score":1057.787974183963,"reasons":["search_match","exact_match","page_title_match","term_match"],"markdown":"## Related reference pages\n\n{% related-card-grid %}\n- [Authentication](/docs/public-api/authentication)\n- [Conventions](/docs/public-api/conventions)\n- [Permissions troubleshooting](/docs/troubleshooting/permissions)\n{% /related-card-grid %}"},{"blockId":"public-api.quickstart#choose-the-next-workflow","pageId":"public-api.quickstart","title":"Choose the next workflow","pageTitle":"Your First API Request","url":"https://teammately.ai/docs/public-api/quickstart.md","humanUrl":"https://teammately.ai/docs/public-api/quickstart#choose-the-next-workflow","markdownUrl":"https://teammately.ai/docs/public-api/quickstart.md","sectionId":"choose-the-next-workflow","kind":"quickstart","productArea":"public_api","score":1057.234534803584,"reasons":["search_match","exact_match","page_title_match","term_match"],"markdown":"## Choose the next workflow\n\n| Goal | Guide |\n| --- | --- |\n| Capture application behavior | [Fieldloop](/docs/public-api/fieldloop) or a [language SDK](/docs/sdks) |\n| Import Cases | [Case imports](/docs/public-api/case-imports) |\n| Evaluate application outputs | [External outputs](/docs/public-api/evaluation-outputs) |\n| Execute a managed Harness | [Managed execution](/docs/public-api/managed-execution) |\n\nBenchmark workflows also need the exact Benchmark and immutable Version:\n\n```sh\nexport TEAMMATELY_BENCHMARK='<issued-benchmark-id>'\nexport TEAMMATELY_BENCHMARK_VERSION='<issued-benchmark-version-id>'\nBENCHMARK_URL=\"${PROJECT_URL}/benchmarks/${TEAMMATELY_BENCHMARK}\"\nBENCHMARK_URL=\"${BENCHMARK_URL}/versions/${TEAMMATELY_BENCHMARK_VERSION}\"\nexport BENCHMARK_URL\n```"},{"blockId":"public-api.quickstart#prerequisites","pageId":"public-api.quickstart","title":"Prerequisites","pageTitle":"Your First API Request","url":"https://teammately.ai/docs/public-api/quickstart.md","humanUrl":"https://teammately.ai/docs/public-api/quickstart#prerequisites","markdownUrl":"https://teammately.ai/docs/public-api/quickstart.md","sectionId":"prerequisites","kind":"quickstart","productArea":"public_api","score":1050.4958839628798,"reasons":["search_match","exact_match","page_title_match","term_match"],"markdown":"## Prerequisites\n\nUse an existing workspace and Project, a key with Project read access injected as `TEAMMATELY_API_KEY`, and curl. Copy the organization key and issued Project ID from Teammately; replace the placeholders below."},{"blockId":"public-api.quickstart#success-and-common-failures","pageId":"public-api.quickstart","title":"Success and common failures","pageTitle":"Your First API Request","url":"https://teammately.ai/docs/public-api/quickstart.md","humanUrl":"https://teammately.ai/docs/public-api/quickstart#success-and-common-failures","markdownUrl":"https://teammately.ai/docs/public-api/quickstart.md","sectionId":"success-and-common-failures","kind":"quickstart","productArea":"public_api","score":1025.0663655187495,"reasons":["search_match","exact_match","page_title_match","term_match"],"markdown":"## Success and common failures\n\nThis read changes no Case. Confirm the intended Project and parse its envelope. A Fieldloop-only key does not authorize a general Case read. For `401`, inspect credential validity; for `403`, inspect capability and restrictions; for `404`, check resource scope."}]}