Skip to content

Catalog refresh v0.38.0: Nextdoor arrives, four bulk-lane flags and five SKUs leave - #34

Merged
kev1n merged 1 commit into
mainfrom
catalog-refresh-v0.38.0
Sep 10, 2026
Merged

Catalog refresh v0.38.0: Nextdoor arrives, four bulk-lane flags and five SKUs leave#34
kev1n merged 1 commit into
mainfrom
catalog-refresh-v0.38.0

Conversation

@kev1n

@kev1n kev1n commented Sep 10, 2026

Copy link
Copy Markdown
Member

Regenerated against the live gateway exactly as regen.yml does (fetch then pnpm generate), then reviewed. regen.yml has classified blocked and failed on every run since 2026-09-07T01:26Z, so npm and PyPI have been serving a stale catalog at v0.37.2 while five gateway PRs shipped. This is the human decision the fail-closed gate holds out for.

The refresh is taken from prod as it stands now: 366 run paths, 366 catalog entries, matching https://api.getanyapi.com/openapi.json.

Every removal traces to a deliberate merged gateway PR

removal SKU upstream
input.requireCursor, input.requireSinglePage removed instagram.followers, instagram.following anyapi#1086 - the per-result Apify bulk lanes that those flags selected could bill 22,000x the published price and were deleted
input.requireSinglePage removed twitter.followers, twitter.following anyapi#1086 - same lane deletion
input.limit removed instagram.followers, instagram.following anyapi#1093 - neither remaining lane forwards it, and both are flat-priced, so it sized nothing; limit: 50 and limit: 1000 measured the same 43 items at the same $0.0015
input.fixedPriceRange, input.hourlyRateRange removed upwork.jobs anyapi#1059 - lane swap to a source a third the price that does not expose those filters
SKU removed pandaexpress.locations, pandaexpress.menu, pandaexpress.nutrition anyapi#1066 - shelf retired
SKU removed person_enrichment.aviato anyapi#1089 - Deepline resells Aviato on its own subscription, which is below Aviato's minimum; 11 prod calls in 90 days, none since 2026-08-24

Nothing here reads as an accident, so the batch is accepted rather than the classifier weakened: generator/src/classify.ts is untouched.

What a customer has to change

  • instagram.followers / instagram.following: limit, requireCursor and requireSinglePage are gone. Walk the results with the cursor iterator (client.instagram.iterFollowers(...) / iter_followers(...)); a page is a page and the price is flat either way.
  • twitter.followers / twitter.following: requireSinglePage is gone. Same iterator answer.
  • upwork.jobs: fixedPriceRange and hourlyRateRange are gone. Filter client-side on the new items[].hourlyRateMin / items[].hourlyRateMax. The SKU also drops from $0.0908 to $0.0286.
  • pandaexpress.* and person_enrichment.aviato no longer exist. They already 404 in production; the SDKs stop offering the methods.

What a customer gains

  • New platform nextdoor with nextdoor.business and nextdoor.search.
  • Five TikHub-backed Instagram SKUs: location_posts, post_likers, search_locations, similar_profiles, user_reposts.
  • chatgpt.search gains four optional inputs (requireAds, requireEntities, requirePlaces, requireShoppingCards), four matching outputs, and citations[].answerPosition (anyapi#1077).
  • upwork.jobs gains items[].hourlyRateMin / items[].hourlyRateMax.
  • 149 SKUs reprice, 111 of them down - upwork.jobs $0.0908 -> $0.0286, four youtube.* SKUs $0.002 -> $0.0012. The 38 rises are mostly sub-cent roundings; the largest is tiktok.profile $0.00045 -> $0.0012. Every one of these is already the live price; only the SDK docstrings were stale.

One test fixed, and why it is not a weakened guard

generator/test/ir.test.ts failed on the fresh catalog: it asserts the serialized IR contains no credit anywhere, and anyapi#1097 added the description "Accounts credited as coauthors of the post" to two Instagram SKUs. That is ordinary English about attribution, not internal accounting.

The invariant's owner is the gateway, and it states the rule as a key check - collectViolations in server/internal/test/contractjson/public_json.go:41 walks keys, never values. The test's own name says "has no credit key". It now checks keys, matching both. The em/en dash half of the assertion is unchanged.

Gate

pnpm generate -- fetch              366 run paths, 366 catalog entries (live prod)
pnpm generate                       clean, 78 TS files, 76 Python files
pnpm run generate:check             No drift
pnpm check                          exit 0
  dash guard                        pass
  release:test                      27 pass
  @anyapi/generator                 160 pass
  @getanyapi/sdk                    475 pass, tsup build, consumer-typecheck OK
packages/python                     pyright 0 errors, mypy 86 files clean, pytest 502 pass
scripts/live-discovery-ts.mjs       PASS 366 APIs
scripts/live-discovery-python.py    PASS 366 APIs

Input-degradation guard (the failure mode a byte-drift check structurally cannot see): Data = unknown stays at 0, typed interfaces 1184 -> 1195, iterator surfaces 55 -> 57.

Counting interfaces is necessary but not sufficient, so two real production payloads were validated through the regenerated pydantic models on throwaway /agent/signup trial keys, not a wallet:

  • nextdoor.search (new SKU, new platform) - 3 items, NextdoorSearchItem, $0.01408
  • upwork.jobs (removed inputs + new outputs) - 10 items, UpworkJobsItem, hourly_rate_min / hourly_rate_max both present, $0.0121

Releasing

Not tagged: AGENTS.md forbids tagging an unmerged commit. After merge, push v0.38.0 on the merge commit to publish to npm and PyPI.

🤖 Generated with Claude Code

Regenerated against the live gateway (366 run paths, 366 catalog entries).
regen.yml has classified blocked and failed on every dispatch since
2026-09-07T01:26Z, so npm and PyPI have been serving a stale catalog at
v0.37.2 while five gateway PRs shipped.

All 14 removals trace to deliberate merged gateway PRs:

  anyapi#1086  instagram/twitter follow-graph requireCursor, requireSinglePage
  anyapi#1093  instagram.followers/following input.limit
  anyapi#1059  upwork.jobs fixedPriceRange, hourlyRateRange
  anyapi#1066  pandaexpress.locations, .menu, .nutrition
  anyapi#1089  person_enrichment.aviato

Adds the nextdoor platform (business, search), five TikHub-backed Instagram
SKUs, the chatgpt.search commercial surface, and upwork.jobs
items[].hourlyRateMin/Max. 149 SKUs reprice, 111 of them down.

Also fixes generator/test/ir.test.ts, which failed on the fresh catalog
because it scanned the whole serialized IR for the substring "credit" and
anyapi#1097 added the description "Accounts credited as coauthors of the
post". The invariant is about internal accounting KEYS - that is how the
gateway states it in collectViolations
(server/internal/test/contractjson/public_json.go:41) and what this test's
own name says - so it now walks keys. The em/en dash half is unchanged.
@kev1n
kev1n merged commit c2e4ba4 into main Sep 10, 2026
4 checks passed
@kev1n
kev1n deleted the catalog-refresh-v0.38.0 branch September 10, 2026 02:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant