AlgoSeek Schema — Docs section (Docusaurus mirror)

JSON-LD samples for 8 documentation page_types. Mirror live at seo.devalgoseek.com/docs. Each section: TEST (real data) | TEMPLATE (variables for SeoService wiring).

1. LANDING 2. GUIDE 3. TUTORIAL_INDEX 4. TUTORIAL 5. REFERENCE_INDEX 6. REFERENCE_GROUP 7. ENDPOINT 8. LEGAL

1. LANDING — `/docs`

Documentation root page — TechArticle + ItemList of top actions

TEST (real data)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Algoseek",
          "item": "https://algoseek.com"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Documentation",
          "item": "https://algoseek.com/docs"
        }
      ]
    },
    {
      "@type": "TechArticle",
      "@id": "https://algoseek.com/docs#article",
      "url": "https://algoseek.com/docs",
      "name": "algoseek Datasets API Documentation",
      "headline": "algoseek Datasets API | Institutional Market Data Reference",
      "description": "Access regulatory-grade US market data via the algoseek Datasets API. Unified architecture for backtesting and production with proprietary security masters for equities, options, and futures.",
      "inLanguage": "en-US",
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      },
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "audience": {
        "@type": "Audience",
        "audienceType": "Quantitative researchers, algorithmic traders, data engineers"
      },
      "mainEntity": {
        "@type": "ItemList",
        "itemListElement": [
          {
            "@type": "ListItem",
            "position": 1,
            "item": {
              "@type": "Thing",
              "name": "Getting Started",
              "url": "https://algoseek.com/docs/rest-api/intro"
            }
          },
          {
            "@type": "ListItem",
            "position": 2,
            "item": {
              "@type": "Thing",
              "name": "API Reference",
              "url": "https://algoseek.com/docs/rest-api/reference"
            }
          },
          {
            "@type": "ListItem",
            "position": 3,
            "item": {
              "@type": "Thing",
              "name": "Tutorials",
              "url": "https://algoseek.com/docs/rest-api/tutorials"
            }
          }
        ]
      }
    }
  ]
}
</script>
TEMPLATE (variables)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    "{{ breadcrumb }}",
    {
      "@type": "TechArticle",
      "@id": "{{ canonical_url }}#article",
      "url": "{{ canonical_url }}",
      "name": "{{ page.h1 }}",
      "headline": "{{ page.meta_title }}",
      "description": "{{ page.meta_description }}",
      "inLanguage": "en-US",
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      },
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "author": {
        "@id": "https://algoseek.com/#organization"
      },
      "dateModified": "{{ page.updated_at | iso_date }}",
      "audience": {
        "@type": "Audience",
        "audienceType": "{{ audience_label | default('Quantitative researchers, algorithmic traders, data engineers') }}"
      },
      "mainEntity": "{{ IF top_links | length >= 1 then emit: {'@type':'ItemList', itemListElement:[for each link emit {'@type':'ListItem', position, item:{'@type':'Thing', name, url}}]} ELSE OMIT mainEntity entirely (do NOT emit empty array) }}"
    }
  ]
}
</script>

Implementation notes

  • Why `TechArticle` — Documentation root acts as long-form article describing the API as a whole.
  • `SoftwareApplication` parent — Single entity `#datasets-api` referenced by every doc page via `isPartOf` — unifies 88 pages under one entity for Google KG.
  • `mainEntity ItemList` — Top-3 next actions (Quickstart / Reference / Tutorials) for AI Overviews.
  • `audience.audienceType` — Concrete persona — better than generic schema.Audience.

2. GUIDE — `/docs/rest-api/{slug}`

Conceptual / how-to-think guide pages (intro, authentication, data-schema, error-handling, ...) — TechArticle + FAQPage when applicable

TEST (real data)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Algoseek",
          "item": "https://algoseek.com"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Documentation",
          "item": "https://algoseek.com/docs"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "How to Authenticate",
          "item": "https://algoseek.com/docs/rest-api/authentication"
        }
      ]
    },
    {
      "@type": "TechArticle",
      "@id": "https://algoseek.com/docs/rest-api/authentication#article",
      "url": "https://algoseek.com/docs/rest-api/authentication",
      "name": "How to Authenticate the algoseek Datasets API",
      "headline": "How to Authenticate the algoseek Datasets API",
      "description": "Generate an API key, send it via the X-API-KEY header, and verify your identity against the algoseek auth service.",
      "inLanguage": "en-US",
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      },
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "author": {
        "@id": "https://algoseek.com/#organization"
      },
      "dateModified": "2026-05-27",
      "datePublished": "2025-09-01",
      "proficiencyLevel": "Beginner"
    },
    {
      "@type": "FAQPage",
      "@id": "https://algoseek.com/docs/rest-api/authentication#faq",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "How do I get an API key?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Sign in to the algoseek Console, open the API Keys panel, and click Create New Key. Your key is shown once — store it securely."
          }
        },
        {
          "@type": "Question",
          "name": "Where do I put the API key in a request?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Send it as the `X-API-KEY` HTTP header on every request. Do not include it as a query string parameter."
          }
        }
      ]
    }
  ]
}
</script>
TEMPLATE (variables)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    "{{ breadcrumb }}",
    {
      "@type": "TechArticle",
      "@id": "{{ canonical_url }}#article",
      "url": "{{ canonical_url }}",
      "name": "{{ page.h1 }}",
      "headline": "{{ page.meta_title }}",
      "description": "{{ page.meta_description }}",
      "inLanguage": "en-US",
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      },
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "author": {
        "@id": "https://algoseek.com/#organization"
      },
      "dateModified": "{{ page.updated_at | iso_date }}",
      "datePublished": "{{ page.created_at | iso_date }}",
      "proficiencyLevel": "{{ page.proficiency | default('Beginner') }}"
    },
    "{# EMIT FAQPage ONLY when detector finds ≥2 Q-A pairs. Detector rules ALL must pass:   (a) H2 or H3 textContent ends with '?';   (b) heading text length ≥10 chars (filter trivial '?');   (c) next non-empty <p> after the heading anchor has text ≥30 chars;   (d) at least 2 such pairs on the page. If detector fails, DO NOT emit FAQPage — Google demotes fake markup. #}",
    {
      "@type": "FAQPage",
      "@id": "{{ canonical_url }}#faq",
      "mainEntity": "{{ faq_items | for each emit: {'@type':'Question', name:<heading_text>, acceptedAnswer:{'@type':'Answer', text:<paragraph_text>}} }}"
    }
  ]
}
</script>

Implementation notes

  • `FAQPage` is the big SEO win — Triggers rich FAQ result in SERP for queries 'how to authenticate algoseek api'.
  • Detector heuristic — Look for h2/h3 whose textContent ends with '?'. The first <p> or text node after that anchor is the answer. Min 2 Q-A pairs to qualify.
  • `proficiencyLevel` — Schema.org TechArticle-specific. Use Beginner/Intermediate/Expert. Helps Google rank correct skill tier for the searcher.
  • Do NOT publish FAQPage if there's no real Q&A — Google demotes pages that fake FAQ markup.

3. TUTORIAL_INDEX — `/docs/rest-api/tutorials`

Hub listing all tutorials — CollectionPage + ItemList

TEST (real data)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Algoseek",
          "item": "https://algoseek.com"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Documentation",
          "item": "https://algoseek.com/docs"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Tutorials",
          "item": "https://algoseek.com/docs/rest-api/tutorials"
        }
      ]
    },
    {
      "@type": "CollectionPage",
      "@id": "https://algoseek.com/docs/rest-api/tutorials#collection",
      "url": "https://algoseek.com/docs/rest-api/tutorials",
      "name": "algoseek Datasets API Tutorials",
      "description": "Step-by-step guides covering filtering, pagination, reference data, and access rules.",
      "inLanguage": "en-US",
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      },
      "mainEntity": {
        "@type": "ItemList",
        "numberOfItems": 8,
        "itemListOrder": "Ascending",
        "itemListElement": [
          {
            "@type": "ListItem",
            "position": 1,
            "item": {
              "@type": "Thing",
              "name": "Fetch your first market data",
              "url": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data"
            }
          },
          {
            "@type": "ListItem",
            "position": 2,
            "item": {
              "@type": "Thing",
              "name": "Working with reference data and SecID",
              "url": "https://algoseek.com/docs/rest-api/tutorial/working-with-reference-data-and-secid"
            }
          },
          {
            "@type": "ListItem",
            "position": 3,
            "item": {
              "@type": "Thing",
              "name": "Pagination and query parameters",
              "url": "https://algoseek.com/docs/rest-api/tutorial/pagination-and-query-parameters"
            }
          },
          {
            "@type": "ListItem",
            "position": 4,
            "item": {
              "@type": "Thing",
              "name": "Data filtering",
              "url": "https://algoseek.com/docs/rest-api/tutorial/data-filtering"
            }
          },
          {
            "@type": "ListItem",
            "position": 5,
            "item": {
              "@type": "Thing",
              "name": "Advanced filtering",
              "url": "https://algoseek.com/docs/rest-api/tutorial/advanced-filtering"
            }
          },
          {
            "@type": "ListItem",
            "position": 6,
            "item": {
              "@type": "Thing",
              "name": "Customizing data output",
              "url": "https://algoseek.com/docs/rest-api/tutorial/customizing-data-output"
            }
          },
          {
            "@type": "ListItem",
            "position": 7,
            "item": {
              "@type": "Thing",
              "name": "Metadata",
              "url": "https://algoseek.com/docs/rest-api/tutorial/metadata"
            }
          },
          {
            "@type": "ListItem",
            "position": 8,
            "item": {
              "@type": "Thing",
              "name": "Access rule",
              "url": "https://algoseek.com/docs/rest-api/tutorial/access-rule"
            }
          }
        ]
      }
    }
  ]
}
</script>
TEMPLATE (variables)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    "{{ breadcrumb }}",
    {
      "@type": "CollectionPage",
      "@id": "{{ canonical_url }}#collection",
      "url": "{{ canonical_url }}",
      "name": "{{ page.h1 }}",
      "description": "{{ page.meta_description }}",
      "inLanguage": "en-US",
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      },
      "mainEntity": "{{ IF children | length >= 1 then emit: {'@type':'ItemList', numberOfItems:children|length, itemListOrder:'Ascending', itemListElement:[for each child emit {'@type':'ListItem', position, item:{'@type':'Thing', name, url}}]} ELSE OMIT mainEntity (do NOT emit empty list) }}"
    }
  ]
}
</script>

Implementation notes

  • Why `CollectionPage` not `TechArticle` — Hub page collecting tutorials — `CollectionPage` signals to Google that this is a list, not the content itself.
  • `itemListOrder: Ascending` — Required for proper ItemList ranking (otherwise unordered).
  • Per-item `ListItem` with `position` — Same pattern as breadcrumbs — Google preserves order in AI Overviews.

4. TUTORIAL — `/docs/rest-api/tutorial/{slug}` ⭐

Step-by-step tutorial — HowTo with HowToStep + totalTime + tool + supply. Eligible for HowTo carousel rich result.

TEST (real data)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Algoseek",
          "item": "https://algoseek.com"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Documentation",
          "item": "https://algoseek.com/docs"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Tutorials",
          "item": "https://algoseek.com/docs/rest-api/tutorials"
        },
        {
          "@type": "ListItem",
          "position": 4,
          "name": "Fetch your first market data",
          "item": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data"
        }
      ]
    },
    {
      "@type": "HowTo",
      "@id": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data#howto",
      "url": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data",
      "name": "Fetch your first market data from algoseek",
      "description": "Make your first authenticated request to the algoseek Datasets API and retrieve US Equity tick data for a single symbol.",
      "inLanguage": "en-US",
      "totalTime": "PT5M",
      "estimatedCost": {
        "@type": "MonetaryAmount",
        "value": "0",
        "currency": "USD"
      },
      "tool": [
        {
          "@type": "HowToTool",
          "name": "Python 3.10+"
        },
        {
          "@type": "HowToTool",
          "name": "requests library"
        },
        {
          "@type": "HowToTool",
          "name": "curl (alternative)"
        }
      ],
      "supply": [
        {
          "@type": "HowToSupply",
          "name": "Algoseek API key",
          "url": "https://algoseek.com/docs/rest-api/authentication"
        }
      ],
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Authenticate",
          "url": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data#authenticate",
          "image": "https://algoseek.com/static/img/algoseek_logo.svg",
          "text": "Set X-API-KEY header with your algoseek API key."
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Choose dataset & ticker",
          "url": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data#choose-dataset",
          "image": "https://algoseek.com/static/img/algoseek_logo.svg",
          "text": "Pick us-equity-tick and ticker AAPL."
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Send the request",
          "url": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data#send-request",
          "image": "https://algoseek.com/static/img/algoseek_logo.svg",
          "text": "GET https://api.algoseek.com/v1/data/us-equity/eq-taq-1-min/AAPL?date=2025-09-15"
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Parse the response",
          "url": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data#parse",
          "image": "https://algoseek.com/static/img/algoseek_logo.svg",
          "text": "Response is JSON with rows of OHLCV bars; iterate over `data[]` to extract timestamp + price + volume."
        }
      ],
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "author": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      }
    }
  ]
}
</script>
TEMPLATE (variables)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    "{{ breadcrumb }}",
    {
      "@type": "HowTo",
      "@id": "{{ canonical_url }}#howto",
      "url": "{{ canonical_url }}",
      "name": "{{ page.h1 }}",
      "description": "{{ page.meta_description }}",
      "inLanguage": "en-US",
      "totalTime": "{{ page.total_time | iso_duration (estimate from total step count × 1-2 min; format ISO-8601 like 'PT5M', 'PT1H') }}",
      "estimatedCost": {
        "@type": "MonetaryAmount",
        "value": "0",
        "currency": "USD"
      },
      "tool": "{{ extract from code-block languages on page: for each unique class='language-X' emit {'@type':'HowToTool', name: language_label (python→'Python 3.10+', bash→'curl', http→'curl')} }}",
      "supply": "{{ for each link in page body pointing to prerequisite docs (e.g. /authentication, /api-headers) emit {'@type':'HowToSupply', name, url} }}",
      "step": "{{ For EACH H2 on the page emit a HowToStep with:   - position: H2 ordinal (1-based);   - name: H2 heading text (e.g. 'Send the request');   - url: canonical_url + '#' + h2.id (anchor MUST exist;     if no anchor — omit url field, do NOT ship dead link);   - image: ONLY include if a real screenshot or     illustration URL exists in the section.     DO NOT fall back to site logo — fake image signal     poisons the rich-result. If no image, omit the field;     HowTo will lose carousel eligibility but JSON-LD     stays honest. Re-add image later when real assets ship;   - text: the FIRST PARAGRAPH content under the H2     (strip HTML tags, ~50-300 chars). DO NOT duplicate     the heading text — Google needs descriptive prose. }}",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "author": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      },
      "dateModified": "{{ page.updated_at | iso_date }}"
    },
    "{# OPTIONAL: per code-block, emit one SoftwareSourceCode node referenced via mentions[] on the HowTo. See ENDPOINT section for full SoftwareSourceCode example. #}"
  ]
}
</script>

Implementation notes

  • 🥇 Biggest rich-result win — HowTo carousel renders in SERP for tutorial-shaped queries. Direct screen-real-estate above non-HowTo competitors.
  • `step.image` is REQUIRED for carousel — Without `image` Google does NOT render the HowTo as a carousel. Use real per-step screenshots if you have them. Site-default logo as a last-resort fallback technically works but reduces card quality.
  • `step.text` ≠ `step.name` — DO NOT set step.text = step.name. Extract the first <p> AFTER the H2 in DOM order. If a step has only code and no prose, take the preceding paragraph or a code-comment summary.
  • `step[].url` MUST resolve — Each step.url should anchor to a real `#section-id` on the page. If anchor doesn't exist, drop step.url entirely (don't ship dead links).
  • `totalTime` in ISO-8601 — `PT5M` = 5 minutes. `PT1H30M` = 1.5 hours. Estimate: 1-2 min/H2.
  • `tool` from code-block languages — Detect `<pre><code class='language-X'>` on page. python→'Python 3.10+', bash/sh→'curl', javascript/typescript→'Node.js', http→'curl'.
  • `supply` from prerequisite links — Find <a href> inside the article that point to other /docs/ pages describing prereqs (e.g. /authentication, /api-headers, /console).
  • Avoid — Don't use `Course` or `LearningResource` — those need accreditation context.

5. REFERENCE_INDEX — `/docs/rest-api/reference`

Hub of asset-group reference pages — APIReference + ItemList

TEST (real data)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Algoseek",
          "item": "https://algoseek.com"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Documentation",
          "item": "https://algoseek.com/docs"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "API Reference",
          "item": "https://algoseek.com/docs/rest-api/reference"
        }
      ]
    },
    {
      "@type": "APIReference",
      "@id": "https://algoseek.com/docs/rest-api/reference#api",
      "url": "https://algoseek.com/docs/rest-api/reference",
      "name": "algoseek Datasets API Reference",
      "description": "Full reference for all algoseek REST endpoints covering equities, options, futures, and reference data.",
      "inLanguage": "en-US",
      "programmingModel": "REST",
      "targetPlatform": "Algoseek Datasets API v1",
      "documentationType": "API Reference",
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      },
      "mainEntity": {
        "@type": "ItemList",
        "itemListElement": [
          {
            "@type": "ListItem",
            "position": 1,
            "item": {
              "@type": "Thing",
              "name": "Equity",
              "url": "https://algoseek.com/docs/rest-api/reference/equity"
            }
          },
          {
            "@type": "ListItem",
            "position": 2,
            "item": {
              "@type": "Thing",
              "name": "Equity Options",
              "url": "https://algoseek.com/docs/rest-api/reference/equity-options"
            }
          },
          {
            "@type": "ListItem",
            "position": 3,
            "item": {
              "@type": "Thing",
              "name": "Equity Reference",
              "url": "https://algoseek.com/docs/rest-api/reference/equity-reference"
            }
          },
          {
            "@type": "ListItem",
            "position": 4,
            "item": {
              "@type": "Thing",
              "name": "Futures",
              "url": "https://algoseek.com/docs/rest-api/reference/futures"
            }
          },
          {
            "@type": "ListItem",
            "position": 5,
            "item": {
              "@type": "Thing",
              "name": "Options Reference",
              "url": "https://algoseek.com/docs/rest-api/reference/options-reference"
            }
          },
          {
            "@type": "ListItem",
            "position": 6,
            "item": {
              "@type": "Thing",
              "name": "Metadata",
              "url": "https://algoseek.com/docs/rest-api/reference/metadata"
            }
          },
          {
            "@type": "ListItem",
            "position": 7,
            "item": {
              "@type": "Thing",
              "name": "Identity & Access",
              "url": "https://algoseek.com/docs/rest-api/reference/identity-access"
            }
          }
        ]
      }
    }
  ]
}
</script>
TEMPLATE (variables)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    "{{ breadcrumb }}",
    {
      "@type": "APIReference",
      "@id": "{{ canonical_url }}#api",
      "url": "{{ canonical_url }}",
      "name": "{{ page.h1 }}",
      "description": "{{ page.meta_description }}",
      "inLanguage": "en-US",
      "programmingModel": "REST",
      "targetPlatform": "{{ api_name | default('Algoseek Datasets API v1') }}",
      "documentationType": "API Reference",
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      },
      "mainEntity": "{{ IF asset_groups | length >= 1 then emit: {'@type':'ItemList', itemListElement:[for each group emit {'@type':'ListItem', position, item:{'@type':'Thing', name:group.h1, url:group.canonical}}]} ELSE OMIT mainEntity entirely }}"
    }
  ]
}
</script>

Implementation notes

  • Why `APIReference` here — This IS documentation OF an API — `APIReference` is the exact schema.org type for that. Don't use WebAPI on the index page — WebAPI is the API itself, not its docs.
  • `programmingModel` + `targetPlatform` — schema.org-specific to APIReference. Strong AI-citation signal.
  • ItemList uses Thing wrapper — Same `item:{Thing, name, url}` pattern as Landing/Collection — keeps ListItem clean for Google's list parser.

6. REFERENCE_GROUP — `/docs/rest-api/reference/{asset}` ⭐

Asset-group hub (equity, futures, options, ...) — CollectionPage + hasPart + standalone Dataset node

TEST (real data)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Algoseek",
          "item": "https://algoseek.com"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Documentation",
          "item": "https://algoseek.com/docs"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "API Reference",
          "item": "https://algoseek.com/docs/rest-api/reference"
        },
        {
          "@type": "ListItem",
          "position": 4,
          "name": "Equity",
          "item": "https://algoseek.com/docs/rest-api/reference/equity"
        }
      ]
    },
    {
      "@type": "CollectionPage",
      "@id": "https://algoseek.com/docs/rest-api/reference/equity#collection",
      "url": "https://algoseek.com/docs/rest-api/reference/equity",
      "name": "US Equity Market Data API endpoints",
      "description": "Tick, Intraday, and Daily endpoints for US Equity TAQ data.",
      "inLanguage": "en-US",
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      },
      "hasPart": [
        {
          "@type": "WebPage",
          "@id": "https://algoseek.com/docs/rest-api/reference/us-equity-tick",
          "url": "https://algoseek.com/docs/rest-api/reference/us-equity-tick",
          "name": "Equity Tick"
        },
        {
          "@type": "WebPage",
          "@id": "https://algoseek.com/docs/rest-api/reference/us-equity-intraday-bar",
          "url": "https://algoseek.com/docs/rest-api/reference/us-equity-intraday-bar",
          "name": "Equity Intraday Bar"
        },
        {
          "@type": "WebPage",
          "@id": "https://algoseek.com/docs/rest-api/reference/us-equity-daily",
          "url": "https://algoseek.com/docs/rest-api/reference/us-equity-daily",
          "name": "Equity Daily"
        }
      ]
    },
    {
      "@type": "Dataset",
      "@id": "https://algoseek.com/datasets/us-equity-taq#dataset",
      "name": "Algoseek US Equity TAQ",
      "description": "Trade and Quote data for all US-listed equities, consolidated NBBO from SIP feeds. Available as tick, 1-minute bars, and daily bars.",
      "url": "https://algoseek.com/datasets/us-equity-taq",
      "creator": {
        "@id": "https://algoseek.com/#organization"
      },
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "license": "https://algoseek.com/docs/license",
      "keywords": [
        "TAQ",
        "tick data",
        "NBBO",
        "US equities",
        "SIP feeds",
        "market microstructure"
      ],
      "spatialCoverage": {
        "@type": "Place",
        "name": "United States",
        "geo": {
          "@type": "GeoShape",
          "addressCountry": "US"
        }
      },
      "temporalCoverage": "2007-01-01/..",
      "isAccessibleForFree": false,
      "variableMeasured": [
        {
          "@type": "PropertyValue",
          "name": "Price"
        },
        {
          "@type": "PropertyValue",
          "name": "Volume"
        },
        {
          "@type": "PropertyValue",
          "name": "Bid/Ask"
        },
        {
          "@type": "PropertyValue",
          "name": "Exchange code"
        }
      ],
      "distribution": [
        {
          "@type": "DataDownload",
          "name": "JSON via REST API",
          "encodingFormat": "application/json",
          "contentUrl": "https://api.algoseek.com/v1/data/us-equity/eq-taq/",
          "requires": "API key (X-API-KEY header)"
        },
        {
          "@type": "DataDownload",
          "name": "Free sample (1 day)",
          "encodingFormat": "text/csv",
          "contentUrl": "https://algoseek.com/sample-data/us-equity-tick-sample.csv"
        }
      ]
    }
  ]
}
</script>
TEMPLATE (variables)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    "{{ breadcrumb }}",
    {
      "@type": "CollectionPage",
      "@id": "{{ canonical_url }}#collection",
      "url": "{{ canonical_url }}",
      "name": "{{ page.h1 }}",
      "description": "{{ page.meta_description }}",
      "inLanguage": "en-US",
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      },
      "hasPart": "{{ IF child_endpoints | length >= 1 then emit: [for each endpoint emit {'@type':'WebPage', '@id':endpoint.canonical, url:endpoint.canonical, name:endpoint.h1}] ELSE OMIT hasPart (do NOT emit empty array) }}"
    },
    "{# REQUIRED if this group corresponds to one logical dataset. Skip the Dataset node only if the group is purely navigational (e.g. Metadata, Identity & Access). #}",
    {
      "@type": "Dataset",
      "@id": "{{ dataset_url }}#dataset  {# stable URL, e.g. /datasets/us-equity-taq — referenced by every endpoint in this group via @id #}",
      "name": "{{ dataset.name }}  {# e.g. 'Algoseek US Equity TAQ' #}",
      "description": "{{ dataset.description }}  {# 1-2 sentences #}",
      "url": "{{ dataset_url }}",
      "creator": {
        "@id": "https://algoseek.com/#organization"
      },
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "license": "https://algoseek.com/docs/license",
      "keywords": "{{ dataset.keywords | join with comma (e.g. 'TAQ, tick data, NBBO, US equities') }}",
      "spatialCoverage": "{{ Place node — e.g. {'@type':'Place', name:'United States', geo:{'@type':'GeoShape', addressCountry:'US'}} }}",
      "temporalCoverage": "{{ ISO-8601 interval — start/end or start/.. for ongoing, e.g. '2007-01-01/..' }}",
      "isAccessibleForFree": "{{ true if free tier covers core access, else false. Pair with a free sample distribution below. }}",
      "variableMeasured": "{{ for each top-level field in API response (Price, Volume, Bid, Ask, ...) emit {'@type':'PropertyValue', name} }}",
      "distribution": "{{ REQUIRED 2+ items:   (1) primary DataDownload with       encodingFormat='application/json',       contentUrl=base API endpoint,       requires='API key (X-API-KEY)';   (2) free sample DataDownload with       contentUrl=public CSV/JSON preview       Googlebot can fetch — without this,       Dataset Search rejects the dataset. }}"
    }
  ]
}
</script>

Implementation notes

  • 🔄 Tiamat-recommended change — Use `CollectionPage + hasPart` here, NOT `APIReference + ItemList`. Group page is a hub of children, not the documentation OF an API.
  • 🥇 Google Dataset Search opens here — Each reference_group maps to ONE Dataset (e.g. equity → US Equity TAQ). 59 endpoint pages do NOT each get their own Dataset — they all reference the parent group's Dataset via `@id`.
  • Free sample distribution is required — Google Dataset Search will not index a Dataset where Googlebot can't fetch any distribution. Include a free preview CSV/JSON URL.
  • `isAccessibleForFree: false` — Honest signal. Combine with free-sample distribution.
  • `variableMeasured` — Helps Dataset Search match queries like 'NBBO tick data with exchange code'.

7. ENDPOINT — `/docs/rest-api/reference/{endpoint-slug}` ⭐

Per-endpoint detail page (auto-generated from OpenAPI) — WebAPI + ConsumeAction with EntryPoint + SoftwareSourceCode per example

TEST (real data)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Algoseek",
          "item": "https://algoseek.com"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Documentation",
          "item": "https://algoseek.com/docs"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "API Reference",
          "item": "https://algoseek.com/docs/rest-api/reference"
        },
        {
          "@type": "ListItem",
          "position": 4,
          "name": "Equity Tick",
          "item": "https://algoseek.com/docs/rest-api/reference/us-equity-tick"
        }
      ]
    },
    {
      "@type": "WebAPI",
      "@id": "https://algoseek.com/docs/rest-api/reference/us-equity-tick#webapi",
      "url": "https://algoseek.com/docs/rest-api/reference/us-equity-tick",
      "name": "US Equity Tick endpoint",
      "description": "Retrieve historical tick-level TAQ data for a single US-listed equity on a specific date.",
      "inLanguage": "en-US",
      "documentation": "https://algoseek.com/docs/rest-api/reference/us-equity-tick",
      "termsOfService": "https://algoseek.com/docs/terms-of-service",
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      },
      "provider": {
        "@id": "https://algoseek.com/#organization"
      },
      "potentialAction": {
        "@type": "ConsumeAction",
        "name": "Fetch tick data for a ticker",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://api.algoseek.com/v1/data/us-equity/eq-taq/{ticker}?date={iso_date}",
          "httpMethod": "GET",
          "encodingType": "application/json",
          "contentType": "application/json",
          "actionPlatform": [
            "https://schema.org/DesktopWebPlatform",
            "https://schema.org/MobileWebPlatform"
          ]
        },
        "actionAccessibilityRequirement": {
          "@type": "ActionAccessSpecification",
          "category": "registered API key required",
          "requiresSubscription": true
        },
        "object": {
          "@id": "https://algoseek.com/datasets/us-equity-taq#dataset"
        }
      }
    },
    {
      "@type": "Dataset",
      "@id": "https://algoseek.com/datasets/us-equity-taq#dataset",
      "name": "Algoseek US Equity TAQ",
      "url": "https://algoseek.com/datasets/us-equity-taq"
    },
    {
      "@type": "SoftwareSourceCode",
      "@id": "https://algoseek.com/docs/rest-api/reference/us-equity-tick#example-python",
      "name": "Python example: fetch AAPL tick data",
      "programmingLanguage": "Python",
      "codeRepository": "https://github.com/algoseekgit/api-examples",
      "codeSampleType": "code snippet",
      "text": "import requests\nr = requests.get(\n    'https://api.algoseek.com/v1/data/us-equity/eq-taq/AAPL',\n    params={'date': '2025-09-15'},\n    headers={'X-API-KEY': 'YOUR_KEY'},\n)\nfor row in r.json()['data']:\n    print(row['timestamp'], row['price'], row['volume'])\n"
    },
    {
      "@type": "SoftwareSourceCode",
      "@id": "https://algoseek.com/docs/rest-api/reference/us-equity-tick#example-curl",
      "name": "cURL example: fetch AAPL tick data",
      "programmingLanguage": "Bash",
      "codeSampleType": "code snippet",
      "text": "curl -H 'X-API-KEY: YOUR_KEY' \\\n  'https://api.algoseek.com/v1/data/us-equity/eq-taq/AAPL?date=2025-09-15'\n"
    }
  ]
}
</script>
TEMPLATE (variables)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "SoftwareApplication",
      "@id": "https://algoseek.com/#datasets-api",
      "name": "Algoseek Datasets API",
      "applicationCategory": "DeveloperApplication",
      "operatingSystem": "All",
      "url": "https://algoseek.com/docs",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "isPartOf": {
        "@id": "https://algoseek.com/#website"
      },
      "softwareVersion": "v1",
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "USD",
        "description": "Free tier available; paid plans for production volume."
      }
    },
    "{{ breadcrumb }}",
    {
      "@type": "WebAPI",
      "@id": "{{ canonical_url }}#webapi",
      "url": "{{ canonical_url }}",
      "name": "{{ endpoint.h1 }}",
      "description": "{{ endpoint.meta_description }}",
      "inLanguage": "en-US",
      "documentation": "{{ canonical_url }}",
      "termsOfService": "https://algoseek.com/docs/terms-of-service",
      "isPartOf": {
        "@id": "https://algoseek.com/#datasets-api"
      },
      "provider": {
        "@id": "https://algoseek.com/#organization"
      },
      "potentialAction": {
        "@type": "ConsumeAction",
        "name": "{{ endpoint.action_name  {# e.g. 'Fetch tick data for a ticker'. Build from h1 + verb: 'Fetch <h1>' #} }}",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "{{ endpoint.url_template  {# from OpenAPI: 'https://api.algoseek.com/' + path with {param} placeholders, e.g. '/v1/data/us-equity/eq-taq/{ticker}?date={iso_date}' #} }}",
          "httpMethod": "{{ endpoint.http_method | default('GET') }}",
          "encodingType": "application/json",
          "contentType": "application/json",
          "actionPlatform": [
            "https://schema.org/DesktopWebPlatform",
            "https://schema.org/MobileWebPlatform"
          ]
        },
        "actionAccessibilityRequirement": {
          "@type": "ActionAccessSpecification",
          "category": "registered API key required",
          "requiresSubscription": true
        },
        "object": "{{ {'@id': parent_dataset_url + '#dataset'} {# REQUIRED — link to the Dataset node defined on the parent group's /datasets/<id>/ page #} }}"
      }
    },
    "{# Reference parent Dataset by @id ONLY — full Dataset node lives on /datasets/<id>/. This is a 'stub' for graph linkage. #}",
    {
      "@type": "Dataset",
      "@id": "{{ parent_dataset_url }}#dataset",
      "name": "{{ parent_dataset.name }}",
      "url": "{{ parent_dataset_url }}"
    },
    "{# Emit ONE SoftwareSourceCode node per <pre><code class='language-X'> on the page. Walk DOM, group by language, give each a stable @id like #example-python / #example-curl. #}",
    {
      "@type": "SoftwareSourceCode",
      "@id": "{{ canonical_url + '#example-' + code_block.lang  {# unique per (page, language) #} }}",
      "name": "{{ <human-readable title>  {# e.g. 'Python example: fetch AAPL tick data'. Build from language + endpoint h1 #} }}",
      "programmingLanguage": "{{ language label  {# Python / Bash / JavaScript / TypeScript / Go / Ruby / Java #} }}",
      "codeSampleType": "code snippet",
      "text": "{{ code_block.code  {# raw textContent of the <pre><code>, preserve newlines and indentation, no HTML #} }}",
      "isPartOf": "{{ {'@id': canonical_url + '#webapi'}  {# link back to the WebAPI node #} }}"
    }
  ]
}
</script>

Implementation notes

  • 🔄 Switched from `APIReference` to `WebAPI` — On endpoint detail pages, `WebAPI` is more accurate than `APIReference`. `APIReference` describes documentation OF an API; `WebAPI` describes the endpoint itself. Detail pages are the endpoint.
  • `potentialAction.ConsumeAction` — Captures the actual GET/POST operation, with URL template and required auth. NOT a `SearchAction` — that's for search functionality only.
  • `actionAccessibilityRequirement` — Tiamat-flagged backfire risk: ConsumeAction without auth context can be treated as fake action. ActionAccessSpecification fixes this.
  • Dataset is referenced by `@id`, not duplicated — Full Dataset node lives on `/datasets/<id>/`. Endpoint page just references it via `@id`. Prevents conflicting Dataset signals across 59 endpoint pages.
  • `SoftwareSourceCode` per code block — Each Python/curl/Node example becomes an indexable entity. Google can surface them in 'code samples' rich results for queries like 'algoseek python fetch tick'.
  • Required attribute on EntryPoint — `urlTemplate` with `{variables}` is preferred over plain `url` — lets Google model the parameter space.

8. LEGAL — `/docs/{license,terms-of-service}`

License / ToS pages — DigitalDocument

TEST (real data)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Algoseek",
          "item": "https://algoseek.com"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Documentation",
          "item": "https://algoseek.com/docs"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "License",
          "item": "https://algoseek.com/docs/license"
        }
      ]
    },
    {
      "@type": "DigitalDocument",
      "@id": "https://algoseek.com/docs/license#document",
      "url": "https://algoseek.com/docs/license",
      "name": "Algoseek Datasets API License",
      "description": "License terms governing access to and use of the Algoseek Datasets API and underlying data.",
      "inLanguage": "en-US",
      "datePublished": "2025-09-01",
      "dateModified": "2026-05-27",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "author": {
        "@id": "https://algoseek.com/#organization"
      },
      "documentLicenseStatus": "Active"
    }
  ]
}
</script>
TEMPLATE (variables)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://algoseek.com/#website",
      "name": "Algoseek",
      "url": "https://algoseek.com",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://algoseek.com/#organization",
      "name": "Algoseek",
      "legalName": "Algoseek LLC",
      "url": "https://algoseek.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://algoseek.com/assets/design-system/logo.png",
        "width": 250,
        "height": 60
      },
      "sameAs": [
        "https://twitter.com/Algoseek",
        "https://www.linkedin.com/company/algoseek",
        "https://github.com/algoseekgit"
      ]
    },
    "{{ breadcrumb }}",
    {
      "@type": "DigitalDocument",
      "@id": "{{ canonical_url }}#document",
      "url": "{{ canonical_url }}",
      "name": "{{ page.h1 }}",
      "description": "{{ page.meta_description }}",
      "inLanguage": "en-US",
      "datePublished": "{{ page.created_at | iso_date }}",
      "dateModified": "{{ page.updated_at | iso_date }}",
      "publisher": {
        "@id": "https://algoseek.com/#organization"
      },
      "author": {
        "@id": "https://algoseek.com/#organization"
      },
      "documentLicenseStatus": "Active"
    }
  ]
}
</script>

Implementation notes

  • `DigitalDocument` over generic `WebPage` — Explicit document semantics — works for ToS, license, EULA, privacy.
  • Date pair is mandatory — `datePublished` + `dateModified` for compliance / freshness signal. Use git lastmod or DB updated_at; format ISO-8601 date.
  • `documentLicenseStatus` — schema.org-specific. Use Active / Withdrawn / Draft.
  • DO NOT set `license` to self URL — Tiamat caught this — a license document referencing itself as its own license is a circular reference. Omit `license` field entirely on legal pages (it's only needed on Datasets/Articles).