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/.stats.yml b/.stats.yml
index 2a5683f..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-b84f53b1a92511eff85645f287ec08d43adcdcc589367c015770bde836422a65.yml
-openapi_spec_hash: 71e317da7bc58cfc3bc2e4180f5b6267
-config_hash: f86a4e06ae5ed725aa79d58d7a8dc27c
+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/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
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"""