From db5ae4038243116ff073d2011d6905c6ec7926df Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sat, 1 Aug 2026 23:38:36 +0000 Subject: [PATCH 1/7] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 3b484e3..2aeac55 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 37 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-758c3a2fbd5b7be61c8e6e0ad2e6a5ec30695747bb675960d888c497647d13d7.yml -openapi_spec_hash: 00002d90bde02f67e174368ae470c597 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-85694668707cde32f7d8472660bc5760a2f369751d8cf19690778ffad767b0fa.yml +openapi_spec_hash: 5b688312bf5e9a5468a83618ec635ada config_hash: 2bea1743c84d63bd61f8501a6ea63065 From 5629cee4a4d5c2b33091ad93b20996d85bf0cae8 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Sun, 2 Aug 2026 08:32:19 +0000 Subject: [PATCH 2/7] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 2aeac55..490472d 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 37 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-85694668707cde32f7d8472660bc5760a2f369751d8cf19690778ffad767b0fa.yml -openapi_spec_hash: 5b688312bf5e9a5468a83618ec635ada +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-386f0ec51516e1f060c82287c99be4ecdee9eb4753e1375b6c5b27488e63d4c7.yml +openapi_spec_hash: b514ae48cf1c7bcb2ed3a4d7853cbfb5 config_hash: 2bea1743c84d63bd61f8501a6ea63065 From 3f33f63c4d7e19df44bab3e1a4bcbf466286613b Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 3 Aug 2026 03:23:33 +0000 Subject: [PATCH 3/7] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 490472d..790f64f 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 37 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-386f0ec51516e1f060c82287c99be4ecdee9eb4753e1375b6c5b27488e63d4c7.yml -openapi_spec_hash: b514ae48cf1c7bcb2ed3a4d7853cbfb5 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-0c273d87106b3f8920d529d9964d7be6a23613c7553f48d67732e24571fbbf7b.yml +openapi_spec_hash: f1fb4082f153c9195fee451ebf5d46ba config_hash: 2bea1743c84d63bd61f8501a6ea63065 From 15dd54a01998022e90832e47e486c2caf4987d41 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2026 08:40:52 +0000 Subject: [PATCH 4/7] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 790f64f..29f15de 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 37 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-0c273d87106b3f8920d529d9964d7be6a23613c7553f48d67732e24571fbbf7b.yml -openapi_spec_hash: f1fb4082f153c9195fee451ebf5d46ba +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-f2101addc171cf732a879e4bcad5bc6cfe8cec4349c62617c12c09331a883a22.yml +openapi_spec_hash: a143e7e4842279a61807b433ef17e261 config_hash: 2bea1743c84d63bd61f8501a6ea63065 From 14a34f305bc348ca173a8e25bf9810cedb1256ec Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2026 09:40:31 +0000 Subject: [PATCH 5/7] codegen metadata --- .stats.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.stats.yml b/.stats.yml index 29f15de..8e45986 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 37 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-f2101addc171cf732a879e4bcad5bc6cfe8cec4349c62617c12c09331a883a22.yml -openapi_spec_hash: a143e7e4842279a61807b433ef17e261 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-eac90d0a78d6166dc64c49ad4cd44883ab0bd357063ff09e60ed78085e2bde3c.yml +openapi_spec_hash: ab91f77e7c9d992400cbc7fc8a9e76c1 config_hash: 2bea1743c84d63bd61f8501a6ea63065 From bbf6510a615c1bb20ef80fe594b62e9faa1c3cd6 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2026 10:12:31 +0000 Subject: [PATCH 6/7] feat(api): manual updates --- .stats.yml | 6 +-- api.md | 2 + brand.go | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++ brand_test.go | 26 +++++++++++++ 4 files changed, 131 insertions(+), 3 deletions(-) diff --git a/.stats.yml b/.stats.yml index 8e45986..74e73bc 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 37 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-eac90d0a78d6166dc64c49ad4cd44883ab0bd357063ff09e60ed78085e2bde3c.yml +configured_endpoints: 38 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-155e4761d62255841349c0f8a01b0a9c463ea1d1f2d6c4fd8d1a75c8bef6f226.yml openapi_spec_hash: ab91f77e7c9d992400cbc7fc8a9e76c1 -config_hash: 2bea1743c84d63bd61f8501a6ea63065 +config_hash: bff282047fafdad771fb7ec685f56944 diff --git a/api.md b/api.md index 8cc5939..69d7939 100644 --- a/api.md +++ b/api.md @@ -56,11 +56,13 @@ Response Types: - contextdev.BrandGetResponse - contextdev.BrandGetSimplifiedResponse +- contextdev.BrandSearchResponse Methods: - client.Brand.Get(ctx context.Context, body contextdev.BrandGetParams) (\*contextdev.BrandGetResponse, error) - client.Brand.GetSimplified(ctx context.Context, query contextdev.BrandGetSimplifiedParams) (\*contextdev.BrandGetSimplifiedResponse, error) +- client.Brand.Search(ctx context.Context, query contextdev.BrandSearchParams) (\*contextdev.BrandSearchResponse, error) # Industry diff --git a/brand.go b/brand.go index 431d9e6..f979a30 100644 --- a/brand.go +++ b/brand.go @@ -58,6 +58,20 @@ func (r *BrandService) GetSimplified(ctx context.Context, query BrandGetSimplifi return res, err } +// Search brands by name or domain and get back up to 10 lightweight matches +// (domain, name, logo), most popular first: by Tranco rank, then market cap for +// brands outside the Tranco list, with text relevance breaking ties. Matching is +// prefix-based with no typo tolerance, so it is suited to autocomplete. Only +// brands already in the Context.dev index are returned — use /brand/retrieve to +// fetch (and index) a specific domain. Free on Pro and Scale plans; costs 1 credit +// per request on the Free and Starter plans. +func (r *BrandService) Search(ctx context.Context, query BrandSearchParams, opts ...option.RequestOption) (res *BrandSearchResponse, err error) { + opts = slices.Concat(r.options, opts) + path := "brand/search" + err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) + return res, err +} + type BrandGetResponse struct { // Detailed brand information Brand BrandGetResponseBrand `json:"brand"` @@ -861,6 +875,73 @@ func (r *BrandGetSimplifiedResponseKeyMetadata) UnmarshalJSON(data []byte) error return apijson.UnmarshalRoot(data, r) } +type BrandSearchResponse struct { + // Up to 10 matching brands, most popular first. Empty when nothing matches. + Results []BrandSearchResponseResult `json:"results" api:"required"` + // Metadata about the API key used for the request. Included in every response + // whenever a valid API key is provided, even when the response status is not 200. + KeyMetadata BrandSearchResponseKeyMetadata `json:"key_metadata"` + // JSON contains metadata for fields, check presence with [respjson.Field.Valid]. + JSON struct { + Results respjson.Field + KeyMetadata respjson.Field + ExtraFields map[string]respjson.Field + raw string + } `json:"-"` +} + +// Returns the unmodified JSON received from the API +func (r BrandSearchResponse) RawJSON() string { return r.JSON.raw } +func (r *BrandSearchResponse) UnmarshalJSON(data []byte) error { + return apijson.UnmarshalRoot(data, r) +} + +type BrandSearchResponseResult struct { + // The brand's domain. + Domain string `json:"domain" api:"required"` + // Logo link URL that serves the brand's logo, generated per request for the + // calling organization. + Logo string `json:"logo" api:"required"` + // The brand's name. Empty string when unknown. + Name string `json:"name" api:"required"` + // JSON contains metadata for fields, check presence with [respjson.Field.Valid]. + JSON struct { + Domain respjson.Field + Logo respjson.Field + Name respjson.Field + ExtraFields map[string]respjson.Field + raw string + } `json:"-"` +} + +// Returns the unmodified JSON received from the API +func (r BrandSearchResponseResult) RawJSON() string { return r.JSON.raw } +func (r *BrandSearchResponseResult) UnmarshalJSON(data []byte) error { + return apijson.UnmarshalRoot(data, r) +} + +// Metadata about the API key used for the request. Included in every response +// whenever a valid API key is provided, even when the response status is not 200. +type BrandSearchResponseKeyMetadata struct { + // The number of credits consumed by this request. + CreditsConsumed int64 `json:"credits_consumed" api:"required"` + // The number of credits remaining for your organization after this request. + CreditsRemaining int64 `json:"credits_remaining" api:"required"` + // JSON contains metadata for fields, check presence with [respjson.Field.Valid]. + JSON struct { + CreditsConsumed respjson.Field + CreditsRemaining respjson.Field + ExtraFields map[string]respjson.Field + raw string + } `json:"-"` +} + +// Returns the unmodified JSON received from the API +func (r BrandSearchResponseKeyMetadata) RawJSON() string { return r.JSON.raw } +func (r *BrandSearchResponseKeyMetadata) UnmarshalJSON(data []byte) error { + return apijson.UnmarshalRoot(data, r) +} + type BrandGetParams struct { // @@ -1337,3 +1418,22 @@ const ( BrandGetSimplifiedParamsThemeLight BrandGetSimplifiedParamsTheme = "light" BrandGetSimplifiedParamsThemeDark BrandGetSimplifiedParamsTheme = "dark" ) + +type BrandSearchParams struct { + // Search term, matched against brand names and domains by prefix (e.g. 'nike', + // 'nike.com', 'nik'). + Query string `query:"query" api:"required" json:"-"` + // Optional comma-separated caller-defined tags for tracking this request. Tags are + // recorded on the request's usage log and can be used to filter usage on the + // dashboard usage page. Up to 20 tags, each 1-50 characters. + Tags []string `query:"tags,omitzero" json:"-"` + paramObj +} + +// URLQuery serializes [BrandSearchParams]'s query parameters as `url.Values`. +func (r BrandSearchParams) URLQuery() (v url.Values, err error) { + return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ + ArrayFormat: apiquery.ArrayQueryFormatComma, + NestedFormat: apiquery.NestedQueryFormatBrackets, + }) +} diff --git a/brand_test.go b/brand_test.go index 591643e..2c59452 100644 --- a/brand_test.go +++ b/brand_test.go @@ -73,3 +73,29 @@ func TestBrandGetSimplifiedWithOptionalParams(t *testing.T) { t.Fatalf("err should be nil: %s", err.Error()) } } + +func TestBrandSearchWithOptionalParams(t *testing.T) { + t.Skip("Mock server tests are disabled") + baseURL := "http://localhost:4010" + if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok { + baseURL = envURL + } + if !testutil.CheckTestServer(t, baseURL) { + return + } + client := contextdev.NewClient( + option.WithBaseURL(baseURL), + option.WithAPIKey("My API Key"), + ) + _, err := client.Brand.Search(context.TODO(), contextdev.BrandSearchParams{ + Query: "x", + Tags: []string{"production", "team-alpha"}, + }) + if err != nil { + var apierr *contextdev.Error + if errors.As(err, &apierr) { + t.Log(string(apierr.DumpRequest(true))) + } + t.Fatalf("err should be nil: %s", err.Error()) + } +} From 7760ff29e58f74665b0a076a1018cb960533600a Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2026 10:12:52 +0000 Subject: [PATCH 7/7] release: 2.8.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ README.md | 2 +- internal/version.go | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index d1328ca..64f9ff4 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.7.0" + ".": "2.8.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index f635b52..643ebcb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 2.8.0 (2026-08-05) + +Full Changelog: [v2.7.0...v2.8.0](https://github.com/context-dot-dev/context-go-sdk/compare/v2.7.0...v2.8.0) + +### Features + +* **api:** manual updates ([bbf6510](https://github.com/context-dot-dev/context-go-sdk/commit/bbf6510a615c1bb20ef80fe594b62e9faa1c3cd6)) + ## 2.7.0 (2026-08-01) Full Changelog: [v2.6.0...v2.7.0](https://github.com/context-dot-dev/context-go-sdk/compare/v2.6.0...v2.7.0) diff --git a/README.md b/README.md index 46b184b..9532e29 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ Or to pin the version: ```sh -go get -u 'github.com/context-dot-dev/context-go-sdk@v2.7.0' +go get -u 'github.com/context-dot-dev/context-go-sdk@v2.8.0' ``` diff --git a/internal/version.go b/internal/version.go index 166fc82..ac38466 100644 --- a/internal/version.go +++ b/internal/version.go @@ -2,4 +2,4 @@ package internal -const PackageVersion = "2.7.0" // x-release-please-version +const PackageVersion = "2.8.0" // x-release-please-version