From c705b6e59973d246574c489a691c1a2a6cb4e8b7 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 11 Jun 2026 11:16:44 +0000
Subject: [PATCH 1/6] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 2a5683f..6196a42 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 25
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-b84f53b1a92511eff85645f287ec08d43adcdcc589367c015770bde836422a65.yml
-openapi_spec_hash: 71e317da7bc58cfc3bc2e4180f5b6267
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-e9b9d4ecddf4392a57de66af92ec2dac9d472eb04fdd9e8c994595f29f8ad359.yml
+openapi_spec_hash: 5cf86ed865b01dfe3a159a45315ebb49
config_hash: f86a4e06ae5ed725aa79d58d7a8dc27c
From a00ef505dc93926ee6f72bd8f4df20f944da894a Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 11 Jun 2026 12:18:00 +0000
Subject: [PATCH 2/6] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 6196a42..db7c82e 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 25
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-e9b9d4ecddf4392a57de66af92ec2dac9d472eb04fdd9e8c994595f29f8ad359.yml
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-0253523aec437a0e9c67c3386fa25ed52ebbcc0073c907f0aa3586d8010d2e9d.yml
openapi_spec_hash: 5cf86ed865b01dfe3a159a45315ebb49
-config_hash: f86a4e06ae5ed725aa79d58d7a8dc27c
+config_hash: 2b6e4424b446fe1bf93359ba758c83ed
From af91b9474c9f57003368ecb923861139b7123f42 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 11 Jun 2026 12:20:17 +0000
Subject: [PATCH 3/6] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index db7c82e..784ab77 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 25
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-0253523aec437a0e9c67c3386fa25ed52ebbcc0073c907f0aa3586d8010d2e9d.yml
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-508b6e971e1d1da37221163ee6625a7f348c96a0ddbf1ea2a8dc17b6cdfb74c3.yml
openapi_spec_hash: 5cf86ed865b01dfe3a159a45315ebb49
-config_hash: 2b6e4424b446fe1bf93359ba758c83ed
+config_hash: eebf67a9c2ccfe2641980c154d7a698e
From e33005eff8ebd4f7f41510848a1a968c987e1501 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 16 Jun 2026 23:12:01 +0000
Subject: [PATCH 4/6] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 784ab77..ec04fe4 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 25
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-508b6e971e1d1da37221163ee6625a7f348c96a0ddbf1ea2a8dc17b6cdfb74c3.yml
-openapi_spec_hash: 5cf86ed865b01dfe3a159a45315ebb49
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-2a217dd4edf98594fcf6d1e70d84c7305eec80cea96318dfe08a743cbd2468a5.yml
+openapi_spec_hash: 1f32b54c3c7623d246c5c90e4300e068
config_hash: eebf67a9c2ccfe2641980c154d7a698e
From fc0ae29ae44c8a3cac7a9ac7294ff818634a442c Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 18 Jun 2026 12:07:32 +0000
Subject: [PATCH 5/6] feat(api): api update
---
.stats.yml | 4 +-
.../dev/types/web_web_crawl_md_response.py | 79 ++++++++++++++++-
.../dev/types/web_web_scrape_html_response.py | 87 ++++++++++++++++++-
.../dev/types/web_web_scrape_md_response.py | 87 ++++++++++++++++++-
4 files changed, 247 insertions(+), 10 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index ec04fe4..4a04c1d 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 25
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-2a217dd4edf98594fcf6d1e70d84c7305eec80cea96318dfe08a743cbd2468a5.yml
-openapi_spec_hash: 1f32b54c3c7623d246c5c90e4300e068
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-aea83574a2e2963acf3791ff66f3b2d552e8b07ff00e2705ccd9a96cb3756a6e.yml
+openapi_spec_hash: 3a11cd57f8e308484a461522a7f634ee
config_hash: eebf67a9c2ccfe2641980c154d7a698e
diff --git a/src/context/dev/types/web_web_crawl_md_response.py b/src/context/dev/types/web_web_crawl_md_response.py
index ae798bc..6c8206d 100644
--- a/src/context/dev/types/web_web_crawl_md_response.py
+++ b/src/context/dev/types/web_web_crawl_md_response.py
@@ -1,12 +1,12 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import List, Optional
+from typing import Dict, List, Union, Optional
from pydantic import Field as FieldInfo
from .._models import BaseModel
-__all__ = ["WebWebCrawlMdResponse", "Metadata", "Result", "ResultMetadata", "KeyMetadata"]
+__all__ = ["WebWebCrawlMdResponse", "Metadata", "Result", "ResultMetadata", "ResultMetadataAlternate", "KeyMetadata"]
class Metadata(BaseModel):
@@ -29,10 +29,33 @@ class Metadata(BaseModel):
"""Total number of URLs crawled"""
+class ResultMetadataAlternate(BaseModel):
+ href: str
+ """Resolved alternate URL."""
+
+ hreflang: Optional[str] = None
+ """Language or locale for the alternate URL, when present."""
+
+ title: Optional[str] = None
+ """Alternate resource title, when present."""
+
+ type: Optional[str] = None
+ """Alternate resource MIME type, when present."""
+
+
class ResultMetadata(BaseModel):
crawl_depth: int = FieldInfo(alias="crawlDepth")
"""Depth relative to the start URL. 0 = start URL, 1 = one link away."""
+ final_url: str = FieldInfo(alias="finalUrl")
+ """Final URL scraped after redirects or scraper fallback, when known.
+
+ Falls back to sourceUrl when unavailable.
+ """
+
+ source_url: str = FieldInfo(alias="sourceUrl")
+ """Original URL requested by the caller."""
+
status_code: int = FieldInfo(alias="statusCode")
"""HTTP status code of the response"""
@@ -40,10 +63,58 @@ class ResultMetadata(BaseModel):
"""true if the page was fetched and parsed successfully"""
title: str
- """The page's
content (empty string if unavailable)"""
+ """Best page title extracted from the page (empty string if unavailable)."""
url: str
- """The URL that was fetched"""
+ """The crawl URL fetched for this page."""
+
+ additional_meta: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="additionalMeta", default=None)
+ """Additional non-social meta tags not promoted to top-level metadata fields."""
+
+ alternates: Optional[List[ResultMetadataAlternate]] = None
+ """Resolved alternate links from link rel=alternate tags."""
+
+ author: Optional[str] = None
+ """Author metadata, when present."""
+
+ canonical_url: Optional[str] = FieldInfo(alias="canonicalUrl", default=None)
+ """Resolved canonical URL, when present."""
+
+ description: Optional[str] = None
+ """Best description extracted from standard, Open Graph, or Twitter metadata."""
+
+ favicon: Optional[str] = None
+ """Resolved favicon URL, when present."""
+
+ image: Optional[str] = None
+ """Primary resolved preview image from Open Graph, Twitter, or image metadata."""
+
+ json_ld: Optional[List[Dict[str, object]]] = FieldInfo(alias="jsonLd", default=None)
+ """JSON-LD structured data blocks parsed from the page."""
+
+ keywords: Optional[List[str]] = None
+ """Keywords extracted from the page's keywords meta tag."""
+
+ language: Optional[str] = None
+ """Language extracted from html lang or language meta tags."""
+
+ modified_time: Optional[str] = FieldInfo(alias="modifiedTime", default=None)
+ """Modified timestamp/date from page metadata, when present."""
+
+ open_graph: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="openGraph", default=None)
+ """Open Graph metadata with the og: prefix removed and keys camel-cased."""
+
+ published_time: Optional[str] = FieldInfo(alias="publishedTime", default=None)
+ """Published timestamp/date from page metadata, when present."""
+
+ robots: Optional[str] = None
+ """Robots meta directive, when present."""
+
+ site_name: Optional[str] = FieldInfo(alias="siteName", default=None)
+ """Site or application name from page metadata."""
+
+ twitter: Optional[Dict[str, Union[str, List[str]]]] = None
+ """Twitter card metadata with the twitter: prefix removed and keys camel-cased."""
class Result(BaseModel):
diff --git a/src/context/dev/types/web_web_scrape_html_response.py b/src/context/dev/types/web_web_scrape_html_response.py
index 690047c..0a458e2 100644
--- a/src/context/dev/types/web_web_scrape_html_response.py
+++ b/src/context/dev/types/web_web_scrape_html_response.py
@@ -1,11 +1,91 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import Optional
+from typing import Dict, List, Union, Optional
from typing_extensions import Literal
+from pydantic import Field as FieldInfo
+
from .._models import BaseModel
-__all__ = ["WebWebScrapeHTMLResponse", "KeyMetadata"]
+__all__ = ["WebWebScrapeHTMLResponse", "Metadata", "MetadataAlternate", "KeyMetadata"]
+
+
+class MetadataAlternate(BaseModel):
+ href: str
+ """Resolved alternate URL."""
+
+ hreflang: Optional[str] = None
+ """Language or locale for the alternate URL, when present."""
+
+ title: Optional[str] = None
+ """Alternate resource title, when present."""
+
+ type: Optional[str] = None
+ """Alternate resource MIME type, when present."""
+
+
+class Metadata(BaseModel):
+ """Metadata extracted from the scraped page HTML."""
+
+ final_url: str = FieldInfo(alias="finalUrl")
+ """Final URL scraped after redirects or scraper fallback, when known.
+
+ Falls back to sourceUrl when unavailable.
+ """
+
+ source_url: str = FieldInfo(alias="sourceUrl")
+ """Original URL requested by the caller."""
+
+ additional_meta: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="additionalMeta", default=None)
+ """Additional non-social meta tags not promoted to top-level metadata fields."""
+
+ alternates: Optional[List[MetadataAlternate]] = None
+ """Resolved alternate links from link rel=alternate tags."""
+
+ author: Optional[str] = None
+ """Author metadata, when present."""
+
+ canonical_url: Optional[str] = FieldInfo(alias="canonicalUrl", default=None)
+ """Resolved canonical URL, when present."""
+
+ description: Optional[str] = None
+ """Best description extracted from standard, Open Graph, or Twitter metadata."""
+
+ favicon: Optional[str] = None
+ """Resolved favicon URL, when present."""
+
+ image: Optional[str] = None
+ """Primary resolved preview image from Open Graph, Twitter, or image metadata."""
+
+ json_ld: Optional[List[Dict[str, object]]] = FieldInfo(alias="jsonLd", default=None)
+ """JSON-LD structured data blocks parsed from the page."""
+
+ keywords: Optional[List[str]] = None
+ """Keywords extracted from the page's keywords meta tag."""
+
+ language: Optional[str] = None
+ """Language extracted from html lang or language meta tags."""
+
+ modified_time: Optional[str] = FieldInfo(alias="modifiedTime", default=None)
+ """Modified timestamp/date from page metadata, when present."""
+
+ open_graph: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="openGraph", default=None)
+ """Open Graph metadata with the og: prefix removed and keys camel-cased."""
+
+ published_time: Optional[str] = FieldInfo(alias="publishedTime", default=None)
+ """Published timestamp/date from page metadata, when present."""
+
+ robots: Optional[str] = None
+ """Robots meta directive, when present."""
+
+ site_name: Optional[str] = FieldInfo(alias="siteName", default=None)
+ """Site or application name from page metadata."""
+
+ title: Optional[str] = None
+ """Best title extracted from the page."""
+
+ twitter: Optional[Dict[str, Union[str, List[str]]]] = None
+ """Twitter card metadata with the twitter: prefix removed and keys camel-cased."""
class KeyMetadata(BaseModel):
@@ -30,6 +110,9 @@ class WebWebScrapeHTMLResponse(BaseModel):
underlying XML instead — see the `type` field.
"""
+ metadata: Metadata
+ """Metadata extracted from the scraped page HTML."""
+
success: Literal[True]
"""Indicates success"""
diff --git a/src/context/dev/types/web_web_scrape_md_response.py b/src/context/dev/types/web_web_scrape_md_response.py
index 2510e1a..7b673f0 100644
--- a/src/context/dev/types/web_web_scrape_md_response.py
+++ b/src/context/dev/types/web_web_scrape_md_response.py
@@ -1,11 +1,91 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import Optional
+from typing import Dict, List, Union, Optional
from typing_extensions import Literal
+from pydantic import Field as FieldInfo
+
from .._models import BaseModel
-__all__ = ["WebWebScrapeMdResponse", "KeyMetadata"]
+__all__ = ["WebWebScrapeMdResponse", "Metadata", "MetadataAlternate", "KeyMetadata"]
+
+
+class MetadataAlternate(BaseModel):
+ href: str
+ """Resolved alternate URL."""
+
+ hreflang: Optional[str] = None
+ """Language or locale for the alternate URL, when present."""
+
+ title: Optional[str] = None
+ """Alternate resource title, when present."""
+
+ type: Optional[str] = None
+ """Alternate resource MIME type, when present."""
+
+
+class Metadata(BaseModel):
+ """Metadata extracted from the scraped page HTML."""
+
+ final_url: str = FieldInfo(alias="finalUrl")
+ """Final URL scraped after redirects or scraper fallback, when known.
+
+ Falls back to sourceUrl when unavailable.
+ """
+
+ source_url: str = FieldInfo(alias="sourceUrl")
+ """Original URL requested by the caller."""
+
+ additional_meta: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="additionalMeta", default=None)
+ """Additional non-social meta tags not promoted to top-level metadata fields."""
+
+ alternates: Optional[List[MetadataAlternate]] = None
+ """Resolved alternate links from link rel=alternate tags."""
+
+ author: Optional[str] = None
+ """Author metadata, when present."""
+
+ canonical_url: Optional[str] = FieldInfo(alias="canonicalUrl", default=None)
+ """Resolved canonical URL, when present."""
+
+ description: Optional[str] = None
+ """Best description extracted from standard, Open Graph, or Twitter metadata."""
+
+ favicon: Optional[str] = None
+ """Resolved favicon URL, when present."""
+
+ image: Optional[str] = None
+ """Primary resolved preview image from Open Graph, Twitter, or image metadata."""
+
+ json_ld: Optional[List[Dict[str, object]]] = FieldInfo(alias="jsonLd", default=None)
+ """JSON-LD structured data blocks parsed from the page."""
+
+ keywords: Optional[List[str]] = None
+ """Keywords extracted from the page's keywords meta tag."""
+
+ language: Optional[str] = None
+ """Language extracted from html lang or language meta tags."""
+
+ modified_time: Optional[str] = FieldInfo(alias="modifiedTime", default=None)
+ """Modified timestamp/date from page metadata, when present."""
+
+ open_graph: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="openGraph", default=None)
+ """Open Graph metadata with the og: prefix removed and keys camel-cased."""
+
+ published_time: Optional[str] = FieldInfo(alias="publishedTime", default=None)
+ """Published timestamp/date from page metadata, when present."""
+
+ robots: Optional[str] = None
+ """Robots meta directive, when present."""
+
+ site_name: Optional[str] = FieldInfo(alias="siteName", default=None)
+ """Site or application name from page metadata."""
+
+ title: Optional[str] = None
+ """Best title extracted from the page."""
+
+ twitter: Optional[Dict[str, Union[str, List[str]]]] = None
+ """Twitter card metadata with the twitter: prefix removed and keys camel-cased."""
class KeyMetadata(BaseModel):
@@ -25,6 +105,9 @@ class WebWebScrapeMdResponse(BaseModel):
markdown: str
"""Page content converted to GitHub Flavored Markdown"""
+ metadata: Metadata
+ """Metadata extracted from the scraped page HTML."""
+
success: Literal[True]
"""Indicates success"""
From 5e5f8875b8d058a194a1fec056dcc841e01e0260 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 18 Jun 2026 12:20:01 +0000
Subject: [PATCH 6/6] release: 1.0.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 8 ++++++++
pyproject.toml | 2 +-
src/context/dev/_version.py | 2 +-
4 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index ce5e5c7..fea3454 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.35.0"
+ ".": "1.0.0"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4bd6209..22eca09 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## 1.0.0 (2026-06-18)
+
+Full Changelog: [v0.35.0...v1.0.0](https://github.com/context-dot-dev/context-python-sdk/compare/v0.35.0...v1.0.0)
+
+### Features
+
+* **api:** api update ([fc0ae29](https://github.com/context-dot-dev/context-python-sdk/commit/fc0ae29ae44c8a3cac7a9ac7294ff818634a442c))
+
## 0.35.0 (2026-06-11)
Full Changelog: [v0.34.0...v0.35.0](https://github.com/context-dot-dev/context-python-sdk/compare/v0.34.0...v0.35.0)
diff --git a/pyproject.toml b/pyproject.toml
index 7ef0c26..f524bf0 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "context.dev"
-version = "0.35.0"
+version = "1.0.0"
description = "The official Python library for the context.dev API"
dynamic = ["readme"]
license = "Apache-2.0"
diff --git a/src/context/dev/_version.py b/src/context/dev/_version.py
index aba26ef..d2117c7 100644
--- a/src/context/dev/_version.py
+++ b/src/context/dev/_version.py
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
__title__ = "context.dev"
-__version__ = "0.35.0" # x-release-please-version
+__version__ = "1.0.0" # x-release-please-version