Catalog refresh v0.37.0: Shorts gets its own SKU, twitter.search drops lang - #31
Merged
Conversation
Accepts the blocked classification that has stopped every regen run since 2026-09-01T06:55Z. All eleven surface changes trace to a deliberate merged AnyAPI change, so the fail-closed gate did its job and this is the review it was waiting for. Minor bump, following the v0.34.0 precedent for a reviewed narrowing (#29). Breaking, in the order a customer will hit them: twitter.search input.lang is gone. X honours "lang:" inside the query, and declaring lang collapsed the SKU to one apify lane at 9x the price, so it was retired upstream (anyapi#940). Put it in the query: query: "coffee lang:en". The gateway still folds a sent lang into the query, so an untyped caller keeps working; the SDK type no longer offers it. youtube.search_hashtag input.type no longer accepts "shorts", only "all". No source we buy returns a hashtag Shorts row with the channel and publish time this endpoint requires, so the filter was unpublished (anyapi#961). youtube.search_shorts new SKU, and the replacement for the Shorts rows above: client.youtube.searchShorts({ query }) / client.youtube.search_shorts(query=...), cursor-paginated, $0.002 per request (anyapi#965). company_enrichment.crustdata_v3 output name is now optional. A single null title aborted the whole transform and threw away every good row beside it (anyapi#1044). youtube.channel_shorts output.shorts[].title is now optional, same reason (anyapi#1023). tiktok.video input.url is now optional because input.id was added: the SKU accepts either (anyapi#1030). Existing url callers are unaffected. The IR carries no anyOf, so both read as optional in the emitted types; send one. tiktok.video_transcript_full output.segments[].words[].confidence lost its 0..1 bounds. On audio the recognizer could not align, it reports a negative log-scale score, and the old bound rejected real responses (anyapi#1023). Read the sign before treating the number as a probability. yelp.search input.limit now documents its default of 20, which is what the gateway already applied (anyapi#1003). Also in this refresh: threads.search gains optional startDate and endDate (anyapi#940), and eleven SKUs reprice, most of them down - maps.reviews $0.0441 -> $0.0035, yelp.search $0.0605 -> $0.0035, perplexity.search $0.0111 -> $0.0036, youtube.video_transcript_full $0.00308 -> $0.001. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Regenerated against the live gateway exactly as
regen.ymldoes (fetchthenpnpm generate), then reviewed.regen.ymlhas classified blocked and failed on every run since 2026-09-01T06:55Z, so the published SDKs are five days stale at v0.36.0. This is the human decision the fail-closed gate was holding out for.Every blocked item traces to a deliberate upstream change
company_enrichment.crustdata_v3tiktok.videourlmoved into ananyOfwith the newidoutput.segments[].words[].confidencenumeric bounds changedtiktok.video_transcript_fullminimum: 0rejectedinput.limitdefault changedyelp.search"default": 20so lane eligibility reads the same number the docs selloutput.shorts[]required fields changedyoutube.channel_shortsinput.langfield removedtwitter.searchlangcollapsed the SKU to one apify lane at 9x the price; retired in favour oflang:inside the queryinput.typeenum member"shorts"removedyoutube.search_hashtaginput.startDate/input.endDateaddedthreads.searchinput.idaddedtiktok.videoyoutube.search_shortsNothing here reads as an accident. Every one is a merged PR with its own measurement, so the batch is accepted rather than the classifier weakened -
generator/src/classify.tsis untouched.One correction to the brief: the
"shorts"enum member was removed by anyapi#961, not #965. They are siblings from the same evening - #965 promoted Shorts to their own SKU, #961 removed the hashtag Shorts filter that could not be attributed.What a customer has to change
twitter.search:langis gone. Move it into the query:query: "coffee lang:en". The gateway still folds a sentlanginto the query, so an untyped caller keeps working, but the emitted type no longer offers the field.youtube.search_hashtag:typeno longer accepts"shorts". Only"all".youtube.search_shorts:client.youtube.searchShorts({ query })/client.youtube.search_shorts(query=...), cursor-paginated, $0.002 per request.tiktok.video:urlis now optional becauseidwas added; send one. Existingurlcallers are unaffected.company_enrichment.crustdata_v3nameandyoutube.channel_shortsshorts[].titleare now optional.tiktok.video_transcript_fullwordconfidencemay be negative on unaligned audio; read the sign before treating it as a probability.Also:
threads.searchgains optionalstartDate/endDate, and eleven SKUs reprice, most of them down (maps.reviews$0.0441 -> $0.0035,yelp.search$0.0605 -> $0.0035,perplexity.search$0.0111 -> $0.0036).Version
0.36.0 -> 0.37.0 (minor). The precedent for an accepted narrowing is #29, which released as v0.34.0. Applied in lockstep to
packages/typescript/package.json,packages/python/pyproject.toml, andpackages/python/src/getanyapi/__init__.pyviaversion:apply, exactly asregen.ymldoes.Bumping here rather than leaving it to the next regen (as #29 did) matters: with the refresh committed, the next regen classifies
noneand no-ops, so an unbumped tree would never publish.Gate
Releasing
Not tagged:
AGENTS.mdforbids tagging an unmerged commit. After merge, pushv0.37.0on the merge commit (or dispatchrelease.ymlwithtag=v0.37.0) to publish to npm and PyPI.🤖 Generated with Claude Code