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

# Fetch Note by Note ID

> Use note_id from create when calling get note content

export const ShareNoteArt = () => <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 225" role="img" aria-label="Share One Note across Products" className="cb-art-svg" preserveAspectRatio="xMidYMid slice"><defs><filter id="sh-ShareNote" x="-30%" y="-30%" width="160%" height="170%"><feDropShadow dx="0" dy="2" stdDeviation="3" floodColor="#1B1B1B" floodOpacity="0.16" /></filter></defs><path d="M0 0H400V225H0V0Z" fill="#FEF9DD" /><path d="M28 0L28 225" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M140 0L140 225" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M180 0L180 225" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M372 0L372 225" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M0 26L400 26" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M0 108L400 108" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M0 120L400 120" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M0 199L400 199" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M28 26H122A18 18 0 0 1 140 44V90A18 18 0 0 1 122 108H28V26Z" fill="#FFFDF7" stroke="#1B1B1B" strokeWidth="1" /><path d="M76 36H94A6 6 0 0 1 100 42V92A6 6 0 0 1 94 98H76A6 6 0 0 1 70 92V42A6 6 0 0 1 76 36Z" fill="none" stroke="#1B1B1B" strokeWidth="1" /><path d="M80 42L90 42" stroke="#1B1B1B" strokeWidth="2" fill="none" /><path d="M28 120H122A18 18 0 0 1 140 138V181A18 18 0 0 1 122 199H28V120Z" fill="#FFFDF7" stroke="#1B1B1B" strokeWidth="1" /><path d="M49 134H119A5 5 0 0 1 124 139V181A5 5 0 0 1 119 186H49A5 5 0 0 1 44 181V139A5 5 0 0 1 49 134Z" fill="none" stroke="#1B1B1B" strokeWidth="1" /><path d="M44 144L124 144" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M48.5 139a1.5 1.5 0 1 0 3.0 0a1.5 1.5 0 1 0 -3.0 0" fill="#1B1B1B" /><path d="M53.5 139a1.5 1.5 0 1 0 3.0 0a1.5 1.5 0 1 0 -3.0 0" fill="#1B1B1B" /><path d="M58.5 139a1.5 1.5 0 1 0 3.0 0a1.5 1.5 0 1 0 -3.0 0" fill="#1B1B1B" /><path d="M140 67L180 67" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M140 160L180 160" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M176 63H184V71H176V63Z" fill="#FBEC86" stroke="#1B1B1B" strokeWidth="0.75" /><path d="M176 156H184V164H176V156Z" fill="#FBEC86" stroke="#1B1B1B" strokeWidth="0.75" /><path d="M202 26H350A22 22 0 0 1 372 48V177A22 22 0 0 1 350 199H202A22 22 0 0 1 180 177V48A22 22 0 0 1 202 26Z" fill="#FFFDF7" stroke="#1B1B1B" strokeWidth="1" /><path d="M200 52L236 52" stroke="#1B1B1B" strokeWidth="2.5" fill="none" /><path d="M200 72L350 72" stroke="#8C8C8C" strokeWidth="1" fill="none" /><path d="M200 85L328 85" stroke="#8C8C8C" strokeWidth="1" fill="none" /><path d="M196 92H356V107H196V92Z" fill="#FBEC86" /><path d="M200 99.5L330 99.5" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M200 120L340 120" stroke="#8C8C8C" strokeWidth="1" fill="none" /><g filter="url(#sh-ShareNote)"><path d="M211 150H318.6A13 13 0 0 1 331.6 163V163A13 13 0 0 1 318.6 176H211A13 13 0 0 1 198 163V163A13 13 0 0 1 211 150Z" fill="#FFFFFF" stroke="#1B1B1B" strokeWidth="0.75" strokeOpacity="0.18" /></g><path d="M211 163L214.5 166.5L221 159.5" fill="none" stroke="#1B1B1B" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" /><text x="229" y="167" fontFamily="JetBrains Mono, ui-monospace, SFMono-Regular, Menlo, monospace" fontSize="9.5" fontWeight="500" fill="#1B1B1B">emr_encounter_id</text></svg>;

export const WaitAmbientArt = () => <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 225" role="img" aria-label="Wait for Ambient before Fetch" className="cb-art-svg" preserveAspectRatio="xMidYMid slice"><defs><filter id="sh-WaitAmbient" x="-30%" y="-30%" width="160%" height="170%"><feDropShadow dx="0" dy="2" stdDeviation="3" floodColor="#1B1B1B" floodOpacity="0.16" /></filter></defs><path d="M0 0H400V225H0V0Z" fill="#FEF9DD" /><path d="M180 0L180 225" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M204 0L204 225" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M236 0L236 225" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M362 0L362 225" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M386 0L386 225" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M0 26L400 26" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M0 110L400 110" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M0 124L400 124" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M0 199L400 199" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M-20 26H156A24 24 0 0 1 180 50V175A24 24 0 0 1 156 199H-20V26Z" fill="#FFFDF7" stroke="#1B1B1B" strokeWidth="1" /><rect x="26.0" y="74" width="2.6" height="60.0" fill="#1B1B1B" fillOpacity="1.00" /><rect x="32.6" y="74" width="1" height="68.0" fill="#1B1B1B" fillOpacity="1.00" /><rect x="39.2" y="74" width="1.8" height="60.0" fill="#1B1B1B" fillOpacity="1.00" /><rect x="45.8" y="74" width="1" height="64.0" fill="#1B1B1B" fillOpacity="1.00" /><rect x="52.4" y="74" width="2.4" height="60.0" fill="#1B1B1B" fillOpacity="1.00" /><rect x="59.0" y="74" width="1.2" height="60.0" fill="#1B1B1B" fillOpacity="1.00" /><rect x="65.6" y="74" width="1" height="68.0" fill="#1B1B1B" fillOpacity="1.00" /><rect x="72.2" y="74" width="2.8" height="60.0" fill="#1B1B1B" fillOpacity="1.00" /><rect x="78.8" y="74" width="1" height="60.0" fill="#1B1B1B" fillOpacity="1.00" /><rect x="85.4" y="74" width="1.6" height="60.0" fill="#1B1B1B" fillOpacity="1.00" /><rect x="92.0" y="74" width="2.2" height="64.0" fill="#1B1B1B" fillOpacity="1.00" /><rect x="98.6" y="74" width="1" height="68.0" fill="#1B1B1B" fillOpacity="0.94" /><rect x="105.2" y="74" width="1.4" height="60.0" fill="#1B1B1B" fillOpacity="0.81" /><rect x="111.8" y="74" width="2.6" height="60.0" fill="#1B1B1B" fillOpacity="0.68" /><rect x="118.4" y="74" width="1" height="60.0" fill="#1B1B1B" fillOpacity="0.54" /><rect x="125.0" y="74" width="1.2" height="60.0" fill="#1B1B1B" fillOpacity="0.41" /><rect x="131.6" y="74" width="2.6" height="68.0" fill="#1B1B1B" fillOpacity="0.28" /><rect x="138.2" y="74" width="1" height="64.0" fill="#1B1B1B" fillOpacity="0.18" /><path d="M204 82H244L262 40L284 108L298 82H386" fill="none" stroke="#1B1B1B" strokeWidth="7" strokeLinejoin="miter" strokeLinecap="square" /><path d="M204 82H244L262 40L284 108L298 82H386" fill="none" stroke="#FEF9DD" strokeWidth="5.4" strokeLinejoin="miter" strokeLinecap="square" /><path d="M258 124H386V199H236V146A22 22 0 0 1 258 124Z" fill="#FFFDF7" stroke="#1B1B1B" strokeWidth="1" /><path d="M256 142L360 142" stroke="#1B1B1B" strokeWidth="1" fill="none" /><path d="M256 154L336 154" stroke="#1B1B1B" strokeWidth="1" fill="none" /><g filter="url(#sh-WaitAmbient)"><path d="M267 162H331.9A13 13 0 0 1 344.9 175V175A13 13 0 0 1 331.9 188H267A13 13 0 0 1 254 175V175A13 13 0 0 1 267 162Z" fill="#FFFFFF" stroke="#1B1B1B" strokeWidth="0.75" strokeOpacity="0.18" /></g><path d="M267 175L270.5 178.5L277 171.5" fill="none" stroke="#1B1B1B" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" /><text x="285" y="179" fontFamily="JetBrains Mono, ui-monospace, SFMono-Regular, Menlo, monospace" fontSize="9.5" fontWeight="500" fill="#1B1B1B">completed</text></svg>;

export const RelatedDocCard = ({href, title, description, product, workflow, surface, surfaceLabel, time, level, media = "default", variant = "tutorial", art}) => {
  const ariaLabel = [time, level].filter(Boolean).join(", ");
  const metaLabel = surfaceLabel || (surface === "api" ? "API" : surface === "sdk" ? "SDK" : "");
  if (art) {
    const workflowLabel = workflow || product || "";
    return <a className="hp-io-method-card tut-hub-method-card cookbook-hub-art-card" href={href}>
        <div className="cookbook-hub-card-art" aria-hidden="true">
          {art}
        </div>
        <div className="hp-io-method-card-body">
          {workflowLabel || metaLabel ? <div className="cookbook-hub-card-cats">
              {workflowLabel ? <span className="cookbook-hub-card-cat">{workflowLabel}</span> : null}
              {metaLabel ? <span className="cookbook-hub-card-cat cookbook-hub-card-cat--meta">{metaLabel}</span> : null}
            </div> : null}
          <h3 className="hp-io-method-card-title">{title}</h3>
          {description ? <p className="hp-io-method-card-desc cookbook-hub-card-desc">{description}</p> : null}
          {time || level ? <div className="hp-io-method-card-meta tut-hub-card-foot" aria-label={ariaLabel}>
              <div className="tut-hub-card-foot-meta">
                {time ? <span className="hp-io-method-card-meta-time">{time}</span> : null}
                {level ? <span className="tut-hub-level">{level}</span> : null}
              </div>
            </div> : null}
        </div>
      </a>;
  }
  const mediaClass = media === "blue" ? "tut-hub-card-media tut-hub-card-media--blue" : "tut-hub-card-media";
  const descClass = variant === "cookbook" ? "hp-io-method-card-desc cookbook-hub-card-desc" : "hp-io-method-card-desc";
  const showSurface = Boolean(surface && metaLabel);
  const showBadges = Boolean(product || showSurface);
  const wrapBadges = variant === "cookbook" || showSurface;
  const productBadge = product ? <span className="hp-wn-badge hp-wn-badge-new">{product}</span> : null;
  const surfaceBadge = showSurface ? <span className={`hp-wn-badge cookbook-hub-badge-surface cookbook-hub-badge-surface--${surface}`}>
      {metaLabel}
    </span> : null;
  const badges = wrapBadges ? <div className="tut-hub-card-badges">
      {productBadge}
      {surfaceBadge}
    </div> : productBadge;
  return <a className="hp-io-method-card tut-hub-method-card" href={href}>
      <div className={mediaClass} aria-hidden="true" />
      <div className="hp-io-method-card-body">
        {showBadges ? badges : null}
        <h3 className="hp-io-method-card-title">{title}</h3>
        {description ? <p className={descClass}>{description}</p> : null}
        {time || level ? <div className="hp-io-method-card-meta tut-hub-card-foot" aria-label={ariaLabel}>
            <div className="tut-hub-card-foot-meta">
              {time ? <span className="hp-io-method-card-meta-time">{time}</span> : null}
              {level ? <span className="tut-hub-level">{level}</span> : null}
            </div>
          </div> : null}
      </div>
    </a>;
};

export const RelatedDocGrid = ({kind = "tutorial", children}) => <div className="hp-io-method-grid tut-hub-card-grid" {...kind === "cookbook" || kind === "tutorial" ? {
  "data-cookbook-related-grid": ""
} : {}}>
    {children}
  </div>;

export const CbRecipeMeta = ({items = []}) => <div className="cb-recipe-meta">
    {items.map(item => <span className={`cb-recipe-pill cb-recipe-pill--${item.type}${item.tone ? ` cb-recipe-pill--${item.tone}` : ""}`} key={`${item.type}-${item.label}`}>
        {item.type === "time" ? <svg className="cb-recipe-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden="true">
            <circle cx="12" cy="12" r="10" />
            <polyline points="12 6 12 12 16 14" />
          </svg> : item.type === "level" ? <svg className="cb-recipe-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden="true">
            <path d="M2 20h.01" />
            <path d="M7 20v-4" />
            <path d="M12 20v-8" />
            <path d="M17 20V8" />
            <path d="M22 20V4" />
          </svg> : item.type === "surface" ? <svg className="cb-recipe-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden="true">
            <polyline points="16 18 22 12 16 6" />
            <polyline points="8 6 2 12 8 18" />
          </svg> : <svg className="cb-recipe-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden="true">
            <path d="M12 3v3" />
            <path d="M12 18v3" />
            <path d="M3 12h3" />
            <path d="M18 12h3" />
            <path d="M5.6 5.6l2.1 2.1" />
            <path d="M16.3 16.3l2.1 2.1" />
            <path d="M5.6 18.4l2.1-2.1" />
            <path d="M16.3 7.7l2.1-2.1" />
          </svg>}
        {item.label}
      </span>)}
  </div>;

export const CbRecipePage = ({title, description, meta, recipeId, sidebar = {}, children}) => {
  const {tutorialHref, tutorialLabel = "Open Full Tutorial", apiHref, apiLabel = "View API Reference", authSections = [], glance = [], headers = []} = sidebar;
  return <div className="hp-wrap api-overview-wrap docs-frame-wrap cb-recipe-wrap" data-cb-recipe data-disable-read-time="true">
      <header className="cb-recipe-hero tut-hub-intro">
        <h1 className="sdk-overview-main-title api-overview-hero-page-title">{title}</h1>
        {description ? <div className="wse-prose">{description}</div> : null}
        {meta ? <div className="cb-recipe-meta-slot">{meta}</div> : null}
      </header>

      <div className="cb-recipe-body">
        <div className="cb-recipe-layout">
          <div className="cb-recipe-main prose prose-gray dark:prose-invert">{children}</div>

          <aside className="cb-recipe-sidebar" aria-label="Recipe actions and metadata">
            {recipeId ? <div className="cb-recipe-sidebar-card cb-recipe-sidebar-card--run">
                <div className="cb-run" data-cb-run data-recipe-id={recipeId} data-recipe-title={title}>
                  <button type="button" className="cb-run-trigger" aria-expanded="false">
                    <svg className="cb-run-trigger-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
                      <path d="M8 5v14l11-7L8 5z" />
                    </svg>
                    <span>Run This Recipe</span>
                    <svg className="cb-run-trigger-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden="true">
                      <polyline points="6 9 12 15 18 9" />
                    </svg>
                  </button>
                </div>
              </div> : null}

            <div className="cb-recipe-sidebar-card cb-recipe-sidebar-card--actions">
              <div className="cb-recipe-sidebar-actions">
                {tutorialHref ? <a className="cb-recipe-action cb-recipe-action--primary" href={tutorialHref}>
                    <svg className="cb-recipe-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden="true">
                      <path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20" />
                      <path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z" />
                    </svg>
                    <span>{tutorialLabel}</span>
                  </a> : null}
                {apiHref ? <a className="cb-recipe-action cb-recipe-action--secondary" href={apiHref}>
                    <svg className="cb-recipe-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" aria-hidden="true">
                      <path d="M8 4H6a2 2 0 0 0-2 2v4" />
                      <path d="M8 20H6a2 2 0 0 1-2-2v-4" />
                      <path d="M16 4h2a2 2 0 0 1 2 2v4" />
                      <path d="M16 20h2a2 2 0 0 0 2-2v-4" />
                    </svg>
                    <span>{apiLabel}</span>
                  </a> : null}
              </div>
              <div className="cb-recipe-sidebar-caption">
                Step-by-step tutorial and API reference for this workflow.
              </div>
            </div>

            {authSections.length ? <div className="cb-recipe-sidebar-card">
                <div className="cb-recipe-sidebar-kicker">Auth</div>
                {authSections.map(section => <div className="cb-recipe-auth-block" key={section.title}>
                    <div className="cb-recipe-auth-title">{section.title}</div>
                    <div className="cb-recipe-sidebar-copy">
                      {section.text}{" "}
                      {section.href ? <a href={section.href}>{section.linkLabel || "Learn more"}</a> : null}
                    </div>
                    {section.scopes?.length ? <div className="cb-recipe-scope-pills cb-recipe-auth-scopes">
                        {section.scopes.map(scope => <span className="cb-recipe-scope-pill" key={scope}>
                            {scope}
                          </span>)}
                      </div> : null}
                  </div>)}
              </div> : null}

            {glance.length ? <div className="cb-recipe-sidebar-card">
                <div className="cb-recipe-sidebar-kicker">At a glance</div>
                <dl className="cb-recipe-glance">
                  {glance.map(row => <div className="cb-recipe-glance-row" key={row.label}>
                      <dt>{row.label}</dt>
                      <dd>{row.value}</dd>
                    </div>)}
                </dl>
              </div> : null}

            {headers.length ? <div className="cb-recipe-sidebar-card">
                <div className="cb-recipe-sidebar-kicker">Required headers</div>
                <div className="cb-recipe-auth-title">Partner API</div>
                <div className="cb-recipe-scope-pills">
                  {headers.map(h => <span className="cb-recipe-scope-pill" key={h}>
                      {h}
                    </span>)}
                </div>
              </div> : null}
          </aside>
        </div>
      </div>
    </div>;
};

<CbRecipePage
  recipeId="get-note-content-by-note-id"
  title="Fetch Note by Note ID"
  description="The shared clinical note for a visit lives under `note_id`, not `ambient_session_id`. Pass the `note_id` from create when you call get note content after generation completes."
  meta={
<CbRecipeMeta
  items={[
    { type: "time", label: "5 min" },
    { type: "level", label: "Beginner" },
    { type: "product", label: "Ambient" },
    { type: "surface", label: "API", tone: "api" },
  ]}
/>
}
  sidebar={{
tutorialHref: "/documentation/tutorials/ambient-websocket-code-example",
apiHref: "/api-reference/ambient-content/note-content",
authSections: [
  {
    title: "Partner API",
    text: "Authenticate every REST call with Partner Token headers on each request. See",
    href: "/documentation/get-started/partner-authentication",
    linkLabel: "Partner authentication",
    scopes: ["sdp_suki_token", "sdp_provider_id"],
  },
],
glance: [
  { label: "Product", value: "Ambient" },
  { label: "Surface", value: "Partner API" },
  { label: "Time", value: "~5 min" },
  { label: "Level", value: "Beginner" },
],
}}
>
  ## Problem

  Partners often call note content APIs with `ambient_session_id` and get the wrong scope of data or empty results. Session content reflects one recording. The shared clinical note, including Web SDK edits, is keyed by `note_id`.

  Pass `note_id` from the create response to [Get note content](/api-reference/ambient-content/note-content). Wait for generation to finish first using [Wait for Ambient before fetch](/documentation/cookbooks/wait-for-status-before-retrieve).

  ## Architecture

  ```mermaid actions={false} theme={"theme":{"light":"one-light","dark":"material-theme-darker"}}
  %%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#FFFBDE','primaryTextColor':'#1C1C1C','primaryBorderColor':'#FFD147','lineColor':'#6F5410','secondaryColor':'#FFFDF5','tertiaryColor':'#FFEB94','fontSize':'13px'}}}%%
  flowchart LR
    A[Create ambient session] --> B[Store note_id]
    B --> C[Stream and end session]
    C --> D[Poll until completed]
    D --> E["GET /note/{note_id}/content"]
  ```

  ## Prerequisites

  <Check>Completed [Partner onboarding](/documentation/get-started/partner-onboarding) and have `partner_id` with a valid Partner Token flow.</Check>

  <Check>A `note_id` from the create ambient session response, stored before streaming starts.</Check>

  <Check>Session status is `completed` (or you received a success webhook) before calling note content.</Check>

  ## Solution

  <Columns cols={3}>
    <Card title="Before">
      Store `note_id` from create, then wait until status is `completed`.
    </Card>

    <Card title="This Recipe">
      Call `GET /ambient/note/{note_id}/content`.
    </Card>

    <Card title="Next">
      Map `summary` into your EHR or UI. Re-fetch after Web SDK edits if needed.
    </Card>
  </Columns>

  Pass `note_id` from create to [Get note content](/api-reference/ambient-content/note-content). Wait for generation first ([Poll status](/documentation/cookbooks/wait-for-status-before-retrieve)).

  <Tabs>
    <Tab title="CURL">
      ```bash theme={"theme":{"light":"one-light","dark":"material-theme-darker"}}
      # Set NOTE_ID from create, after status is completed.
      curl --request GET \
        --url "https://sdp.suki.ai/api/v1/ambient/note/${NOTE_ID}/content" \
        --header "sdp_suki_token: ${SDP_SUKI_TOKEN}" \
        --header "sdp_provider_id: ${SDP_PROVIDER_ID}"
      ```
    </Tab>

    <Tab title="Python">
      ```python theme={"theme":{"light":"one-light","dark":"material-theme-darker"}}
      # get_note_content_by_note_id.py
      # pip install requests

      import json
      import os

      import requests

      BASE_URL = os.environ.get("SUKI_BASE_URL", "https://sdp.suki.ai")
      SDP_SUKI_TOKEN = os.environ["SDP_SUKI_TOKEN"]
      SDP_PROVIDER_ID = os.environ["SDP_PROVIDER_ID"]
      NOTE_ID = os.environ["NOTE_ID"]  # from create ambient session response


      def rest_headers() -> dict[str, str]:
          return {
              "sdp_suki_token": SDP_SUKI_TOKEN,
              "sdp_provider_id": SDP_PROVIDER_ID,
          }


      def get_note_content(note_id: str):
          url = f"{BASE_URL}/api/v1/ambient/note/{note_id}/content"
          response = requests.get(url, headers=rest_headers(), timeout=30)
          response.raise_for_status()
          return response.json()


      note = get_note_content(NOTE_ID)
      # note["summary"] holds section content for the shared clinical note
      print(json.dumps(note, indent=2))
      ```
    </Tab>

    <Tab title="TypeScript">
      ```typescript theme={"theme":{"light":"one-light","dark":"material-theme-darker"}}
      // get-note-content-by-note-id.ts

      const BASE_URL = process.env.SUKI_BASE_URL ?? "https://sdp.suki.ai";
      const SDP_SUKI_TOKEN = process.env.SDP_SUKI_TOKEN!;
      const SDP_PROVIDER_ID = process.env.SDP_PROVIDER_ID!;
      const NOTE_ID = process.env.NOTE_ID!; // from create ambient session response

      function restHeaders(): Record<string, string> {
        return {
          sdp_suki_token: SDP_SUKI_TOKEN,
          sdp_provider_id: SDP_PROVIDER_ID,
        };
      }

      async function getNoteContent(noteId: string): Promise<unknown> {
        const response = await fetch(
          `${BASE_URL}/api/v1/ambient/note/${noteId}/content`,
          { headers: restHeaders() }
        );

        if (!response.ok) {
          throw new Error(`Get note content failed: ${response.status}`);
        }

        return response.json();
      }

      const note = (await getNoteContent(NOTE_ID)) as {
        summary?: unknown;
      };
      // note.summary holds section content for the shared clinical note
      console.log(JSON.stringify(note, null, 2));
      ```
    </Tab>
  </Tabs>

  <Steps>
    <Step title="Store note_id from create">
      Save `note_id` from the create ambient session response. You need it for every note content call on that visit.
    </Step>

    <Step title="Finish streaming and poll status">
      End the ambient session, then poll until status is `completed`. See [Wait for Ambient before fetch](/documentation/cookbooks/wait-for-status-before-retrieve).
    </Step>

    <Step title="Call GET note content with note_id">
      Pass `note_id` as the path parameter: `GET /api/v1/ambient/note/{note_id}/content`. See [Get note content](/api-reference/ambient-content/note-content).
    </Step>

    <Step title="Parse section content from the response">
      The response includes `summary` with section content for the shared clinical note. Re-fetch after Web SDK edits to get the latest version.
    </Step>
  </Steps>

  ## Try it

  <Card>
    * **note\_id returns the shared clinical note**

      Using `note_id` returns the visit note, including edits from the Web SDK. Session-scoped APIs do not substitute for this endpoint.

    * **Status must be completed first**

      Calling note content before status reaches `completed` often returns empty or partial data. Poll status or wait for a success webhook.

    * **summary holds section content**

      The JSON response `summary` field contains the generated note sections. Map these to your EHR or display layer.
  </Card>

  ## Common mistakes

  <Warning>
    * Pass `ambient_session_id` as `note_id`.
    * Call note content before status is `completed` (or before a success webhook).
    * Discard `note_id` after create and try to derive the note ID from the session.
  </Warning>

  ## Related cookbooks

  <RelatedDocGrid kind="cookbook">
    <RelatedDocCard href="/documentation/cookbooks/wait-for-status-before-retrieve" title="Wait for Ambient before Fetch" description="Poll until status is completed." workflow="Ambient" surfaceLabel="API" time="5 min" variant="cookbook" art={<WaitAmbientArt />} />

    <RelatedDocCard href="/documentation/cookbooks/pass-emr-encounter-id" title="Share One Note across Products" description="Share one note with emr_encounter_id." workflow="Ambient" surfaceLabel="API" time="5 min" variant="cookbook" art={<ShareNoteArt />} />
  </RelatedDocGrid>
</CbRecipePage>


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