Skip to content

Commit 614feba

Browse files
authored
Merge pull request #34 from brand-dot-dev/release-please--branches--main--changes--next
release: 1.28.0
2 parents 15571e4 + 0128296 commit 614feba

12 files changed

Lines changed: 330 additions & 36 deletions

File tree

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "1.27.0"
2+
".": "1.28.0"
33
}

.stats.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 14
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/brand-dev%2Fbrand.dev-1391c1e69bcdce517f71265a2f22f4e8d35c3f12a224899e64f85e25897b743a.yml
3-
openapi_spec_hash: f8a2917cc425300d272ae943f88d7bb7
4-
config_hash: 7f48d078645cb8331328bcd6f6ab3281
1+
configured_endpoints: 15
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/brand-dev%2Fbrand.dev-863ddc13e032497459a639cf02a16349831dda7e39557cbd5ce33da34d086b02.yml
3+
openapi_spec_hash: f972aac9618fe8df340d96344b3d0578
4+
config_hash: 6f10592c7d0c3bafefc1271472283217

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# Changelog
22

3+
## 1.28.0 (2026-01-05)
4+
5+
Full Changelog: [v1.27.0...v1.28.0](https://github.com/brand-dot-dev/python-sdk/compare/v1.27.0...v1.28.0)
6+
7+
### Features
8+
9+
* **api:** api update ([5e513f4](https://github.com/brand-dot-dev/python-sdk/commit/5e513f457d07e9f0560aa8f50542934d7393c929))
10+
* **api:** api update ([9556441](https://github.com/brand-dot-dev/python-sdk/commit/95564414d4f0ec6095e06df2d5e1e8e2b9d2d889))
11+
* **api:** manual updates ([62ec1b4](https://github.com/brand-dot-dev/python-sdk/commit/62ec1b480e338243030e770e4a0cae33468575c2))
12+
313
## 1.27.0 (2025-12-22)
414

515
Full Changelog: [v1.26.0...v1.27.0](https://github.com/brand-dot-dev/python-sdk/compare/v1.26.0...v1.27.0)

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@
186186
same "printed page" as the copyright notice for easier
187187
identification within third-party archives.
188188

189-
Copyright 2025 Brand Dev
189+
Copyright 2026 Brand Dev
190190

191191
Licensed under the Apache License, Version 2.0 (the "License");
192192
you may not use this file except in compliance with the License.

api.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Types:
55
```python
66
from brand.dev.types import (
77
BrandRetrieveResponse,
8+
BrandAIProductsResponse,
89
BrandAIQueryResponse,
910
BrandFontsResponse,
1011
BrandIdentifyFromTransactionResponse,
@@ -24,6 +25,7 @@ from brand.dev.types import (
2425
Methods:
2526

2627
- <code title="get /brand/retrieve">client.brand.<a href="./src/brand/dev/resources/brand.py">retrieve</a>(\*\*<a href="src/brand/dev/types/brand_retrieve_params.py">params</a>) -> <a href="./src/brand/dev/types/brand_retrieve_response.py">BrandRetrieveResponse</a></code>
28+
- <code title="post /brand/ai/products">client.brand.<a href="./src/brand/dev/resources/brand.py">ai_products</a>(\*\*<a href="src/brand/dev/types/brand_ai_products_params.py">params</a>) -> <a href="./src/brand/dev/types/brand_ai_products_response.py">BrandAIProductsResponse</a></code>
2729
- <code title="post /brand/ai/query">client.brand.<a href="./src/brand/dev/resources/brand.py">ai_query</a>(\*\*<a href="src/brand/dev/types/brand_ai_query_params.py">params</a>) -> <a href="./src/brand/dev/types/brand_ai_query_response.py">BrandAIQueryResponse</a></code>
2830
- <code title="get /brand/fonts">client.brand.<a href="./src/brand/dev/resources/brand.py">fonts</a>(\*\*<a href="src/brand/dev/types/brand_fonts_params.py">params</a>) -> <a href="./src/brand/dev/types/brand_fonts_response.py">BrandFontsResponse</a></code>
2931
- <code title="get /brand/transaction_identifier">client.brand.<a href="./src/brand/dev/resources/brand.py">identify_from_transaction</a>(\*\*<a href="src/brand/dev/types/brand_identify_from_transaction_params.py">params</a>) -> <a href="./src/brand/dev/types/brand_identify_from_transaction_response.py">BrandIdentifyFromTransactionResponse</a></code>

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "brand.dev"
3-
version = "1.27.0"
3+
version = "1.28.0"
44
description = "The official Python library for the brand.dev API"
55
dynamic = ["readme"]
66
license = "Apache-2.0"

src/brand/dev/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

33
__title__ = "brand.dev"
4-
__version__ = "1.27.0" # x-release-please-version
4+
__version__ = "1.28.0" # x-release-please-version

src/brand/dev/resources/brand.py

Lines changed: 144 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
brand_retrieve_params,
1515
brand_screenshot_params,
1616
brand_styleguide_params,
17+
brand_ai_products_params,
1718
brand_retrieve_naics_params,
1819
brand_retrieve_by_isin_params,
1920
brand_retrieve_by_name_params,
@@ -40,6 +41,7 @@
4041
from ..types.brand_retrieve_response import BrandRetrieveResponse
4142
from ..types.brand_screenshot_response import BrandScreenshotResponse
4243
from ..types.brand_styleguide_response import BrandStyleguideResponse
44+
from ..types.brand_ai_products_response import BrandAIProductsResponse
4345
from ..types.brand_retrieve_naics_response import BrandRetrieveNaicsResponse
4446
from ..types.brand_retrieve_by_isin_response import BrandRetrieveByIsinResponse
4547
from ..types.brand_retrieve_by_name_response import BrandRetrieveByNameResponse
@@ -187,6 +189,58 @@ def retrieve(
187189
cast_to=BrandRetrieveResponse,
188190
)
189191

192+
def ai_products(
193+
self,
194+
*,
195+
domain: str,
196+
max_products: int | Omit = omit,
197+
timeout_ms: int | Omit = omit,
198+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
199+
# The extra values given here take precedence over values defined on the client or passed to this method.
200+
extra_headers: Headers | None = None,
201+
extra_query: Query | None = None,
202+
extra_body: Body | None = None,
203+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
204+
) -> BrandAIProductsResponse:
205+
"""Beta feature: Extract product information from a brand's website.
206+
207+
Brand.dev will
208+
analyze the website and return a list of products with details such as name,
209+
description, image, pricing, features, and more.
210+
211+
Args:
212+
domain: The domain name to analyze
213+
214+
max_products: Maximum number of products to extract.
215+
216+
timeout_ms: Optional timeout in milliseconds for the request. If the request takes longer
217+
than this value, it will be aborted with a 408 status code. Maximum allowed
218+
value is 300000ms (5 minutes).
219+
220+
extra_headers: Send extra headers
221+
222+
extra_query: Add additional query parameters to the request
223+
224+
extra_body: Add additional JSON properties to the request
225+
226+
timeout: Override the client-level default timeout for this request, in seconds
227+
"""
228+
return self._post(
229+
"/brand/ai/products",
230+
body=maybe_transform(
231+
{
232+
"domain": domain,
233+
"max_products": max_products,
234+
"timeout_ms": timeout_ms,
235+
},
236+
brand_ai_products_params.BrandAIProductsParams,
237+
),
238+
options=make_request_options(
239+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
240+
),
241+
cast_to=BrandAIProductsResponse,
242+
)
243+
190244
def ai_query(
191245
self,
192246
*,
@@ -201,11 +255,11 @@ def ai_query(
201255
extra_body: Body | None = None,
202256
timeout: float | httpx.Timeout | None | NotGiven = not_given,
203257
) -> BrandAIQueryResponse:
204-
"""Beta feature: Use AI to extract specific data points from a brand's website.
258+
"""Use AI to extract specific data points from a brand's website.
205259
206-
The
207-
AI will crawl the website and extract the requested information based on the
208-
provided data points.
260+
The AI will crawl
261+
the website and extract the requested information based on the provided data
262+
points.
209263
210264
Args:
211265
data_to_extract: Array of data points to extract from the website
@@ -256,8 +310,8 @@ def fonts(
256310
timeout: float | httpx.Timeout | None | NotGiven = not_given,
257311
) -> BrandFontsResponse:
258312
"""
259-
Beta feature: Extract font information from a brand's website including font
260-
families, usage statistics, fallbacks, and element/word counts.
313+
Extract font information from a brand's website including font families, usage
314+
statistics, fallbacks, and element/word counts.
261315
262316
Args:
263317
domain: Domain name to extract fonts from (e.g., 'example.com', 'google.com'). The
@@ -1429,12 +1483,12 @@ def screenshot(
14291483
extra_body: Body | None = None,
14301484
timeout: float | httpx.Timeout | None | NotGiven = not_given,
14311485
) -> BrandScreenshotResponse:
1432-
"""Beta feature: Capture a screenshot of a website.
1486+
"""Capture a screenshot of a website.
14331487
1434-
Supports both viewport
1435-
(standard browser view) and full-page screenshots. Can also screenshot specific
1436-
page types (login, pricing, etc.) by using heuristics to find the appropriate
1437-
URL. Returns a URL to the uploaded screenshot image hosted on our CDN.
1488+
Supports both viewport (standard browser
1489+
view) and full-page screenshots. Can also screenshot specific page types (login,
1490+
pricing, etc.) by using heuristics to find the appropriate URL. Returns a URL to
1491+
the uploaded screenshot image hosted on our CDN.
14381492
14391493
Args:
14401494
domain: Domain name to take screenshot of (e.g., 'example.com', 'google.com'). The
@@ -1495,9 +1549,8 @@ def styleguide(
14951549
timeout: float | httpx.Timeout | None | NotGiven = not_given,
14961550
) -> BrandStyleguideResponse:
14971551
"""
1498-
Beta feature: Automatically extract comprehensive design system information from
1499-
a brand's website including colors, typography, spacing, shadows, and UI
1500-
components.
1552+
Automatically extract comprehensive design system information from a brand's
1553+
website including colors, typography, spacing, shadows, and UI components.
15011554
15021555
Args:
15031556
domain: Domain name to extract styleguide from (e.g., 'example.com', 'google.com'). The
@@ -1675,6 +1728,58 @@ async def retrieve(
16751728
cast_to=BrandRetrieveResponse,
16761729
)
16771730

1731+
async def ai_products(
1732+
self,
1733+
*,
1734+
domain: str,
1735+
max_products: int | Omit = omit,
1736+
timeout_ms: int | Omit = omit,
1737+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1738+
# The extra values given here take precedence over values defined on the client or passed to this method.
1739+
extra_headers: Headers | None = None,
1740+
extra_query: Query | None = None,
1741+
extra_body: Body | None = None,
1742+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
1743+
) -> BrandAIProductsResponse:
1744+
"""Beta feature: Extract product information from a brand's website.
1745+
1746+
Brand.dev will
1747+
analyze the website and return a list of products with details such as name,
1748+
description, image, pricing, features, and more.
1749+
1750+
Args:
1751+
domain: The domain name to analyze
1752+
1753+
max_products: Maximum number of products to extract.
1754+
1755+
timeout_ms: Optional timeout in milliseconds for the request. If the request takes longer
1756+
than this value, it will be aborted with a 408 status code. Maximum allowed
1757+
value is 300000ms (5 minutes).
1758+
1759+
extra_headers: Send extra headers
1760+
1761+
extra_query: Add additional query parameters to the request
1762+
1763+
extra_body: Add additional JSON properties to the request
1764+
1765+
timeout: Override the client-level default timeout for this request, in seconds
1766+
"""
1767+
return await self._post(
1768+
"/brand/ai/products",
1769+
body=await async_maybe_transform(
1770+
{
1771+
"domain": domain,
1772+
"max_products": max_products,
1773+
"timeout_ms": timeout_ms,
1774+
},
1775+
brand_ai_products_params.BrandAIProductsParams,
1776+
),
1777+
options=make_request_options(
1778+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
1779+
),
1780+
cast_to=BrandAIProductsResponse,
1781+
)
1782+
16781783
async def ai_query(
16791784
self,
16801785
*,
@@ -1689,11 +1794,11 @@ async def ai_query(
16891794
extra_body: Body | None = None,
16901795
timeout: float | httpx.Timeout | None | NotGiven = not_given,
16911796
) -> BrandAIQueryResponse:
1692-
"""Beta feature: Use AI to extract specific data points from a brand's website.
1797+
"""Use AI to extract specific data points from a brand's website.
16931798
1694-
The
1695-
AI will crawl the website and extract the requested information based on the
1696-
provided data points.
1799+
The AI will crawl
1800+
the website and extract the requested information based on the provided data
1801+
points.
16971802
16981803
Args:
16991804
data_to_extract: Array of data points to extract from the website
@@ -1744,8 +1849,8 @@ async def fonts(
17441849
timeout: float | httpx.Timeout | None | NotGiven = not_given,
17451850
) -> BrandFontsResponse:
17461851
"""
1747-
Beta feature: Extract font information from a brand's website including font
1748-
families, usage statistics, fallbacks, and element/word counts.
1852+
Extract font information from a brand's website including font families, usage
1853+
statistics, fallbacks, and element/word counts.
17491854
17501855
Args:
17511856
domain: Domain name to extract fonts from (e.g., 'example.com', 'google.com'). The
@@ -2917,12 +3022,12 @@ async def screenshot(
29173022
extra_body: Body | None = None,
29183023
timeout: float | httpx.Timeout | None | NotGiven = not_given,
29193024
) -> BrandScreenshotResponse:
2920-
"""Beta feature: Capture a screenshot of a website.
3025+
"""Capture a screenshot of a website.
29213026
2922-
Supports both viewport
2923-
(standard browser view) and full-page screenshots. Can also screenshot specific
2924-
page types (login, pricing, etc.) by using heuristics to find the appropriate
2925-
URL. Returns a URL to the uploaded screenshot image hosted on our CDN.
3027+
Supports both viewport (standard browser
3028+
view) and full-page screenshots. Can also screenshot specific page types (login,
3029+
pricing, etc.) by using heuristics to find the appropriate URL. Returns a URL to
3030+
the uploaded screenshot image hosted on our CDN.
29263031
29273032
Args:
29283033
domain: Domain name to take screenshot of (e.g., 'example.com', 'google.com'). The
@@ -2983,9 +3088,8 @@ async def styleguide(
29833088
timeout: float | httpx.Timeout | None | NotGiven = not_given,
29843089
) -> BrandStyleguideResponse:
29853090
"""
2986-
Beta feature: Automatically extract comprehensive design system information from
2987-
a brand's website including colors, typography, spacing, shadows, and UI
2988-
components.
3091+
Automatically extract comprehensive design system information from a brand's
3092+
website including colors, typography, spacing, shadows, and UI components.
29893093
29903094
Args:
29913095
domain: Domain name to extract styleguide from (e.g., 'example.com', 'google.com'). The
@@ -3035,6 +3139,9 @@ def __init__(self, brand: BrandResource) -> None:
30353139
self.retrieve = to_raw_response_wrapper(
30363140
brand.retrieve,
30373141
)
3142+
self.ai_products = to_raw_response_wrapper(
3143+
brand.ai_products,
3144+
)
30383145
self.ai_query = to_raw_response_wrapper(
30393146
brand.ai_query,
30403147
)
@@ -3083,6 +3190,9 @@ def __init__(self, brand: AsyncBrandResource) -> None:
30833190
self.retrieve = async_to_raw_response_wrapper(
30843191
brand.retrieve,
30853192
)
3193+
self.ai_products = async_to_raw_response_wrapper(
3194+
brand.ai_products,
3195+
)
30863196
self.ai_query = async_to_raw_response_wrapper(
30873197
brand.ai_query,
30883198
)
@@ -3131,6 +3241,9 @@ def __init__(self, brand: BrandResource) -> None:
31313241
self.retrieve = to_streamed_response_wrapper(
31323242
brand.retrieve,
31333243
)
3244+
self.ai_products = to_streamed_response_wrapper(
3245+
brand.ai_products,
3246+
)
31343247
self.ai_query = to_streamed_response_wrapper(
31353248
brand.ai_query,
31363249
)
@@ -3179,6 +3292,9 @@ def __init__(self, brand: AsyncBrandResource) -> None:
31793292
self.retrieve = async_to_streamed_response_wrapper(
31803293
brand.retrieve,
31813294
)
3295+
self.ai_products = async_to_streamed_response_wrapper(
3296+
brand.ai_products,
3297+
)
31823298
self.ai_query = async_to_streamed_response_wrapper(
31833299
brand.ai_query,
31843300
)

src/brand/dev/types/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212
from .brand_retrieve_response import BrandRetrieveResponse as BrandRetrieveResponse
1313
from .brand_screenshot_params import BrandScreenshotParams as BrandScreenshotParams
1414
from .brand_styleguide_params import BrandStyleguideParams as BrandStyleguideParams
15+
from .brand_ai_products_params import BrandAIProductsParams as BrandAIProductsParams
1516
from .brand_screenshot_response import BrandScreenshotResponse as BrandScreenshotResponse
1617
from .brand_styleguide_response import BrandStyleguideResponse as BrandStyleguideResponse
18+
from .brand_ai_products_response import BrandAIProductsResponse as BrandAIProductsResponse
1719
from .brand_retrieve_naics_params import BrandRetrieveNaicsParams as BrandRetrieveNaicsParams
1820
from .brand_retrieve_by_isin_params import BrandRetrieveByIsinParams as BrandRetrieveByIsinParams
1921
from .brand_retrieve_by_name_params import BrandRetrieveByNameParams as BrandRetrieveByNameParams
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from __future__ import annotations
4+
5+
from typing_extensions import Required, Annotated, TypedDict
6+
7+
from .._utils import PropertyInfo
8+
9+
__all__ = ["BrandAIProductsParams"]
10+
11+
12+
class BrandAIProductsParams(TypedDict, total=False):
13+
domain: Required[str]
14+
"""The domain name to analyze"""
15+
16+
max_products: Annotated[int, PropertyInfo(alias="maxProducts")]
17+
"""Maximum number of products to extract."""
18+
19+
timeout_ms: Annotated[int, PropertyInfo(alias="timeoutMS")]
20+
"""Optional timeout in milliseconds for the request.
21+
22+
If the request takes longer than this value, it will be aborted with a 408
23+
status code. Maximum allowed value is 300000ms (5 minutes).
24+
"""

0 commit comments

Comments
 (0)