From c68d11b9b68dc1fb625ae620c9f66beafef8bb0e Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 31 Jul 2026 22:16:31 +0000
Subject: [PATCH 1/4] feat(api): api update
---
.stats.yml | 4 +-
api.md | 6 +-
batch.go | 532 ++++++++++++++++++++++++++++++++---------------------
3 files changed, 326 insertions(+), 216 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 33b7080..963533f 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-960cb623c7ec84bf4dc0f5945cbc19eec9cca48271071f400d96066eaa55dbd6.yml
-openapi_spec_hash: 84fd39e3f4dc964bf0c32d4e95da1b34
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-838f03b1c3584485eeded993459e6bbae058da9f6df16b7967980fbba98cc748.yml
+openapi_spec_hash: 4a9db9cd9eac4ae4e2694b3d835a772f
config_hash: 2bea1743c84d63bd61f8501a6ea63065
diff --git a/api.md b/api.md
index bac920a..8cc5939 100644
--- a/api.md
+++ b/api.md
@@ -123,8 +123,10 @@ Methods:
Response Types:
-- contextdev.ErrorCount
-- contextdev.Error
+- contextdev.PageErrorCount
+- contextdev.Failure
+- contextdev.CrawlControls
+- contextdev.Intake
- contextdev.BatchGetResponse
- contextdev.BatchListResponse
- contextdev.BatchCancelResponse
diff --git a/batch.go b/batch.go
index e7ccac6..9aefe24 100644
--- a/batch.go
+++ b/batch.go
@@ -40,8 +40,8 @@ func NewBatchService(opts ...option.RequestOption) (r BatchService) {
}
// Check progress and get download links when the batch finishes. Also returns the
-// rejected-URL list and webhook signing secret from submission, so nothing is lost
-// if the submit response was dropped.
+// rejected-URL list from submission. The webhook signing secret is not repeated
+// here — it is returned once, by the submit response.
func (r *BatchService) Get(ctx context.Context, batchID string, opts ...option.RequestOption) (res *BatchGetResponse, err error) {
opts = slices.Concat(r.options, opts)
if batchID == "" {
@@ -98,7 +98,7 @@ func (r *BatchService) Submit(ctx context.Context, body BatchSubmitParams, opts
}
// Page failures sharing one error code.
-type ErrorCount struct {
+type PageErrorCount struct {
// Error code for these failures.
Code string `json:"code" api:"required"`
// Pages that failed with this code.
@@ -113,16 +113,17 @@ type ErrorCount struct {
}
// Returns the unmodified JSON received from the API
-func (r ErrorCount) RawJSON() string { return r.JSON.raw }
-func (r *ErrorCount) UnmarshalJSON(data []byte) error {
+func (r PageErrorCount) RawJSON() string { return r.JSON.raw }
+func (r *PageErrorCount) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Why the batch failed.
-type Error struct {
- // Batch error code.
+// A failure of the batch as a whole, distinct from the per-page failures in
+// `page_errors`.
+type Failure struct {
+ // Why the batch itself stopped.
Code string `json:"code" api:"required"`
- // Batch error message.
+ // Human-readable explanation.
Message string `json:"message" api:"required"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
@@ -134,32 +135,189 @@ type Error struct {
}
// Returns the unmodified JSON received from the API
-func (r Error) RawJSON() string { return r.JSON.raw }
-func (r *Error) UnmarshalJSON(data []byte) error {
+func (r Failure) RawJSON() string { return r.JSON.raw }
+func (r *Failure) UnmarshalJSON(data []byte) error {
+ return apijson.UnmarshalRoot(data, r)
+}
+
+// The crawl controls as submitted, so the limits requested can be compared against
+// what the crawl reached.
+type CrawlControls struct {
+ // Whether links to subdomains were followed. Always false for a sitemap crawl.
+ FollowSubdomains bool `json:"follow_subdomains" api:"required"`
+ // Link depth limit. Always 0 for a sitemap crawl, which never follows links off
+ // its URLs; null when a `start_url` crawl set no limit.
+ MaxDepth int64 `json:"max_depth" api:"required"`
+ // The `maxUrls` submitted with the crawl. A sitemap crawl scrapes only the URLs
+ // its sitemap actually lists, up to this many, so `input.reserved` is often lower.
+ MaxPages int64 `json:"max_pages" api:"required"`
+ // Where the crawl started.
+ Source CrawlControlsSourceUnion `json:"source" api:"required"`
+ // RE2 pattern URLs had to match to be crawled. Null when the crawl set none.
+ URLPattern string `json:"url_pattern" api:"required"`
+ // JSON contains metadata for fields, check presence with [respjson.Field.Valid].
+ JSON struct {
+ FollowSubdomains respjson.Field
+ MaxDepth respjson.Field
+ MaxPages respjson.Field
+ Source respjson.Field
+ URLPattern respjson.Field
+ ExtraFields map[string]respjson.Field
+ raw string
+ } `json:"-"`
+}
+
+// Returns the unmodified JSON received from the API
+func (r CrawlControls) RawJSON() string { return r.JSON.raw }
+func (r *CrawlControls) UnmarshalJSON(data []byte) error {
+ return apijson.UnmarshalRoot(data, r)
+}
+
+// CrawlControlsSourceUnion contains all possible properties and values from
+// [CrawlControlsSourceObject], [CrawlControlsSourceObject2].
+//
+// Use the methods beginning with 'As' to cast the union to one of its variants.
+type CrawlControlsSourceUnion struct {
+ Type string `json:"type"`
+ // This field is from variant [CrawlControlsSourceObject].
+ URL string `json:"url"`
+ // This field is from variant [CrawlControlsSourceObject2].
+ Domain string `json:"domain"`
+ JSON struct {
+ Type respjson.Field
+ URL respjson.Field
+ Domain respjson.Field
+ raw string
+ } `json:"-"`
+}
+
+func (u CrawlControlsSourceUnion) AsCrawlControlsSourceObject() (v CrawlControlsSourceObject) {
+ apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
+ return
+}
+
+func (u CrawlControlsSourceUnion) AsCrawlControlsSourceObject2() (v CrawlControlsSourceObject2) {
+ apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
+ return
+}
+
+// Returns the unmodified JSON received from the API
+func (u CrawlControlsSourceUnion) RawJSON() string { return u.JSON.raw }
+
+func (r *CrawlControlsSourceUnion) UnmarshalJSON(data []byte) error {
+ return apijson.UnmarshalRoot(data, r)
+}
+
+type CrawlControlsSourceObject struct {
+ // Any of "start_url".
+ Type string `json:"type" api:"required"`
+ // Page the crawl started from.
+ URL string `json:"url" api:"required"`
+ // JSON contains metadata for fields, check presence with [respjson.Field.Valid].
+ JSON struct {
+ Type respjson.Field
+ URL respjson.Field
+ ExtraFields map[string]respjson.Field
+ raw string
+ } `json:"-"`
+}
+
+// Returns the unmodified JSON received from the API
+func (r CrawlControlsSourceObject) RawJSON() string { return r.JSON.raw }
+func (r *CrawlControlsSourceObject) UnmarshalJSON(data []byte) error {
+ return apijson.UnmarshalRoot(data, r)
+}
+
+type CrawlControlsSourceObject2 struct {
+ // Domain whose sitemap supplied the pages.
+ Domain string `json:"domain" api:"required"`
+ // Any of "sitemap".
+ Type string `json:"type" api:"required"`
+ // JSON contains metadata for fields, check presence with [respjson.Field.Valid].
+ JSON struct {
+ Domain respjson.Field
+ Type respjson.Field
+ ExtraFields map[string]respjson.Field
+ raw string
+ } `json:"-"`
+}
+
+// Returns the unmodified JSON received from the API
+func (r CrawlControlsSourceObject2) RawJSON() string { return r.JSON.raw }
+func (r *CrawlControlsSourceObject2) UnmarshalJSON(data []byte) error {
+ return apijson.UnmarshalRoot(data, r)
+}
+
+// What submission took in, and what it charged for.
+type Intake struct {
+ // URLs dropped before reserving because another entry resolved to the same page.
+ // Non-zero for sitemap crawls too, whose sitemaps routinely list a page more than
+ // once.
+ Duplicates int64 `json:"duplicates" api:"required"`
+ // URLs from your list rejected as unusable; the same ones are itemised in
+ // `invalid_urls` at submission. Null for a crawl — a crawl that resolves no usable
+ // page is rejected outright with a 400 rather than accepted with an empty list.
+ Invalid int64 `json:"invalid" api:"required"`
+ // Pages credits were reserved for. Everything else — progress, the refund, the
+ // completion percentage — is measured against this.
+ Reserved int64 `json:"reserved" api:"required"`
+ // Whether `reserved` is an upper bound the batch may finish under. True only for a
+ // crawl that follows links, whose reachable page count is unknowable until it
+ // runs. False for a scrape and for a sitemap crawl, where `reserved` is an exact
+ // page count.
+ ReservedIsCeiling bool `json:"reserved_is_ceiling" api:"required"`
+ // URLs in the list you sent, before validation and de-duplication. Null for a
+ // crawl, which is given a source rather than a list.
+ Submitted int64 `json:"submitted" api:"required"`
+ // JSON contains metadata for fields, check presence with [respjson.Field.Valid].
+ JSON struct {
+ Duplicates respjson.Field
+ Invalid respjson.Field
+ Reserved respjson.Field
+ ReservedIsCeiling respjson.Field
+ Submitted respjson.Field
+ ExtraFields map[string]respjson.Field
+ raw string
+ } `json:"-"`
+}
+
+// Returns the unmodified JSON received from the API
+func (r Intake) RawJSON() string { return r.JSON.raw }
+func (r *Intake) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
type BatchGetResponse struct {
// Batch ID used to retrieve or cancel the job.
ID string `json:"id" api:"required"`
- // Reserved and used credits.
+ // The crawl controls as submitted, so the limits requested can be compared against
+ // what the crawl reached.
+ Crawl CrawlControls `json:"crawl" api:"required"`
+ // What this batch has done to your credit balance.
Credits BatchGetResponseCredits `json:"credits" api:"required"`
- // Why the batch failed.
- Error Error `json:"error" api:"required"`
- // Page failures grouped by error code.
- Errors []ErrorCount `json:"errors" api:"required"`
- // Submission counts.
- Input BatchGetResponseInput `json:"input" api:"required"`
+ // A failure of the batch as a whole, distinct from the per-page failures in
+ // `page_errors`.
+ Failure Failure `json:"failure" api:"required"`
+ // What each page is returned as. Matches `input.data.format` on the submit
+ // request.
+ //
+ // Any of "markdown", "html".
+ Format BatchGetResponseFormat `json:"format" api:"required"`
+ // What submission took in, and what it charged for.
+ Input Intake `json:"input" api:"required"`
// Rejected URLs, up to 100. These are not charged.
InvalidURLs []BatchGetResponseInvalidURL `json:"invalid_urls" api:"required"`
- // How pages are selected.
+ // How pages were selected. Matches `input.mode` on the submit request.
//
// Any of "scrape", "crawl".
Mode BatchGetResponseMode `json:"mode" api:"required"`
- // Current processing counts. Use `status` to check completion.
+ // Individual page failures grouped by error code, sorted by count. Unrelated to
+ // `failure`, which is the batch itself failing.
+ PageErrors []PageErrorCount `json:"page_errors" api:"required"`
+ // Pages attempted so far. Use `status` to check completion.
Progress BatchGetResponseProgress `json:"progress" api:"required"`
- // Download links available when the batch finishes. GET /batch/{batch_id}/results
- // serves the same records as paginated JSON.
+ // Download links, available once the batch reaches a final status and null before
+ // then. GET /batch/{batch_id}/results serves the same records as paginated JSON.
Results BatchGetResponseResults `json:"results" api:"required"`
// Current state. `completed`, `cancelled`, and `failed` are final.
//
@@ -168,33 +326,27 @@ type BatchGetResponse struct {
// Tags stored on the batch at submission.
Tags []string `json:"tags" api:"required"`
Timing BatchGetResponseTiming `json:"timing" api:"required"`
- // Output format.
- //
- // Any of "markdown", "html".
- Type BatchGetResponseType `json:"type" api:"required"`
// API key usage for this request.
KeyMetadata BatchGetResponseKeyMetadata `json:"key_metadata"`
- // Webhook signing secret. Also returned by GET /batch/{batch_id}.
- WebhookSecret string `json:"webhook_secret"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
- ID respjson.Field
- Credits respjson.Field
- Error respjson.Field
- Errors respjson.Field
- Input respjson.Field
- InvalidURLs respjson.Field
- Mode respjson.Field
- Progress respjson.Field
- Results respjson.Field
- Status respjson.Field
- Tags respjson.Field
- Timing respjson.Field
- Type respjson.Field
- KeyMetadata respjson.Field
- WebhookSecret respjson.Field
- ExtraFields map[string]respjson.Field
- raw string
+ ID respjson.Field
+ Crawl respjson.Field
+ Credits respjson.Field
+ Failure respjson.Field
+ Format respjson.Field
+ Input respjson.Field
+ InvalidURLs respjson.Field
+ Mode respjson.Field
+ PageErrors respjson.Field
+ Progress respjson.Field
+ Results respjson.Field
+ Status respjson.Field
+ Tags respjson.Field
+ Timing respjson.Field
+ KeyMetadata respjson.Field
+ ExtraFields map[string]respjson.Field
+ raw string
} `json:"-"`
}
@@ -204,16 +356,22 @@ func (r *BatchGetResponse) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Reserved and used credits.
+// What this batch has done to your credit balance.
type BatchGetResponseCredits struct {
- // Credits used by successful pages.
- Charged int64 `json:"charged" api:"required"`
- // Credits reserved when the batch was accepted.
- Estimated int64 `json:"estimated" api:"required"`
+ // `reserved` minus `refunded` — what the batch has cost so far. Equal to
+ // `reserved` until the batch settles.
+ Net int64 `json:"net" api:"required"`
+ // Credits returned for pages that did not succeed. Stays 0 until the batch reaches
+ // a final status, then settles in one movement.
+ Refunded int64 `json:"refunded" api:"required"`
+ // Credits debited from your balance the moment the batch was accepted. This is a
+ // charge, not a forecast — the whole amount leaves the balance up front.
+ Reserved int64 `json:"reserved" api:"required"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
- Charged respjson.Field
- Estimated respjson.Field
+ Net respjson.Field
+ Refunded respjson.Field
+ Reserved respjson.Field
ExtraFields map[string]respjson.Field
raw string
} `json:"-"`
@@ -225,32 +383,14 @@ func (r *BatchGetResponseCredits) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Submission counts.
-type BatchGetResponseInput struct {
- // Pages accepted, or the crawl page limit. Credits are reserved for this count.
- Accepted int64 `json:"accepted" api:"required"`
- // Duplicate URL and `itemId` pairs skipped. Always 0 for crawls.
- Duplicates int64 `json:"duplicates" api:"required"`
- // Pages rejected during validation.
- Invalid int64 `json:"invalid" api:"required"`
- // Pages submitted before validation. For a crawl, the page limit.
- Submitted int64 `json:"submitted" api:"required"`
- // JSON contains metadata for fields, check presence with [respjson.Field.Valid].
- JSON struct {
- Accepted respjson.Field
- Duplicates respjson.Field
- Invalid respjson.Field
- Submitted respjson.Field
- ExtraFields map[string]respjson.Field
- raw string
- } `json:"-"`
-}
+// What each page is returned as. Matches `input.data.format` on the submit
+// request.
+type BatchGetResponseFormat string
-// Returns the unmodified JSON received from the API
-func (r BatchGetResponseInput) RawJSON() string { return r.JSON.raw }
-func (r *BatchGetResponseInput) UnmarshalJSON(data []byte) error {
- return apijson.UnmarshalRoot(data, r)
-}
+const (
+ BatchGetResponseFormatMarkdown BatchGetResponseFormat = "markdown"
+ BatchGetResponseFormatHTML BatchGetResponseFormat = "html"
+)
type BatchGetResponseInvalidURL struct {
// Why it was rejected.
@@ -272,7 +412,7 @@ func (r *BatchGetResponseInvalidURL) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// How pages are selected.
+// How pages were selected. Matches `input.mode` on the submit request.
type BatchGetResponseMode string
const (
@@ -280,12 +420,13 @@ const (
BatchGetResponseModeCrawl BatchGetResponseMode = "crawl"
)
-// Current processing counts. Use `status` to check completion.
+// Pages attempted so far. Use `status` to check completion.
type BatchGetResponseProgress struct {
// Pages that could not be scraped.
Failed int64 `json:"failed" api:"required"`
- // Accepted pages not yet attempted. Always 0 once the batch completes; a crawl can
- // finish under its page limit when the site has no more reachable pages.
+ // Reserved pages not yet attempted. A cancelled batch keeps reporting the URLs it
+ // never reached; a crawl whose `input.reserved_is_ceiling` is true reports 0 once
+ // final, because its unspent budget was never real pages.
Pending int64 `json:"pending" api:"required"`
// Pages scraped successfully.
Succeeded int64 `json:"succeeded" api:"required"`
@@ -305,8 +446,8 @@ func (r *BatchGetResponseProgress) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Download links available when the batch finishes. GET /batch/{batch_id}/results
-// serves the same records as paginated JSON.
+// Download links, available once the batch reaches a final status and null before
+// then. GET /batch/{batch_id}/results serves the same records as paginated JSON.
type BatchGetResponseResults struct {
// When the download URLs expire.
ExpiresAt string `json:"expires_at" api:"required"`
@@ -385,14 +526,6 @@ func (r *BatchGetResponseTiming) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Output format.
-type BatchGetResponseType string
-
-const (
- BatchGetResponseTypeMarkdown BatchGetResponseType = "markdown"
- BatchGetResponseTypeHTML BatchGetResponseType = "html"
-)
-
// API key usage for this request.
type BatchGetResponseKeyMetadata struct {
// The number of credits consumed by this request.
@@ -445,22 +578,32 @@ func (r *BatchListResponse) UnmarshalJSON(data []byte) error {
type BatchListResponseData struct {
// Batch ID used to retrieve or cancel the job.
ID string `json:"id" api:"required"`
- // Reserved and used credits.
+ // The crawl controls as submitted, so the limits requested can be compared against
+ // what the crawl reached.
+ Crawl CrawlControls `json:"crawl" api:"required"`
+ // What this batch has done to your credit balance.
Credits BatchListResponseDataCredits `json:"credits" api:"required"`
- // Why the batch failed.
- Error Error `json:"error" api:"required"`
- // Page failures grouped by error code.
- Errors []ErrorCount `json:"errors" api:"required"`
- // Submission counts.
- Input BatchListResponseDataInput `json:"input" api:"required"`
- // How pages are selected.
+ // A failure of the batch as a whole, distinct from the per-page failures in
+ // `page_errors`.
+ Failure Failure `json:"failure" api:"required"`
+ // What each page is returned as. Matches `input.data.format` on the submit
+ // request.
+ //
+ // Any of "markdown", "html".
+ Format string `json:"format" api:"required"`
+ // What submission took in, and what it charged for.
+ Input Intake `json:"input" api:"required"`
+ // How pages were selected. Matches `input.mode` on the submit request.
//
// Any of "scrape", "crawl".
Mode string `json:"mode" api:"required"`
- // Current processing counts. Use `status` to check completion.
+ // Individual page failures grouped by error code, sorted by count. Unrelated to
+ // `failure`, which is the batch itself failing.
+ PageErrors []PageErrorCount `json:"page_errors" api:"required"`
+ // Pages attempted so far. Use `status` to check completion.
Progress BatchListResponseDataProgress `json:"progress" api:"required"`
- // Download links available when the batch finishes. GET /batch/{batch_id}/results
- // serves the same records as paginated JSON.
+ // Download links, available once the batch reaches a final status and null before
+ // then. GET /batch/{batch_id}/results serves the same records as paginated JSON.
Results BatchListResponseDataResults `json:"results" api:"required"`
// Current state. `completed`, `cancelled`, and `failed` are final.
//
@@ -469,24 +612,21 @@ type BatchListResponseData struct {
// Tags stored on the batch at submission.
Tags []string `json:"tags" api:"required"`
Timing BatchListResponseDataTiming `json:"timing" api:"required"`
- // Output format.
- //
- // Any of "markdown", "html".
- Type string `json:"type" api:"required"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
ID respjson.Field
+ Crawl respjson.Field
Credits respjson.Field
- Error respjson.Field
- Errors respjson.Field
+ Failure respjson.Field
+ Format respjson.Field
Input respjson.Field
Mode respjson.Field
+ PageErrors respjson.Field
Progress respjson.Field
Results respjson.Field
Status respjson.Field
Tags respjson.Field
Timing respjson.Field
- Type respjson.Field
ExtraFields map[string]respjson.Field
raw string
} `json:"-"`
@@ -498,16 +638,22 @@ func (r *BatchListResponseData) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Reserved and used credits.
+// What this batch has done to your credit balance.
type BatchListResponseDataCredits struct {
- // Credits used by successful pages.
- Charged int64 `json:"charged" api:"required"`
- // Credits reserved when the batch was accepted.
- Estimated int64 `json:"estimated" api:"required"`
+ // `reserved` minus `refunded` — what the batch has cost so far. Equal to
+ // `reserved` until the batch settles.
+ Net int64 `json:"net" api:"required"`
+ // Credits returned for pages that did not succeed. Stays 0 until the batch reaches
+ // a final status, then settles in one movement.
+ Refunded int64 `json:"refunded" api:"required"`
+ // Credits debited from your balance the moment the batch was accepted. This is a
+ // charge, not a forecast — the whole amount leaves the balance up front.
+ Reserved int64 `json:"reserved" api:"required"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
- Charged respjson.Field
- Estimated respjson.Field
+ Net respjson.Field
+ Refunded respjson.Field
+ Reserved respjson.Field
ExtraFields map[string]respjson.Field
raw string
} `json:"-"`
@@ -519,39 +665,13 @@ func (r *BatchListResponseDataCredits) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Submission counts.
-type BatchListResponseDataInput struct {
- // Pages accepted, or the crawl page limit. Credits are reserved for this count.
- Accepted int64 `json:"accepted" api:"required"`
- // Duplicate URL and `itemId` pairs skipped. Always 0 for crawls.
- Duplicates int64 `json:"duplicates" api:"required"`
- // Pages rejected during validation.
- Invalid int64 `json:"invalid" api:"required"`
- // Pages submitted before validation. For a crawl, the page limit.
- Submitted int64 `json:"submitted" api:"required"`
- // JSON contains metadata for fields, check presence with [respjson.Field.Valid].
- JSON struct {
- Accepted respjson.Field
- Duplicates respjson.Field
- Invalid respjson.Field
- Submitted respjson.Field
- ExtraFields map[string]respjson.Field
- raw string
- } `json:"-"`
-}
-
-// Returns the unmodified JSON received from the API
-func (r BatchListResponseDataInput) RawJSON() string { return r.JSON.raw }
-func (r *BatchListResponseDataInput) UnmarshalJSON(data []byte) error {
- return apijson.UnmarshalRoot(data, r)
-}
-
-// Current processing counts. Use `status` to check completion.
+// Pages attempted so far. Use `status` to check completion.
type BatchListResponseDataProgress struct {
// Pages that could not be scraped.
Failed int64 `json:"failed" api:"required"`
- // Accepted pages not yet attempted. Always 0 once the batch completes; a crawl can
- // finish under its page limit when the site has no more reachable pages.
+ // Reserved pages not yet attempted. A cancelled batch keeps reporting the URLs it
+ // never reached; a crawl whose `input.reserved_is_ceiling` is true reports 0 once
+ // final, because its unspent budget was never real pages.
Pending int64 `json:"pending" api:"required"`
// Pages scraped successfully.
Succeeded int64 `json:"succeeded" api:"required"`
@@ -571,8 +691,8 @@ func (r *BatchListResponseDataProgress) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Download links available when the batch finishes. GET /batch/{batch_id}/results
-// serves the same records as paginated JSON.
+// Download links, available once the batch reaches a final status and null before
+// then. GET /batch/{batch_id}/results serves the same records as paginated JSON.
type BatchListResponseDataResults struct {
// When the download URLs expire.
ExpiresAt string `json:"expires_at" api:"required"`
@@ -664,22 +784,32 @@ func (r *BatchListResponseKeyMetadata) UnmarshalJSON(data []byte) error {
type BatchCancelResponse struct {
// Batch ID used to retrieve or cancel the job.
ID string `json:"id" api:"required"`
- // Reserved and used credits.
+ // The crawl controls as submitted, so the limits requested can be compared against
+ // what the crawl reached.
+ Crawl CrawlControls `json:"crawl" api:"required"`
+ // What this batch has done to your credit balance.
Credits BatchCancelResponseCredits `json:"credits" api:"required"`
- // Why the batch failed.
- Error Error `json:"error" api:"required"`
- // Page failures grouped by error code.
- Errors []ErrorCount `json:"errors" api:"required"`
- // Submission counts.
- Input BatchCancelResponseInput `json:"input" api:"required"`
- // How pages are selected.
+ // A failure of the batch as a whole, distinct from the per-page failures in
+ // `page_errors`.
+ Failure Failure `json:"failure" api:"required"`
+ // What each page is returned as. Matches `input.data.format` on the submit
+ // request.
+ //
+ // Any of "markdown", "html".
+ Format BatchCancelResponseFormat `json:"format" api:"required"`
+ // What submission took in, and what it charged for.
+ Input Intake `json:"input" api:"required"`
+ // How pages were selected. Matches `input.mode` on the submit request.
//
// Any of "scrape", "crawl".
Mode BatchCancelResponseMode `json:"mode" api:"required"`
- // Current processing counts. Use `status` to check completion.
+ // Individual page failures grouped by error code, sorted by count. Unrelated to
+ // `failure`, which is the batch itself failing.
+ PageErrors []PageErrorCount `json:"page_errors" api:"required"`
+ // Pages attempted so far. Use `status` to check completion.
Progress BatchCancelResponseProgress `json:"progress" api:"required"`
- // Download links available when the batch finishes. GET /batch/{batch_id}/results
- // serves the same records as paginated JSON.
+ // Download links, available once the batch reaches a final status and null before
+ // then. GET /batch/{batch_id}/results serves the same records as paginated JSON.
Results BatchCancelResponseResults `json:"results" api:"required"`
// Current state. `completed`, `cancelled`, and `failed` are final.
//
@@ -688,26 +818,23 @@ type BatchCancelResponse struct {
// Tags stored on the batch at submission.
Tags []string `json:"tags" api:"required"`
Timing BatchCancelResponseTiming `json:"timing" api:"required"`
- // Output format.
- //
- // Any of "markdown", "html".
- Type BatchCancelResponseType `json:"type" api:"required"`
// API key usage for this request.
KeyMetadata BatchCancelResponseKeyMetadata `json:"key_metadata"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
ID respjson.Field
+ Crawl respjson.Field
Credits respjson.Field
- Error respjson.Field
- Errors respjson.Field
+ Failure respjson.Field
+ Format respjson.Field
Input respjson.Field
Mode respjson.Field
+ PageErrors respjson.Field
Progress respjson.Field
Results respjson.Field
Status respjson.Field
Tags respjson.Field
Timing respjson.Field
- Type respjson.Field
KeyMetadata respjson.Field
ExtraFields map[string]respjson.Field
raw string
@@ -720,16 +847,22 @@ func (r *BatchCancelResponse) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Reserved and used credits.
+// What this batch has done to your credit balance.
type BatchCancelResponseCredits struct {
- // Credits used by successful pages.
- Charged int64 `json:"charged" api:"required"`
- // Credits reserved when the batch was accepted.
- Estimated int64 `json:"estimated" api:"required"`
+ // `reserved` minus `refunded` — what the batch has cost so far. Equal to
+ // `reserved` until the batch settles.
+ Net int64 `json:"net" api:"required"`
+ // Credits returned for pages that did not succeed. Stays 0 until the batch reaches
+ // a final status, then settles in one movement.
+ Refunded int64 `json:"refunded" api:"required"`
+ // Credits debited from your balance the moment the batch was accepted. This is a
+ // charge, not a forecast — the whole amount leaves the balance up front.
+ Reserved int64 `json:"reserved" api:"required"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
- Charged respjson.Field
- Estimated respjson.Field
+ Net respjson.Field
+ Refunded respjson.Field
+ Reserved respjson.Field
ExtraFields map[string]respjson.Field
raw string
} `json:"-"`
@@ -741,34 +874,16 @@ func (r *BatchCancelResponseCredits) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Submission counts.
-type BatchCancelResponseInput struct {
- // Pages accepted, or the crawl page limit. Credits are reserved for this count.
- Accepted int64 `json:"accepted" api:"required"`
- // Duplicate URL and `itemId` pairs skipped. Always 0 for crawls.
- Duplicates int64 `json:"duplicates" api:"required"`
- // Pages rejected during validation.
- Invalid int64 `json:"invalid" api:"required"`
- // Pages submitted before validation. For a crawl, the page limit.
- Submitted int64 `json:"submitted" api:"required"`
- // JSON contains metadata for fields, check presence with [respjson.Field.Valid].
- JSON struct {
- Accepted respjson.Field
- Duplicates respjson.Field
- Invalid respjson.Field
- Submitted respjson.Field
- ExtraFields map[string]respjson.Field
- raw string
- } `json:"-"`
-}
+// What each page is returned as. Matches `input.data.format` on the submit
+// request.
+type BatchCancelResponseFormat string
-// Returns the unmodified JSON received from the API
-func (r BatchCancelResponseInput) RawJSON() string { return r.JSON.raw }
-func (r *BatchCancelResponseInput) UnmarshalJSON(data []byte) error {
- return apijson.UnmarshalRoot(data, r)
-}
+const (
+ BatchCancelResponseFormatMarkdown BatchCancelResponseFormat = "markdown"
+ BatchCancelResponseFormatHTML BatchCancelResponseFormat = "html"
+)
-// How pages are selected.
+// How pages were selected. Matches `input.mode` on the submit request.
type BatchCancelResponseMode string
const (
@@ -776,12 +891,13 @@ const (
BatchCancelResponseModeCrawl BatchCancelResponseMode = "crawl"
)
-// Current processing counts. Use `status` to check completion.
+// Pages attempted so far. Use `status` to check completion.
type BatchCancelResponseProgress struct {
// Pages that could not be scraped.
Failed int64 `json:"failed" api:"required"`
- // Accepted pages not yet attempted. Always 0 once the batch completes; a crawl can
- // finish under its page limit when the site has no more reachable pages.
+ // Reserved pages not yet attempted. A cancelled batch keeps reporting the URLs it
+ // never reached; a crawl whose `input.reserved_is_ceiling` is true reports 0 once
+ // final, because its unspent budget was never real pages.
Pending int64 `json:"pending" api:"required"`
// Pages scraped successfully.
Succeeded int64 `json:"succeeded" api:"required"`
@@ -801,8 +917,8 @@ func (r *BatchCancelResponseProgress) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Download links available when the batch finishes. GET /batch/{batch_id}/results
-// serves the same records as paginated JSON.
+// Download links, available once the batch reaches a final status and null before
+// then. GET /batch/{batch_id}/results serves the same records as paginated JSON.
type BatchCancelResponseResults struct {
// When the download URLs expire.
ExpiresAt string `json:"expires_at" api:"required"`
@@ -881,14 +997,6 @@ func (r *BatchCancelResponseTiming) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Output format.
-type BatchCancelResponseType string
-
-const (
- BatchCancelResponseTypeMarkdown BatchCancelResponseType = "markdown"
- BatchCancelResponseTypeHTML BatchCancelResponseType = "html"
-)
-
// API key usage for this request.
type BatchCancelResponseKeyMetadata struct {
// The number of credits consumed by this request.
From 3caf6a2bd7c4f4f4d10d468dc6d8481f5532c4df Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 31 Jul 2026 22:45:41 +0000
Subject: [PATCH 2/4] feat(api): api update
---
.stats.yml | 4 +-
batch.go | 118 +++++++++++------------------------------------------
2 files changed, 26 insertions(+), 96 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 963533f..06846fb 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-838f03b1c3584485eeded993459e6bbae058da9f6df16b7967980fbba98cc748.yml
-openapi_spec_hash: 4a9db9cd9eac4ae4e2694b3d835a772f
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-21a0195dcea548066fd6c227d634217b897900a6732a688e41c83344c2e92c94.yml
+openapi_spec_hash: 388f5780dc9bf205c04b6a6214e4fafc
config_hash: 2bea1743c84d63bd61f8501a6ea63065
diff --git a/batch.go b/batch.go
index 9aefe24..56412ae 100644
--- a/batch.go
+++ b/batch.go
@@ -782,41 +782,35 @@ func (r *BatchListResponseKeyMetadata) UnmarshalJSON(data []byte) error {
}
type BatchCancelResponse struct {
- // Batch ID used to retrieve or cancel the job.
+ // Batch ID.
ID string `json:"id" api:"required"`
// The crawl controls as submitted, so the limits requested can be compared against
// what the crawl reached.
Crawl CrawlControls `json:"crawl" api:"required"`
- // What this batch has done to your credit balance.
+ // What this batch cost so far.
Credits BatchCancelResponseCredits `json:"credits" api:"required"`
- // A failure of the batch as a whole, distinct from the per-page failures in
- // `page_errors`.
- Failure Failure `json:"failure" api:"required"`
- // What each page is returned as. Matches `input.data.format` on the submit
- // request.
+ // What each page is returned as.
//
// Any of "markdown", "html".
Format BatchCancelResponseFormat `json:"format" api:"required"`
// What submission took in, and what it charged for.
Input Intake `json:"input" api:"required"`
- // How pages were selected. Matches `input.mode` on the submit request.
+ // How pages were selected.
//
// Any of "scrape", "crawl".
Mode BatchCancelResponseMode `json:"mode" api:"required"`
- // Individual page failures grouped by error code, sorted by count. Unrelated to
- // `failure`, which is the batch itself failing.
+ // Page failures so far, grouped by error code and sorted by count.
PageErrors []PageErrorCount `json:"page_errors" api:"required"`
- // Pages attempted so far. Use `status` to check completion.
+ // How far the batch got before cancellation.
Progress BatchCancelResponseProgress `json:"progress" api:"required"`
- // Download links, available once the batch reaches a final status and null before
- // then. GET /batch/{batch_id}/results serves the same records as paginated JSON.
- Results BatchCancelResponseResults `json:"results" api:"required"`
- // Current state. `completed`, `cancelled`, and `failed` are final.
+ // Always `cancelling`. Work already in flight finishes; the batch reaches
+ // `cancelled` shortly after.
//
- // Any of "queued", "running", "cancelling", "completed", "cancelled", "failed".
+ // Any of "cancelling".
Status BatchCancelResponseStatus `json:"status" api:"required"`
// Tags stored on the batch at submission.
- Tags []string `json:"tags" api:"required"`
+ Tags []string `json:"tags" api:"required"`
+ // There is no finish time yet — the batch is still winding down.
Timing BatchCancelResponseTiming `json:"timing" api:"required"`
// API key usage for this request.
KeyMetadata BatchCancelResponseKeyMetadata `json:"key_metadata"`
@@ -825,13 +819,11 @@ type BatchCancelResponse struct {
ID respjson.Field
Crawl respjson.Field
Credits respjson.Field
- Failure respjson.Field
Format respjson.Field
Input respjson.Field
Mode respjson.Field
PageErrors respjson.Field
Progress respjson.Field
- Results respjson.Field
Status respjson.Field
Tags respjson.Field
Timing respjson.Field
@@ -847,21 +839,13 @@ func (r *BatchCancelResponse) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// What this batch has done to your credit balance.
+// What this batch cost so far.
type BatchCancelResponseCredits struct {
- // `reserved` minus `refunded` — what the batch has cost so far. Equal to
- // `reserved` until the batch settles.
- Net int64 `json:"net" api:"required"`
- // Credits returned for pages that did not succeed. Stays 0 until the batch reaches
- // a final status, then settles in one movement.
- Refunded int64 `json:"refunded" api:"required"`
- // Credits debited from your balance the moment the batch was accepted. This is a
- // charge, not a forecast — the whole amount leaves the balance up front.
+ // Credits debited at submission. The unspent remainder is refunded once the batch
+ // settles — read `credits.refunded` from GET /batch/{batch_id} then.
Reserved int64 `json:"reserved" api:"required"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
- Net respjson.Field
- Refunded respjson.Field
Reserved respjson.Field
ExtraFields map[string]respjson.Field
raw string
@@ -874,8 +858,7 @@ func (r *BatchCancelResponseCredits) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// What each page is returned as. Matches `input.data.format` on the submit
-// request.
+// What each page is returned as.
type BatchCancelResponseFormat string
const (
@@ -883,7 +866,7 @@ const (
BatchCancelResponseFormatHTML BatchCancelResponseFormat = "html"
)
-// How pages were selected. Matches `input.mode` on the submit request.
+// How pages were selected.
type BatchCancelResponseMode string
const (
@@ -891,15 +874,13 @@ const (
BatchCancelResponseModeCrawl BatchCancelResponseMode = "crawl"
)
-// Pages attempted so far. Use `status` to check completion.
+// How far the batch got before cancellation.
type BatchCancelResponseProgress struct {
- // Pages that could not be scraped.
+ // Pages that could not be scraped before the request landed.
Failed int64 `json:"failed" api:"required"`
- // Reserved pages not yet attempted. A cancelled batch keeps reporting the URLs it
- // never reached; a crawl whose `input.reserved_is_ceiling` is true reports 0 once
- // final, because its unspent budget was never real pages.
+ // Reserved pages that will now be skipped, and refunded when the batch settles.
Pending int64 `json:"pending" api:"required"`
- // Pages scraped successfully.
+ // Pages scraped successfully before the request landed.
Succeeded int64 `json:"succeeded" api:"required"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
@@ -917,73 +898,22 @@ func (r *BatchCancelResponseProgress) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Download links, available once the batch reaches a final status and null before
-// then. GET /batch/{batch_id}/results serves the same records as paginated JSON.
-type BatchCancelResponseResults struct {
- // When the download URLs expire.
- ExpiresAt string `json:"expires_at" api:"required"`
- // Result files. Order is not guaranteed.
- Files []BatchCancelResponseResultsFile `json:"files" api:"required"`
- // JSON contains metadata for fields, check presence with [respjson.Field.Valid].
- JSON struct {
- ExpiresAt respjson.Field
- Files respjson.Field
- ExtraFields map[string]respjson.Field
- raw string
- } `json:"-"`
-}
-
-// Returns the unmodified JSON received from the API
-func (r BatchCancelResponseResults) RawJSON() string { return r.JSON.raw }
-func (r *BatchCancelResponseResults) UnmarshalJSON(data []byte) error {
- return apijson.UnmarshalRoot(data, r)
-}
-
-type BatchCancelResponseResultsFile struct {
- // Compressed file size in bytes.
- Bytes int64 `json:"bytes" api:"required"`
- // Results in this file.
- Items int64 `json:"items" api:"required"`
- // Temporary URL for a gzipped NDJSON file.
- URL string `json:"url" api:"required"`
- // JSON contains metadata for fields, check presence with [respjson.Field.Valid].
- JSON struct {
- Bytes respjson.Field
- Items respjson.Field
- URL respjson.Field
- ExtraFields map[string]respjson.Field
- raw string
- } `json:"-"`
-}
-
-// Returns the unmodified JSON received from the API
-func (r BatchCancelResponseResultsFile) RawJSON() string { return r.JSON.raw }
-func (r *BatchCancelResponseResultsFile) UnmarshalJSON(data []byte) error {
- return apijson.UnmarshalRoot(data, r)
-}
-
-// Current state. `completed`, `cancelled`, and `failed` are final.
+// Always `cancelling`. Work already in flight finishes; the batch reaches
+// `cancelled` shortly after.
type BatchCancelResponseStatus string
const (
- BatchCancelResponseStatusQueued BatchCancelResponseStatus = "queued"
- BatchCancelResponseStatusRunning BatchCancelResponseStatus = "running"
BatchCancelResponseStatusCancelling BatchCancelResponseStatus = "cancelling"
- BatchCancelResponseStatusCompleted BatchCancelResponseStatus = "completed"
- BatchCancelResponseStatusCancelled BatchCancelResponseStatus = "cancelled"
- BatchCancelResponseStatusFailed BatchCancelResponseStatus = "failed"
)
+// There is no finish time yet — the batch is still winding down.
type BatchCancelResponseTiming struct {
- // When processing finished. Null while active.
- CompletedAt string `json:"completed_at" api:"required"`
// When the batch was created.
CreatedAt string `json:"created_at" api:"required"`
- // When processing started. Null while queued.
+ // When processing started. Null if it was cancelled while still queued.
StartedAt string `json:"started_at" api:"required"`
// JSON contains metadata for fields, check presence with [respjson.Field.Valid].
JSON struct {
- CompletedAt respjson.Field
CreatedAt respjson.Field
StartedAt respjson.Field
ExtraFields map[string]respjson.Field
From 4c828e0356eb08bae31f2e3d027c36f371f8f601 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Sat, 1 Aug 2026 00:42:48 +0000
Subject: [PATCH 3/4] feat(api): api update
---
.stats.yml | 4 ++--
batch.go | 9 +++------
web.go | 40 ++++++++++++++++------------------------
3 files changed, 21 insertions(+), 32 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 06846fb..3b484e3 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-21a0195dcea548066fd6c227d634217b897900a6732a688e41c83344c2e92c94.yml
-openapi_spec_hash: 388f5780dc9bf205c04b6a6214e4fafc
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-758c3a2fbd5b7be61c8e6e0ad2e6a5ec30695747bb675960d888c497647d13d7.yml
+openapi_spec_hash: 00002d90bde02f67e174368ae470c597
config_hash: 2bea1743c84d63bd61f8501a6ea63065
diff --git a/batch.go b/batch.go
index 56412ae..9415b9b 100644
--- a/batch.go
+++ b/batch.go
@@ -39,9 +39,7 @@ func NewBatchService(opts ...option.RequestOption) (r BatchService) {
return
}
-// Check progress and get download links when the batch finishes. Also returns the
-// rejected-URL list from submission. The webhook signing secret is not repeated
-// here — it is returned once, by the submit response.
+// Check progress, and get download links once the batch finishes.
func (r *BatchService) Get(ctx context.Context, batchID string, opts ...option.RequestOption) (res *BatchGetResponse, err error) {
opts = slices.Concat(r.options, opts)
if batchID == "" {
@@ -75,9 +73,8 @@ func (r *BatchService) Cancel(ctx context.Context, batchID string, opts ...optio
return res, err
}
-// Page through the result records of a finished batch as JSON, in the same order
-// as the downloadable result files. Use this instead of downloading and parsing
-// the NDJSON files yourself.
+// Page through a finished batch's results as JSON instead of downloading the
+// NDJSON files.
func (r *BatchService) GetResults(ctx context.Context, batchID string, query BatchGetResultsParams, opts ...option.RequestOption) (res *BatchGetResultsResponse, err error) {
opts = slices.Concat(r.options, opts)
if batchID == "" {
diff --git a/web.go b/web.go
index 6a6a9b6..b4c3e51 100644
--- a/web.go
+++ b/web.go
@@ -2659,9 +2659,8 @@ type WebScreenshotParams struct {
//
// Any of "light", "dark".
ColorScheme WebScreenshotParamsColorScheme `query:"colorScheme,omitzero" json:"-"`
- // Two-letter ISO 3166-1 alpha-2 country code identifying a supported Context.dev
- // residential proxy exit location. Must be one of Context.dev's supported
- // countries. When provided, Context.dev fetches the target page from that country.
+ // Fetch the target page through a residential proxy in this country (ISO 3166-1
+ // alpha-2).
//
// Any of "ad", "ae", "af", "ag", "ai", "al", "am", "ao", "ar", "at", "au", "aw",
// "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bm", "bn", "bo",
@@ -2732,9 +2731,8 @@ const (
WebScreenshotParamsColorSchemeDark WebScreenshotParamsColorScheme = "dark"
)
-// Two-letter ISO 3166-1 alpha-2 country code identifying a supported Context.dev
-// residential proxy exit location. Must be one of Context.dev's supported
-// countries. When provided, Context.dev fetches the target page from that country.
+// Fetch the target page through a residential proxy in this country (ISO 3166-1
+// alpha-2).
type WebScreenshotParamsCountry string
const (
@@ -3437,9 +3435,8 @@ type WebWebCrawlMdParams struct {
// Optional browser wait time in milliseconds after initial page load for each
// crawled page. Min: 0. Max: 30000 (30 seconds).
WaitForMs param.Opt[int64] `json:"waitForMs,omitzero"`
- // Two-letter ISO 3166-1 alpha-2 country code identifying a supported Context.dev
- // residential proxy exit location. Must be one of Context.dev's supported
- // countries. When provided, Context.dev fetches the target page from that country.
+ // Fetch the target page through a residential proxy in this country (ISO 3166-1
+ // alpha-2).
//
// Any of "ad", "ae", "af", "ag", "ai", "al", "am", "ao", "ar", "at", "au", "aw",
// "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bm", "bn", "bo",
@@ -3490,9 +3487,8 @@ func (r *WebWebCrawlMdParams) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
-// Two-letter ISO 3166-1 alpha-2 country code identifying a supported Context.dev
-// residential proxy exit location. Must be one of Context.dev's supported
-// countries. When provided, Context.dev fetches the target page from that country.
+// Fetch the target page through a residential proxy in this country (ISO 3166-1
+// alpha-2).
type WebWebCrawlMdParamsCountry string
const (
@@ -3765,9 +3761,8 @@ type WebWebScrapeHTMLParams struct {
// kept and everything else is dropped. When omitted, the entire document is kept.
// Examples: "article.main", "#content", "[role=main]".
IncludeSelectors []string `query:"includeSelectors,omitzero" json:"-"`
- // Two-letter ISO 3166-1 alpha-2 country code identifying a supported Context.dev
- // residential proxy exit location. Must be one of Context.dev's supported
- // countries. When provided, Context.dev fetches the target page from that country.
+ // Fetch the target page through a residential proxy in this country (ISO 3166-1
+ // alpha-2).
//
// Any of "ad", "ae", "af", "ag", "ai", "al", "am", "ao", "ar", "at", "au", "aw",
// "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bm", "bn", "bo",
@@ -3879,9 +3874,8 @@ func (r WebWebScrapeHTMLParamsActionPerform) URLQuery() (v url.Values, err error
})
}
-// Two-letter ISO 3166-1 alpha-2 country code identifying a supported Context.dev
-// residential proxy exit location. Must be one of Context.dev's supported
-// countries. When provided, Context.dev fetches the target page from that country.
+// Fetch the target page through a residential proxy in this country (ISO 3166-1
+// alpha-2).
type WebWebScrapeHTMLParamsCountry string
const (
@@ -4442,9 +4436,8 @@ type WebWebScrapeMdParams struct {
// descendants) are kept before conversion to Markdown. When omitted, the entire
// document is kept. Examples: "article.main", "#content", "[role=main]".
IncludeSelectors []string `query:"includeSelectors,omitzero" json:"-"`
- // Two-letter ISO 3166-1 alpha-2 country code identifying a supported Context.dev
- // residential proxy exit location. Must be one of Context.dev's supported
- // countries. When provided, Context.dev fetches the target page from that country.
+ // Fetch the target page through a residential proxy in this country (ISO 3166-1
+ // alpha-2).
//
// Any of "ad", "ae", "af", "ag", "ai", "al", "am", "ao", "ar", "at", "au", "aw",
// "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "bj", "bm", "bn", "bo",
@@ -4562,9 +4555,8 @@ func (r WebWebScrapeMdParamsActionPerform) URLQuery() (v url.Values, err error)
})
}
-// Two-letter ISO 3166-1 alpha-2 country code identifying a supported Context.dev
-// residential proxy exit location. Must be one of Context.dev's supported
-// countries. When provided, Context.dev fetches the target page from that country.
+// Fetch the target page through a residential proxy in this country (ISO 3166-1
+// alpha-2).
type WebWebScrapeMdParamsCountry string
const (
From 7daa35ad58abb1418cfca35d9108c573435a7a74 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Sat, 1 Aug 2026 00:43:08 +0000
Subject: [PATCH 4/4] release: 2.7.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 10 ++++++++++
README.md | 2 +-
internal/version.go | 2 +-
4 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 511dd51..d1328ca 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "2.6.0"
+ ".": "2.7.0"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9a6d1da..f635b52 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,15 @@
# Changelog
+## 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)
+
+### Features
+
+* **api:** api update ([4c828e0](https://github.com/context-dot-dev/context-go-sdk/commit/4c828e0356eb08bae31f2e3d027c36f371f8f601))
+* **api:** api update ([3caf6a2](https://github.com/context-dot-dev/context-go-sdk/commit/3caf6a2bd7c4f4f4d10d468dc6d8481f5532c4df))
+* **api:** api update ([c68d11b](https://github.com/context-dot-dev/context-go-sdk/commit/c68d11b9b68dc1fb625ae620c9f66beafef8bb0e))
+
## 2.6.0 (2026-07-31)
Full Changelog: [v2.5.0...v2.6.0](https://github.com/context-dot-dev/context-go-sdk/compare/v2.5.0...v2.6.0)
diff --git a/README.md b/README.md
index 291ae6f..46b184b 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.6.0'
+go get -u 'github.com/context-dot-dev/context-go-sdk@v2.7.0'
```
diff --git a/internal/version.go b/internal/version.go
index e0668d4..166fc82 100644
--- a/internal/version.go
+++ b/internal/version.go
@@ -2,4 +2,4 @@
package internal
-const PackageVersion = "2.6.0" // x-release-please-version
+const PackageVersion = "2.7.0" // x-release-please-version