@crawlora-org/sdk 1.7.0-sdk.1 → 1.8.0-sdk.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -464,6 +464,138 @@
464
464
  },
465
465
  "type": "object"
466
466
  },
467
+ "antibot.Band": {
468
+ "enum": [
469
+ "easy",
470
+ "medium",
471
+ "hard",
472
+ "very_hard",
473
+ "blocked",
474
+ "unknown"
475
+ ],
476
+ "type": "string",
477
+ "x-enum-varnames": [
478
+ "BandEasy",
479
+ "BandMedium",
480
+ "BandHard",
481
+ "BandVeryHard",
482
+ "BandBlocked",
483
+ "BandUnknown"
484
+ ]
485
+ },
486
+ "antibot.Protection": {
487
+ "properties": {
488
+ "confidence": {
489
+ "description": "low | medium | high",
490
+ "type": "string"
491
+ },
492
+ "evidence": {
493
+ "items": {
494
+ "type": "string"
495
+ },
496
+ "type": "array"
497
+ },
498
+ "kind": {
499
+ "description": "waf | bot_management | captcha | challenge | access_control | rate_limit",
500
+ "type": "string"
501
+ },
502
+ "vendor": {
503
+ "type": "string"
504
+ }
505
+ },
506
+ "type": "object"
507
+ },
508
+ "antibot.Signals": {
509
+ "properties": {
510
+ "attempts_passed": {
511
+ "type": "integer"
512
+ },
513
+ "attempts_run": {
514
+ "type": "integer"
515
+ },
516
+ "attempts_skipped": {
517
+ "type": "integer"
518
+ },
519
+ "block_markers": {
520
+ "items": {
521
+ "type": "string"
522
+ },
523
+ "type": "array"
524
+ },
525
+ "blocked_status": {
526
+ "type": "boolean"
527
+ },
528
+ "captcha_detected": {
529
+ "type": "boolean"
530
+ },
531
+ "challenge_detected": {
532
+ "type": "boolean"
533
+ },
534
+ "js_render_likely": {
535
+ "type": "boolean"
536
+ },
537
+ "rate_limited": {
538
+ "type": "boolean"
539
+ }
540
+ },
541
+ "type": "object"
542
+ },
543
+ "antibot.Verdict": {
544
+ "properties": {
545
+ "coverage": {
546
+ "description": "Coverage is `full` when every transport tier ran, or `partial` when some\nwere skipped (e.g. browser sidecars unconfigured in this environment), in\nwhich case a \"blocked\" verdict may understate what a browser could do.",
547
+ "type": "string"
548
+ },
549
+ "difficulty_band": {
550
+ "$ref": "#/definitions/antibot.Band"
551
+ },
552
+ "difficulty_score": {
553
+ "description": "0 (trivial) .. 10 (blocked)",
554
+ "type": "integer"
555
+ },
556
+ "easiest_working_transport": {
557
+ "type": "string"
558
+ },
559
+ "gated_layers": {
560
+ "description": "GatedLayers names the anti-bot detection layers that block a plain client,\nderived empirically from which probe tiers were rejected: `tls` (a plain\nHTTP client's TLS/header fingerprint was rejected, but browser-impersonation\nor a browser got through), `js` (HTTP transports failed; JavaScript\nrendering / a real browser was required), `behavior` (a plain headless\nbrowser was also rejected; an anti-detect/stealth browser was needed).",
561
+ "items": {
562
+ "type": "string"
563
+ },
564
+ "type": "array"
565
+ },
566
+ "notes": {
567
+ "items": {
568
+ "type": "string"
569
+ },
570
+ "type": "array"
571
+ },
572
+ "protections": {
573
+ "items": {
574
+ "$ref": "#/definitions/antibot.Protection"
575
+ },
576
+ "type": "array"
577
+ },
578
+ "recommended_approach": {
579
+ "type": "string"
580
+ },
581
+ "recommended_profile": {
582
+ "type": "string"
583
+ },
584
+ "scrapeable": {
585
+ "type": "boolean"
586
+ },
587
+ "signals": {
588
+ "$ref": "#/definitions/antibot.Signals"
589
+ },
590
+ "summary": {
591
+ "type": "string"
592
+ },
593
+ "url": {
594
+ "type": "string"
595
+ }
596
+ },
597
+ "type": "object"
598
+ },
467
599
  "api.componentStatus": {
468
600
  "properties": {
469
601
  "error": {
@@ -8076,6 +8208,167 @@
8076
8208
  },
8077
8209
  "type": "object"
8078
8210
  },
8211
+ "contact.ContactRequest": {
8212
+ "properties": {
8213
+ "independents_only": {
8214
+ "description": "IndependentsOnly, when true, returns just the classification (no crawl) for\nany non-independent site (chain/social/builder/directory) — a cheap filter.",
8215
+ "example": false,
8216
+ "type": "boolean"
8217
+ },
8218
+ "max_pages": {
8219
+ "example": 5,
8220
+ "type": "integer"
8221
+ },
8222
+ "url": {
8223
+ "example": "https://example.com",
8224
+ "type": "string"
8225
+ },
8226
+ "verify": {
8227
+ "example": true,
8228
+ "type": "boolean"
8229
+ }
8230
+ },
8231
+ "required": [
8232
+ "url"
8233
+ ],
8234
+ "type": "object"
8235
+ },
8236
+ "contact.ContactResult": {
8237
+ "properties": {
8238
+ "crawl_status": {
8239
+ "description": "CrawlStatus explains an empty result: \"ok\" (read fine, nothing public to\nfind), \"blocked\" (an anti-bot wall stopped the read), or \"unreachable\" (the\nhomepage couldn't be fetched).",
8240
+ "enum": [
8241
+ "ok",
8242
+ "blocked",
8243
+ "unreachable"
8244
+ ],
8245
+ "example": "ok",
8246
+ "type": "string"
8247
+ },
8248
+ "crawled_pages": {
8249
+ "items": {
8250
+ "type": "string"
8251
+ },
8252
+ "type": "array"
8253
+ },
8254
+ "domain": {
8255
+ "example": "example.com",
8256
+ "type": "string"
8257
+ },
8258
+ "domain_type": {
8259
+ "enum": [
8260
+ "independent",
8261
+ "chain",
8262
+ "social",
8263
+ "builder",
8264
+ "directory"
8265
+ ],
8266
+ "example": "independent",
8267
+ "type": "string"
8268
+ },
8269
+ "emails": {
8270
+ "items": {
8271
+ "$ref": "#/definitions/contact.EmailContact"
8272
+ },
8273
+ "type": "array"
8274
+ },
8275
+ "phones": {
8276
+ "items": {
8277
+ "$ref": "#/definitions/contact.PhoneContact"
8278
+ },
8279
+ "type": "array"
8280
+ },
8281
+ "socials": {
8282
+ "items": {
8283
+ "$ref": "#/definitions/contact.SocialProfile"
8284
+ },
8285
+ "type": "array"
8286
+ },
8287
+ "website": {
8288
+ "example": "https://example.com",
8289
+ "type": "string"
8290
+ }
8291
+ },
8292
+ "type": "object"
8293
+ },
8294
+ "contact.EmailContact": {
8295
+ "properties": {
8296
+ "address": {
8297
+ "example": "hello@example.com",
8298
+ "type": "string"
8299
+ },
8300
+ "source_page": {
8301
+ "example": "https://example.com/contact",
8302
+ "type": "string"
8303
+ },
8304
+ "status": {
8305
+ "enum": [
8306
+ "verified",
8307
+ "risky",
8308
+ "unverified",
8309
+ "invalid"
8310
+ ],
8311
+ "example": "unverified",
8312
+ "type": "string"
8313
+ },
8314
+ "type": {
8315
+ "enum": [
8316
+ "generic",
8317
+ "role",
8318
+ "personal"
8319
+ ],
8320
+ "example": "generic",
8321
+ "type": "string"
8322
+ }
8323
+ },
8324
+ "type": "object"
8325
+ },
8326
+ "contact.PhoneContact": {
8327
+ "properties": {
8328
+ "number": {
8329
+ "example": "+1 415-555-2671",
8330
+ "type": "string"
8331
+ },
8332
+ "source_page": {
8333
+ "example": "https://example.com/contact",
8334
+ "type": "string"
8335
+ }
8336
+ },
8337
+ "type": "object"
8338
+ },
8339
+ "contact.SocialProfile": {
8340
+ "properties": {
8341
+ "handle": {
8342
+ "example": "example",
8343
+ "type": "string"
8344
+ },
8345
+ "network": {
8346
+ "example": "linkedin",
8347
+ "type": "string"
8348
+ },
8349
+ "url": {
8350
+ "example": "https://www.linkedin.com/company/example",
8351
+ "type": "string"
8352
+ }
8353
+ },
8354
+ "type": "object"
8355
+ },
8356
+ "contact.contactResponseDoc": {
8357
+ "properties": {
8358
+ "code": {
8359
+ "example": 200,
8360
+ "type": "integer"
8361
+ },
8362
+ "data": {
8363
+ "$ref": "#/definitions/contact.ContactResult"
8364
+ },
8365
+ "msg": {
8366
+ "example": "OK",
8367
+ "type": "string"
8368
+ }
8369
+ },
8370
+ "type": "object"
8371
+ },
8079
8372
  "datasets.DatasetInfo": {
8080
8373
  "properties": {
8081
8374
  "capabilities": {
@@ -8214,6 +8507,39 @@
8214
8507
  },
8215
8508
  "type": "object"
8216
8509
  },
8510
+ "diagnostics.AntibotCheckRequest": {
8511
+ "properties": {
8512
+ "fast": {
8513
+ "description": "Fast (default true) escalates cheapest-transport-first and returns at the\nfirst tier that retrieves the page, so an unprotected page never spins up a\nbrowser. Set false for an exhaustive multi-run sweep across every backend.",
8514
+ "type": "boolean"
8515
+ },
8516
+ "url": {
8517
+ "description": "URL is the absolute http/https target to assess.",
8518
+ "example": "https://www.crunchbase.com/organization/snowflake-computing",
8519
+ "type": "string"
8520
+ }
8521
+ },
8522
+ "required": [
8523
+ "url"
8524
+ ],
8525
+ "type": "object"
8526
+ },
8527
+ "diagnostics.antibotCheckResponseDoc": {
8528
+ "properties": {
8529
+ "code": {
8530
+ "example": 200,
8531
+ "type": "integer"
8532
+ },
8533
+ "data": {
8534
+ "$ref": "#/definitions/antibot.Verdict"
8535
+ },
8536
+ "msg": {
8537
+ "example": "OK",
8538
+ "type": "string"
8539
+ }
8540
+ },
8541
+ "type": "object"
8542
+ },
8217
8543
  "ebay.Item": {
8218
8544
  "properties": {
8219
8545
  "availability": {
@@ -24141,6 +24467,318 @@
24141
24467
  },
24142
24468
  "type": "object"
24143
24469
  },
24470
+ "redfin.EstimateResponse": {
24471
+ "properties": {
24472
+ "address": {
24473
+ "type": "string"
24474
+ },
24475
+ "baths": {
24476
+ "type": "number"
24477
+ },
24478
+ "beds": {
24479
+ "type": "number"
24480
+ },
24481
+ "city_time_series": {
24482
+ "items": {
24483
+ "type": "number"
24484
+ },
24485
+ "type": "array"
24486
+ },
24487
+ "county_time_series": {
24488
+ "items": {
24489
+ "type": "number"
24490
+ },
24491
+ "type": "array"
24492
+ },
24493
+ "estimate": {
24494
+ "type": "number"
24495
+ },
24496
+ "estimate_text": {
24497
+ "type": "string"
24498
+ },
24499
+ "latitude": {
24500
+ "type": "number"
24501
+ },
24502
+ "listing_price": {
24503
+ "type": "number"
24504
+ },
24505
+ "longitude": {
24506
+ "type": "number"
24507
+ },
24508
+ "postal_code_time_series": {
24509
+ "items": {
24510
+ "type": "number"
24511
+ },
24512
+ "type": "array"
24513
+ },
24514
+ "property_id": {
24515
+ "example": "1715020",
24516
+ "type": "string"
24517
+ },
24518
+ "property_time_series": {
24519
+ "items": {
24520
+ "type": "number"
24521
+ },
24522
+ "type": "array"
24523
+ },
24524
+ "sqft": {
24525
+ "type": "number"
24526
+ },
24527
+ "updated_at": {
24528
+ "type": "integer"
24529
+ },
24530
+ "year_built": {
24531
+ "type": "integer"
24532
+ }
24533
+ },
24534
+ "type": "object"
24535
+ },
24536
+ "redfin.PropertyItem": {
24537
+ "properties": {
24538
+ "address": {
24539
+ "type": "string"
24540
+ },
24541
+ "baths": {
24542
+ "type": "number"
24543
+ },
24544
+ "beds": {
24545
+ "type": "number"
24546
+ },
24547
+ "city": {
24548
+ "type": "string"
24549
+ },
24550
+ "days_on_market": {
24551
+ "type": "integer"
24552
+ },
24553
+ "hoa_monthly": {
24554
+ "type": "number"
24555
+ },
24556
+ "image": {
24557
+ "type": "string"
24558
+ },
24559
+ "latitude": {
24560
+ "type": "number"
24561
+ },
24562
+ "listing_id": {
24563
+ "type": "string"
24564
+ },
24565
+ "longitude": {
24566
+ "type": "number"
24567
+ },
24568
+ "lot_size": {
24569
+ "type": "number"
24570
+ },
24571
+ "mls_number": {
24572
+ "type": "string"
24573
+ },
24574
+ "price": {
24575
+ "type": "number"
24576
+ },
24577
+ "price_per_sqft": {
24578
+ "type": "number"
24579
+ },
24580
+ "property_id": {
24581
+ "example": "1715020",
24582
+ "type": "string"
24583
+ },
24584
+ "property_type": {
24585
+ "type": "string"
24586
+ },
24587
+ "sqft": {
24588
+ "type": "number"
24589
+ },
24590
+ "state": {
24591
+ "type": "string"
24592
+ },
24593
+ "status": {
24594
+ "type": "string"
24595
+ },
24596
+ "url": {
24597
+ "type": "string"
24598
+ },
24599
+ "year_built": {
24600
+ "type": "integer"
24601
+ },
24602
+ "zip": {
24603
+ "type": "string"
24604
+ }
24605
+ },
24606
+ "type": "object"
24607
+ },
24608
+ "redfin.PropertyResponse": {
24609
+ "properties": {
24610
+ "address": {
24611
+ "type": "string"
24612
+ },
24613
+ "baths": {
24614
+ "type": "number"
24615
+ },
24616
+ "beds": {
24617
+ "type": "number"
24618
+ },
24619
+ "city": {
24620
+ "type": "string"
24621
+ },
24622
+ "days_on_market": {
24623
+ "type": "integer"
24624
+ },
24625
+ "description": {
24626
+ "type": "string"
24627
+ },
24628
+ "facts": {
24629
+ "items": {
24630
+ "type": "string"
24631
+ },
24632
+ "type": "array"
24633
+ },
24634
+ "hoa_monthly": {
24635
+ "type": "number"
24636
+ },
24637
+ "image": {
24638
+ "type": "string"
24639
+ },
24640
+ "latitude": {
24641
+ "type": "number"
24642
+ },
24643
+ "listing_id": {
24644
+ "type": "string"
24645
+ },
24646
+ "longitude": {
24647
+ "type": "number"
24648
+ },
24649
+ "lot_size": {
24650
+ "type": "number"
24651
+ },
24652
+ "mls_number": {
24653
+ "type": "string"
24654
+ },
24655
+ "price": {
24656
+ "type": "number"
24657
+ },
24658
+ "price_per_sqft": {
24659
+ "type": "number"
24660
+ },
24661
+ "property_id": {
24662
+ "example": "1715020",
24663
+ "type": "string"
24664
+ },
24665
+ "property_type": {
24666
+ "type": "string"
24667
+ },
24668
+ "sqft": {
24669
+ "type": "number"
24670
+ },
24671
+ "state": {
24672
+ "type": "string"
24673
+ },
24674
+ "status": {
24675
+ "type": "string"
24676
+ },
24677
+ "url": {
24678
+ "type": "string"
24679
+ },
24680
+ "year_built": {
24681
+ "type": "integer"
24682
+ },
24683
+ "zip": {
24684
+ "type": "string"
24685
+ }
24686
+ },
24687
+ "type": "object"
24688
+ },
24689
+ "redfin.RegionTrendsResponse": {
24690
+ "properties": {
24691
+ "avg_days_on_market": {
24692
+ "type": "string"
24693
+ },
24694
+ "avg_down_payment": {
24695
+ "type": "string"
24696
+ },
24697
+ "avg_num_offers": {
24698
+ "type": "string"
24699
+ },
24700
+ "median_list_per_sqft": {
24701
+ "type": "string"
24702
+ },
24703
+ "median_list_price": {
24704
+ "example": "$1.29M",
24705
+ "type": "string"
24706
+ },
24707
+ "median_sale_per_list": {
24708
+ "type": "string"
24709
+ },
24710
+ "median_sale_per_sqft": {
24711
+ "type": "string"
24712
+ },
24713
+ "median_sale_price": {
24714
+ "example": "$1.76M",
24715
+ "type": "string"
24716
+ },
24717
+ "num_homes_on_market": {
24718
+ "type": "string"
24719
+ },
24720
+ "num_homes_sold": {
24721
+ "type": "string"
24722
+ },
24723
+ "region_id": {
24724
+ "example": 17151,
24725
+ "type": "integer"
24726
+ },
24727
+ "region_type": {
24728
+ "example": 6,
24729
+ "type": "integer"
24730
+ },
24731
+ "yoy_sale_per_sqft": {
24732
+ "type": "string"
24733
+ },
24734
+ "yoy_sale_price": {
24735
+ "type": "string"
24736
+ }
24737
+ },
24738
+ "type": "object"
24739
+ },
24740
+ "redfin.SearchResponse": {
24741
+ "properties": {
24742
+ "location": {
24743
+ "example": "San Francisco, CA",
24744
+ "type": "string"
24745
+ },
24746
+ "page": {
24747
+ "example": 1,
24748
+ "type": "integer"
24749
+ },
24750
+ "region_id": {
24751
+ "example": 17151,
24752
+ "type": "integer"
24753
+ },
24754
+ "region_type": {
24755
+ "example": 6,
24756
+ "type": "integer"
24757
+ },
24758
+ "results": {
24759
+ "items": {
24760
+ "$ref": "#/definitions/redfin.PropertyItem"
24761
+ },
24762
+ "type": "array"
24763
+ }
24764
+ },
24765
+ "type": "object"
24766
+ },
24767
+ "redfin.SimilarResponse": {
24768
+ "properties": {
24769
+ "property_id": {
24770
+ "example": "1715020",
24771
+ "type": "string"
24772
+ },
24773
+ "results": {
24774
+ "items": {
24775
+ "$ref": "#/definitions/redfin.PropertyItem"
24776
+ },
24777
+ "type": "array"
24778
+ }
24779
+ },
24780
+ "type": "object"
24781
+ },
24144
24782
  "referrals.referralAttributionDoc": {
24145
24783
  "properties": {
24146
24784
  "campaign": {
@@ -28673,6 +29311,11 @@
28673
29311
  "operationName": {
28674
29312
  "example": "countryHubContent",
28675
29313
  "type": "string"
29314
+ },
29315
+ "partialErrors": {
29316
+ "description": "PartialErrors counts upstream GraphQL field errors tolerated alongside\nusable items. Zero on a fully clean response.",
29317
+ "example": 1,
29318
+ "type": "integer"
28676
29319
  }
28677
29320
  },
28678
29321
  "type": "object"
@@ -28801,6 +29444,11 @@
28801
29444
  "example": "countryHubsPage",
28802
29445
  "type": "string"
28803
29446
  },
29447
+ "partialErrors": {
29448
+ "description": "PartialErrors counts upstream GraphQL field errors that were tolerated\nbecause usable shelves were still returned (e.g. one broken shelf among\nseveral). Zero on a fully clean response.",
29449
+ "example": 1,
29450
+ "type": "integer"
29451
+ },
28804
29452
  "sectionCount": {
28805
29453
  "example": 5,
28806
29454
  "type": "integer"
@@ -35472,6 +36120,193 @@
35472
36120
  },
35473
36121
  "type": "object"
35474
36122
  },
36123
+ "web.ScrapeInfo": {
36124
+ "properties": {
36125
+ "backend": {
36126
+ "description": "headless backend that rendered, when method=browser",
36127
+ "type": "string"
36128
+ },
36129
+ "cache_state": {
36130
+ "description": "\"hit\" | \"miss\" — whether this response came from the cache",
36131
+ "type": "string"
36132
+ },
36133
+ "cached_at": {
36134
+ "description": "RFC3339 time the served copy was fetched (cache hits only)",
36135
+ "type": "string"
36136
+ },
36137
+ "escalated": {
36138
+ "description": "true when the fetch escalated from HTTP to a headless browser",
36139
+ "type": "boolean"
36140
+ },
36141
+ "method": {
36142
+ "description": "\"http\" | \"browser\"",
36143
+ "type": "string"
36144
+ }
36145
+ },
36146
+ "type": "object"
36147
+ },
36148
+ "web.ScrapeLink": {
36149
+ "properties": {
36150
+ "href": {
36151
+ "type": "string"
36152
+ },
36153
+ "rel": {
36154
+ "type": "string"
36155
+ },
36156
+ "text": {
36157
+ "type": "string"
36158
+ }
36159
+ },
36160
+ "type": "object"
36161
+ },
36162
+ "web.ScrapeMetadata": {
36163
+ "properties": {
36164
+ "author": {
36165
+ "type": "string"
36166
+ },
36167
+ "canonical_url": {
36168
+ "type": "string"
36169
+ },
36170
+ "content_type": {
36171
+ "type": "string"
36172
+ },
36173
+ "description": {
36174
+ "type": "string"
36175
+ },
36176
+ "final_url": {
36177
+ "type": "string"
36178
+ },
36179
+ "image": {
36180
+ "type": "string"
36181
+ },
36182
+ "language": {
36183
+ "type": "string"
36184
+ },
36185
+ "modified_at": {
36186
+ "type": "string"
36187
+ },
36188
+ "published_at": {
36189
+ "type": "string"
36190
+ },
36191
+ "section": {
36192
+ "type": "string"
36193
+ },
36194
+ "site_name": {
36195
+ "type": "string"
36196
+ },
36197
+ "source_url": {
36198
+ "type": "string"
36199
+ },
36200
+ "status_code": {
36201
+ "type": "integer"
36202
+ },
36203
+ "title": {
36204
+ "type": "string"
36205
+ }
36206
+ },
36207
+ "type": "object"
36208
+ },
36209
+ "web.ScrapeOption": {
36210
+ "properties": {
36211
+ "backend": {
36212
+ "example": "",
36213
+ "type": "string"
36214
+ },
36215
+ "formats": {
36216
+ "example": [
36217
+ "markdown"
36218
+ ],
36219
+ "items": {
36220
+ "type": "string"
36221
+ },
36222
+ "type": "array"
36223
+ },
36224
+ "max_age": {
36225
+ "example": 604800000,
36226
+ "type": "integer"
36227
+ },
36228
+ "only_main_content": {
36229
+ "type": "boolean"
36230
+ },
36231
+ "proxy": {
36232
+ "example": "",
36233
+ "type": "string"
36234
+ },
36235
+ "render": {
36236
+ "enum": [
36237
+ "auto",
36238
+ "http",
36239
+ "browser",
36240
+ "unblocker"
36241
+ ],
36242
+ "example": "auto",
36243
+ "type": "string"
36244
+ },
36245
+ "store_in_cache": {
36246
+ "type": "boolean"
36247
+ },
36248
+ "url": {
36249
+ "example": "https://example.com",
36250
+ "type": "string"
36251
+ },
36252
+ "wait_for": {
36253
+ "example": 0,
36254
+ "type": "integer"
36255
+ }
36256
+ },
36257
+ "required": [
36258
+ "url"
36259
+ ],
36260
+ "type": "object"
36261
+ },
36262
+ "web.ScrapeResult": {
36263
+ "properties": {
36264
+ "html": {
36265
+ "type": "string"
36266
+ },
36267
+ "link_details": {
36268
+ "items": {
36269
+ "$ref": "#/definitions/web.ScrapeLink"
36270
+ },
36271
+ "type": "array"
36272
+ },
36273
+ "links": {
36274
+ "items": {
36275
+ "type": "string"
36276
+ },
36277
+ "type": "array"
36278
+ },
36279
+ "markdown": {
36280
+ "type": "string"
36281
+ },
36282
+ "metadata": {
36283
+ "$ref": "#/definitions/web.ScrapeMetadata"
36284
+ },
36285
+ "raw_html": {
36286
+ "type": "string"
36287
+ },
36288
+ "scrape": {
36289
+ "$ref": "#/definitions/web.ScrapeInfo"
36290
+ }
36291
+ },
36292
+ "type": "object"
36293
+ },
36294
+ "web.scrapeResponseDoc": {
36295
+ "properties": {
36296
+ "code": {
36297
+ "example": 200,
36298
+ "type": "integer"
36299
+ },
36300
+ "data": {
36301
+ "$ref": "#/definitions/web.ScrapeResult"
36302
+ },
36303
+ "msg": {
36304
+ "example": "OK",
36305
+ "type": "string"
36306
+ }
36307
+ },
36308
+ "type": "object"
36309
+ },
35475
36310
  "yahoofinance.ActionEvents": {
35476
36311
  "properties": {
35477
36312
  "capital_gains": {
@@ -45088,19 +45923,351 @@
45088
45923
  "ApiKeyAuth": []
45089
45924
  }
45090
45925
  ],
45091
- "summary": "CoinGecko markets",
45926
+ "summary": "CoinGecko markets",
45927
+ "tags": [
45928
+ "CoinGecko"
45929
+ ]
45930
+ }
45931
+ },
45932
+ "/coingecko/new-coins": {
45933
+ "get": {
45934
+ "consumes": [
45935
+ "application/json"
45936
+ ],
45937
+ "description": "Returns normalized rows from CoinGecko's public new cryptocurrencies table. This endpoint supports the documented `vs_currency` enum.",
45938
+ "operationId": "coingecko-new-coins",
45939
+ "parameters": [
45940
+ {
45941
+ "description": "Page number, default 1",
45942
+ "in": "query",
45943
+ "name": "page",
45944
+ "type": "integer"
45945
+ },
45946
+ {
45947
+ "description": "Rows to return, default 100, max 100",
45948
+ "in": "query",
45949
+ "name": "limit",
45950
+ "type": "integer"
45951
+ },
45952
+ {
45953
+ "description": "Quote currency",
45954
+ "enum": [
45955
+ "btc",
45956
+ "eth",
45957
+ "ltc",
45958
+ "bch",
45959
+ "bnb",
45960
+ "eos",
45961
+ "xrp",
45962
+ "xlm",
45963
+ "link",
45964
+ "dot",
45965
+ "yfi",
45966
+ "sol",
45967
+ "usd",
45968
+ "aed",
45969
+ "ars",
45970
+ "aud",
45971
+ "bdt",
45972
+ "bhd",
45973
+ "bmd",
45974
+ "brl",
45975
+ "cad",
45976
+ "chf",
45977
+ "clp",
45978
+ "cny",
45979
+ "czk",
45980
+ "dkk",
45981
+ "eur",
45982
+ "gbp",
45983
+ "gel",
45984
+ "hkd",
45985
+ "huf",
45986
+ "idr",
45987
+ "ils",
45988
+ "inr",
45989
+ "jpy",
45990
+ "krw",
45991
+ "kwd",
45992
+ "lkr",
45993
+ "mmk",
45994
+ "mxn",
45995
+ "myr",
45996
+ "ngn",
45997
+ "nok",
45998
+ "nzd",
45999
+ "php",
46000
+ "pkr",
46001
+ "pln",
46002
+ "rub",
46003
+ "sar",
46004
+ "sek",
46005
+ "sgd",
46006
+ "thb",
46007
+ "try",
46008
+ "twd",
46009
+ "uah",
46010
+ "vef",
46011
+ "vnd",
46012
+ "zar",
46013
+ "xdr",
46014
+ "xag",
46015
+ "xau",
46016
+ "bits",
46017
+ "sats"
46018
+ ],
46019
+ "in": "query",
46020
+ "name": "vs_currency",
46021
+ "type": "string"
46022
+ }
46023
+ ],
46024
+ "produces": [
46025
+ "application/json"
46026
+ ],
46027
+ "responses": {
46028
+ "200": {
46029
+ "description": "OK",
46030
+ "schema": {
46031
+ "$ref": "#/definitions/coingecko.newCoinsResponseDoc"
46032
+ }
46033
+ },
46034
+ "400": {
46035
+ "description": "Bad Request",
46036
+ "schema": {
46037
+ "$ref": "#/definitions/app.Response"
46038
+ }
46039
+ },
46040
+ "500": {
46041
+ "description": "Internal Server Error",
46042
+ "schema": {
46043
+ "$ref": "#/definitions/app.Response"
46044
+ }
46045
+ },
46046
+ "503": {
46047
+ "description": "Service Unavailable",
46048
+ "schema": {
46049
+ "$ref": "#/definitions/app.Response"
46050
+ }
46051
+ }
46052
+ },
46053
+ "security": [
46054
+ {
46055
+ "ApiKeyAuth": []
46056
+ }
46057
+ ],
46058
+ "summary": "CoinGecko new cryptocurrencies",
46059
+ "tags": [
46060
+ "CoinGecko"
46061
+ ]
46062
+ }
46063
+ },
46064
+ "/coingecko/news": {
46065
+ "get": {
46066
+ "consumes": [
46067
+ "application/json"
46068
+ ],
46069
+ "description": "Returns normalized article cards from CoinGecko's public news page.",
46070
+ "operationId": "coingecko-news",
46071
+ "parameters": [
46072
+ {
46073
+ "description": "Rows to return, default 20, max 50",
46074
+ "in": "query",
46075
+ "name": "limit",
46076
+ "type": "integer"
46077
+ }
46078
+ ],
46079
+ "produces": [
46080
+ "application/json"
46081
+ ],
46082
+ "responses": {
46083
+ "200": {
46084
+ "description": "OK",
46085
+ "schema": {
46086
+ "$ref": "#/definitions/coingecko.newsResponseDoc"
46087
+ }
46088
+ },
46089
+ "400": {
46090
+ "description": "Bad Request",
46091
+ "schema": {
46092
+ "$ref": "#/definitions/app.Response"
46093
+ }
46094
+ },
46095
+ "500": {
46096
+ "description": "Internal Server Error",
46097
+ "schema": {
46098
+ "$ref": "#/definitions/app.Response"
46099
+ }
46100
+ },
46101
+ "503": {
46102
+ "description": "Service Unavailable",
46103
+ "schema": {
46104
+ "$ref": "#/definitions/app.Response"
46105
+ }
46106
+ }
46107
+ },
46108
+ "security": [
46109
+ {
46110
+ "ApiKeyAuth": []
46111
+ }
46112
+ ],
46113
+ "summary": "CoinGecko news cards",
46114
+ "tags": [
46115
+ "CoinGecko"
46116
+ ]
46117
+ }
46118
+ },
46119
+ "/coingecko/nft/category/{slug}": {
46120
+ "get": {
46121
+ "consumes": [
46122
+ "application/json"
46123
+ ],
46124
+ "description": "Returns normalized NFT collection rows from a CoinGecko public NFT category page. This endpoint supports the documented `vs_currency` enum.",
46125
+ "operationId": "coingecko-nft-category",
46126
+ "parameters": [
46127
+ {
46128
+ "description": "CoinGecko NFT category slug such as metaverse",
46129
+ "in": "path",
46130
+ "name": "slug",
46131
+ "required": true,
46132
+ "type": "string"
46133
+ },
46134
+ {
46135
+ "description": "Page number, default 1",
46136
+ "in": "query",
46137
+ "name": "page",
46138
+ "type": "integer"
46139
+ },
46140
+ {
46141
+ "description": "Rows to return, default 100, max 100",
46142
+ "in": "query",
46143
+ "name": "limit",
46144
+ "type": "integer"
46145
+ },
46146
+ {
46147
+ "description": "Quote currency",
46148
+ "enum": [
46149
+ "btc",
46150
+ "eth",
46151
+ "ltc",
46152
+ "bch",
46153
+ "bnb",
46154
+ "eos",
46155
+ "xrp",
46156
+ "xlm",
46157
+ "link",
46158
+ "dot",
46159
+ "yfi",
46160
+ "sol",
46161
+ "usd",
46162
+ "aed",
46163
+ "ars",
46164
+ "aud",
46165
+ "bdt",
46166
+ "bhd",
46167
+ "bmd",
46168
+ "brl",
46169
+ "cad",
46170
+ "chf",
46171
+ "clp",
46172
+ "cny",
46173
+ "czk",
46174
+ "dkk",
46175
+ "eur",
46176
+ "gbp",
46177
+ "gel",
46178
+ "hkd",
46179
+ "huf",
46180
+ "idr",
46181
+ "ils",
46182
+ "inr",
46183
+ "jpy",
46184
+ "krw",
46185
+ "kwd",
46186
+ "lkr",
46187
+ "mmk",
46188
+ "mxn",
46189
+ "myr",
46190
+ "ngn",
46191
+ "nok",
46192
+ "nzd",
46193
+ "php",
46194
+ "pkr",
46195
+ "pln",
46196
+ "rub",
46197
+ "sar",
46198
+ "sek",
46199
+ "sgd",
46200
+ "thb",
46201
+ "try",
46202
+ "twd",
46203
+ "uah",
46204
+ "vef",
46205
+ "vnd",
46206
+ "zar",
46207
+ "xdr",
46208
+ "xag",
46209
+ "xau",
46210
+ "bits",
46211
+ "sats"
46212
+ ],
46213
+ "in": "query",
46214
+ "name": "vs_currency",
46215
+ "type": "string"
46216
+ }
46217
+ ],
46218
+ "produces": [
46219
+ "application/json"
46220
+ ],
46221
+ "responses": {
46222
+ "200": {
46223
+ "description": "OK",
46224
+ "schema": {
46225
+ "$ref": "#/definitions/coingecko.nftCategoryResponseDoc"
46226
+ }
46227
+ },
46228
+ "400": {
46229
+ "description": "Bad Request",
46230
+ "schema": {
46231
+ "$ref": "#/definitions/app.Response"
46232
+ }
46233
+ },
46234
+ "404": {
46235
+ "description": "Not Found",
46236
+ "schema": {
46237
+ "$ref": "#/definitions/app.Response"
46238
+ }
46239
+ },
46240
+ "500": {
46241
+ "description": "Internal Server Error",
46242
+ "schema": {
46243
+ "$ref": "#/definitions/app.Response"
46244
+ }
46245
+ },
46246
+ "503": {
46247
+ "description": "Service Unavailable",
46248
+ "schema": {
46249
+ "$ref": "#/definitions/app.Response"
46250
+ }
46251
+ }
46252
+ },
46253
+ "security": [
46254
+ {
46255
+ "ApiKeyAuth": []
46256
+ }
46257
+ ],
46258
+ "summary": "CoinGecko NFT category",
45092
46259
  "tags": [
45093
46260
  "CoinGecko"
45094
46261
  ]
45095
46262
  }
45096
46263
  },
45097
- "/coingecko/new-coins": {
46264
+ "/coingecko/nfts": {
45098
46265
  "get": {
45099
46266
  "consumes": [
45100
46267
  "application/json"
45101
46268
  ],
45102
- "description": "Returns normalized rows from CoinGecko's public new cryptocurrencies table. This endpoint supports the documented `vs_currency` enum.",
45103
- "operationId": "coingecko-new-coins",
46269
+ "description": "Returns normalized NFT collection rows from the CoinGecko public website NFT table. This endpoint supports the documented `vs_currency` enum.",
46270
+ "operationId": "coingecko-nfts",
45104
46271
  "parameters": [
45105
46272
  {
45106
46273
  "description": "Page number, default 1",
@@ -45193,7 +46360,7 @@
45193
46360
  "200": {
45194
46361
  "description": "OK",
45195
46362
  "schema": {
45196
- "$ref": "#/definitions/coingecko.newCoinsResponseDoc"
46363
+ "$ref": "#/definitions/coingecko.nftsResponseDoc"
45197
46364
  }
45198
46365
  },
45199
46366
  "400": {
@@ -45220,22 +46387,29 @@
45220
46387
  "ApiKeyAuth": []
45221
46388
  }
45222
46389
  ],
45223
- "summary": "CoinGecko new cryptocurrencies",
46390
+ "summary": "CoinGecko NFT collections",
45224
46391
  "tags": [
45225
46392
  "CoinGecko"
45226
46393
  ]
45227
46394
  }
45228
46395
  },
45229
- "/coingecko/news": {
46396
+ "/coingecko/search": {
45230
46397
  "get": {
45231
46398
  "consumes": [
45232
46399
  "application/json"
45233
46400
  ],
45234
- "description": "Returns normalized article cards from CoinGecko's public news page.",
45235
- "operationId": "coingecko-news",
46401
+ "description": "Returns normalized CoinGecko search sections from the public website search JSON. Empty valid searches return empty arrays.",
46402
+ "operationId": "coingecko-search",
45236
46403
  "parameters": [
45237
46404
  {
45238
- "description": "Rows to return, default 20, max 50",
46405
+ "description": "Search query",
46406
+ "in": "query",
46407
+ "name": "q",
46408
+ "required": true,
46409
+ "type": "string"
46410
+ },
46411
+ {
46412
+ "description": "Rows per section to return, default 10, max 50",
45239
46413
  "in": "query",
45240
46414
  "name": "limit",
45241
46415
  "type": "integer"
@@ -45248,7 +46422,7 @@
45248
46422
  "200": {
45249
46423
  "description": "OK",
45250
46424
  "schema": {
45251
- "$ref": "#/definitions/coingecko.newsResponseDoc"
46425
+ "$ref": "#/definitions/coingecko.searchResponseDoc"
45252
46426
  }
45253
46427
  },
45254
46428
  "400": {
@@ -45275,32 +46449,100 @@
45275
46449
  "ApiKeyAuth": []
45276
46450
  }
45277
46451
  ],
45278
- "summary": "CoinGecko news cards",
46452
+ "summary": "CoinGecko discovery search",
45279
46453
  "tags": [
45280
46454
  "CoinGecko"
45281
46455
  ]
45282
46456
  }
45283
46457
  },
45284
- "/coingecko/nft/category/{slug}": {
46458
+ "/coingecko/token-unlocks": {
45285
46459
  "get": {
45286
46460
  "consumes": [
45287
46461
  "application/json"
45288
46462
  ],
45289
- "description": "Returns normalized NFT collection rows from a CoinGecko public NFT category page. This endpoint supports the documented `vs_currency` enum.",
45290
- "operationId": "coingecko-nft-category",
46463
+ "description": "Returns normalized rows from CoinGecko's public incoming token unlocks page.",
46464
+ "operationId": "coingecko-token-unlocks",
45291
46465
  "parameters": [
45292
46466
  {
45293
- "description": "CoinGecko NFT category slug such as metaverse",
45294
- "in": "path",
45295
- "name": "slug",
45296
- "required": true,
46467
+ "description": "Rows to return, default 100, max 100",
46468
+ "in": "query",
46469
+ "name": "limit",
46470
+ "type": "integer"
46471
+ }
46472
+ ],
46473
+ "produces": [
46474
+ "application/json"
46475
+ ],
46476
+ "responses": {
46477
+ "200": {
46478
+ "description": "OK",
46479
+ "schema": {
46480
+ "$ref": "#/definitions/coingecko.tokenUnlocksResponseDoc"
46481
+ }
46482
+ },
46483
+ "400": {
46484
+ "description": "Bad Request",
46485
+ "schema": {
46486
+ "$ref": "#/definitions/app.Response"
46487
+ }
46488
+ },
46489
+ "500": {
46490
+ "description": "Internal Server Error",
46491
+ "schema": {
46492
+ "$ref": "#/definitions/app.Response"
46493
+ }
46494
+ },
46495
+ "503": {
46496
+ "description": "Service Unavailable",
46497
+ "schema": {
46498
+ "$ref": "#/definitions/app.Response"
46499
+ }
46500
+ }
46501
+ },
46502
+ "security": [
46503
+ {
46504
+ "ApiKeyAuth": []
46505
+ }
46506
+ ],
46507
+ "summary": "CoinGecko incoming token unlocks",
46508
+ "tags": [
46509
+ "CoinGecko"
46510
+ ]
46511
+ }
46512
+ },
46513
+ "/coingecko/treasuries": {
46514
+ "get": {
46515
+ "consumes": [
46516
+ "application/json"
46517
+ ],
46518
+ "description": "Returns normalized entity rows from CoinGecko's public crypto treasuries tables. This endpoint supports the documented `vs_currency` enum.",
46519
+ "operationId": "coingecko-treasuries",
46520
+ "parameters": [
46521
+ {
46522
+ "description": "Treasury asset filter, default all",
46523
+ "enum": [
46524
+ "all",
46525
+ "bitcoin",
46526
+ "ethereum",
46527
+ "solana",
46528
+ "bnb",
46529
+ "xrp",
46530
+ "tron"
46531
+ ],
46532
+ "in": "query",
46533
+ "name": "asset",
45297
46534
  "type": "string"
45298
46535
  },
45299
46536
  {
45300
- "description": "Page number, default 1",
46537
+ "description": "Treasury holder type filter, default all",
46538
+ "enum": [
46539
+ "all",
46540
+ "companies",
46541
+ "governments"
46542
+ ],
45301
46543
  "in": "query",
45302
- "name": "page",
45303
- "type": "integer"
46544
+ "name": "holder_type",
46545
+ "type": "string"
45304
46546
  },
45305
46547
  {
45306
46548
  "description": "Rows to return, default 100, max 100",
@@ -45387,7 +46629,7 @@
45387
46629
  "200": {
45388
46630
  "description": "OK",
45389
46631
  "schema": {
45390
- "$ref": "#/definitions/coingecko.nftCategoryResponseDoc"
46632
+ "$ref": "#/definitions/coingecko.treasuriesResponseDoc"
45391
46633
  }
45392
46634
  },
45393
46635
  "400": {
@@ -45396,12 +46638,6 @@
45396
46638
  "$ref": "#/definitions/app.Response"
45397
46639
  }
45398
46640
  },
45399
- "404": {
45400
- "description": "Not Found",
45401
- "schema": {
45402
- "$ref": "#/definitions/app.Response"
45403
- }
45404
- },
45405
46641
  "500": {
45406
46642
  "description": "Internal Server Error",
45407
46643
  "schema": {
@@ -45420,28 +46656,22 @@
45420
46656
  "ApiKeyAuth": []
45421
46657
  }
45422
46658
  ],
45423
- "summary": "CoinGecko NFT category",
46659
+ "summary": "CoinGecko crypto treasuries",
45424
46660
  "tags": [
45425
46661
  "CoinGecko"
45426
46662
  ]
45427
46663
  }
45428
46664
  },
45429
- "/coingecko/nfts": {
46665
+ "/coingecko/trending": {
45430
46666
  "get": {
45431
46667
  "consumes": [
45432
46668
  "application/json"
45433
46669
  ],
45434
- "description": "Returns normalized NFT collection rows from the CoinGecko public website NFT table. This endpoint supports the documented `vs_currency` enum.",
45435
- "operationId": "coingecko-nfts",
46670
+ "description": "Returns deduped trending coins and categories from the public CoinGecko highlights page. This endpoint supports the documented `vs_currency` enum.",
46671
+ "operationId": "coingecko-trending",
45436
46672
  "parameters": [
45437
46673
  {
45438
- "description": "Page number, default 1",
45439
- "in": "query",
45440
- "name": "page",
45441
- "type": "integer"
45442
- },
45443
- {
45444
- "description": "Rows to return, default 100, max 100",
46674
+ "description": "Rows per section to return, default 20, max 50",
45445
46675
  "in": "query",
45446
46676
  "name": "limit",
45447
46677
  "type": "integer"
@@ -45525,124 +46755,7 @@
45525
46755
  "200": {
45526
46756
  "description": "OK",
45527
46757
  "schema": {
45528
- "$ref": "#/definitions/coingecko.nftsResponseDoc"
45529
- }
45530
- },
45531
- "400": {
45532
- "description": "Bad Request",
45533
- "schema": {
45534
- "$ref": "#/definitions/app.Response"
45535
- }
45536
- },
45537
- "500": {
45538
- "description": "Internal Server Error",
45539
- "schema": {
45540
- "$ref": "#/definitions/app.Response"
45541
- }
45542
- },
45543
- "503": {
45544
- "description": "Service Unavailable",
45545
- "schema": {
45546
- "$ref": "#/definitions/app.Response"
45547
- }
45548
- }
45549
- },
45550
- "security": [
45551
- {
45552
- "ApiKeyAuth": []
45553
- }
45554
- ],
45555
- "summary": "CoinGecko NFT collections",
45556
- "tags": [
45557
- "CoinGecko"
45558
- ]
45559
- }
45560
- },
45561
- "/coingecko/search": {
45562
- "get": {
45563
- "consumes": [
45564
- "application/json"
45565
- ],
45566
- "description": "Returns normalized CoinGecko search sections from the public website search JSON. Empty valid searches return empty arrays.",
45567
- "operationId": "coingecko-search",
45568
- "parameters": [
45569
- {
45570
- "description": "Search query",
45571
- "in": "query",
45572
- "name": "q",
45573
- "required": true,
45574
- "type": "string"
45575
- },
45576
- {
45577
- "description": "Rows per section to return, default 10, max 50",
45578
- "in": "query",
45579
- "name": "limit",
45580
- "type": "integer"
45581
- }
45582
- ],
45583
- "produces": [
45584
- "application/json"
45585
- ],
45586
- "responses": {
45587
- "200": {
45588
- "description": "OK",
45589
- "schema": {
45590
- "$ref": "#/definitions/coingecko.searchResponseDoc"
45591
- }
45592
- },
45593
- "400": {
45594
- "description": "Bad Request",
45595
- "schema": {
45596
- "$ref": "#/definitions/app.Response"
45597
- }
45598
- },
45599
- "500": {
45600
- "description": "Internal Server Error",
45601
- "schema": {
45602
- "$ref": "#/definitions/app.Response"
45603
- }
45604
- },
45605
- "503": {
45606
- "description": "Service Unavailable",
45607
- "schema": {
45608
- "$ref": "#/definitions/app.Response"
45609
- }
45610
- }
45611
- },
45612
- "security": [
45613
- {
45614
- "ApiKeyAuth": []
45615
- }
45616
- ],
45617
- "summary": "CoinGecko discovery search",
45618
- "tags": [
45619
- "CoinGecko"
45620
- ]
45621
- }
45622
- },
45623
- "/coingecko/token-unlocks": {
45624
- "get": {
45625
- "consumes": [
45626
- "application/json"
45627
- ],
45628
- "description": "Returns normalized rows from CoinGecko's public incoming token unlocks page.",
45629
- "operationId": "coingecko-token-unlocks",
45630
- "parameters": [
45631
- {
45632
- "description": "Rows to return, default 100, max 100",
45633
- "in": "query",
45634
- "name": "limit",
45635
- "type": "integer"
45636
- }
45637
- ],
45638
- "produces": [
45639
- "application/json"
45640
- ],
45641
- "responses": {
45642
- "200": {
45643
- "description": "OK",
45644
- "schema": {
45645
- "$ref": "#/definitions/coingecko.tokenUnlocksResponseDoc"
46758
+ "$ref": "#/definitions/coingecko.trendingResponseDoc"
45646
46759
  }
45647
46760
  },
45648
46761
  "400": {
@@ -45669,249 +46782,29 @@
45669
46782
  "ApiKeyAuth": []
45670
46783
  }
45671
46784
  ],
45672
- "summary": "CoinGecko incoming token unlocks",
46785
+ "summary": "CoinGecko trending highlights",
45673
46786
  "tags": [
45674
46787
  "CoinGecko"
45675
46788
  ]
45676
46789
  }
45677
46790
  },
45678
- "/coingecko/treasuries": {
45679
- "get": {
46791
+ "/contact": {
46792
+ "post": {
45680
46793
  "consumes": [
45681
46794
  "application/json"
45682
46795
  ],
45683
- "description": "Returns normalized entity rows from CoinGecko's public crypto treasuries tables. This endpoint supports the documented `vs_currency` enum.",
45684
- "operationId": "coingecko-treasuries",
46796
+ "description": "Crawls a public website URL (homepage plus contact/about/team/imprint pages) and returns its public business contact details: emails — each tagged with a verification `status` (`verified`, `risky`, `unverified`, `invalid`) and a `type` (`generic`, `role`, `personal`) — plus social-media profiles and phone numbers. Intended for authorized public-business data only.",
46797
+ "operationId": "contact",
45685
46798
  "parameters": [
45686
46799
  {
45687
- "description": "Treasury asset filter, default all",
45688
- "enum": [
45689
- "all",
45690
- "bitcoin",
45691
- "ethereum",
45692
- "solana",
45693
- "bnb",
45694
- "xrp",
45695
- "tron"
45696
- ],
45697
- "in": "query",
45698
- "name": "asset",
45699
- "type": "string"
45700
- },
45701
- {
45702
- "description": "Treasury holder type filter, default all",
45703
- "enum": [
45704
- "all",
45705
- "companies",
45706
- "governments"
45707
- ],
45708
- "in": "query",
45709
- "name": "holder_type",
45710
- "type": "string"
45711
- },
45712
- {
45713
- "description": "Rows to return, default 100, max 100",
45714
- "in": "query",
45715
- "name": "limit",
45716
- "type": "integer"
45717
- },
45718
- {
45719
- "description": "Quote currency",
45720
- "enum": [
45721
- "btc",
45722
- "eth",
45723
- "ltc",
45724
- "bch",
45725
- "bnb",
45726
- "eos",
45727
- "xrp",
45728
- "xlm",
45729
- "link",
45730
- "dot",
45731
- "yfi",
45732
- "sol",
45733
- "usd",
45734
- "aed",
45735
- "ars",
45736
- "aud",
45737
- "bdt",
45738
- "bhd",
45739
- "bmd",
45740
- "brl",
45741
- "cad",
45742
- "chf",
45743
- "clp",
45744
- "cny",
45745
- "czk",
45746
- "dkk",
45747
- "eur",
45748
- "gbp",
45749
- "gel",
45750
- "hkd",
45751
- "huf",
45752
- "idr",
45753
- "ils",
45754
- "inr",
45755
- "jpy",
45756
- "krw",
45757
- "kwd",
45758
- "lkr",
45759
- "mmk",
45760
- "mxn",
45761
- "myr",
45762
- "ngn",
45763
- "nok",
45764
- "nzd",
45765
- "php",
45766
- "pkr",
45767
- "pln",
45768
- "rub",
45769
- "sar",
45770
- "sek",
45771
- "sgd",
45772
- "thb",
45773
- "try",
45774
- "twd",
45775
- "uah",
45776
- "vef",
45777
- "vnd",
45778
- "zar",
45779
- "xdr",
45780
- "xag",
45781
- "xau",
45782
- "bits",
45783
- "sats"
45784
- ],
45785
- "in": "query",
45786
- "name": "vs_currency",
45787
- "type": "string"
45788
- }
45789
- ],
45790
- "produces": [
45791
- "application/json"
45792
- ],
45793
- "responses": {
45794
- "200": {
45795
- "description": "OK",
45796
- "schema": {
45797
- "$ref": "#/definitions/coingecko.treasuriesResponseDoc"
45798
- }
45799
- },
45800
- "400": {
45801
- "description": "Bad Request",
45802
- "schema": {
45803
- "$ref": "#/definitions/app.Response"
45804
- }
45805
- },
45806
- "500": {
45807
- "description": "Internal Server Error",
45808
- "schema": {
45809
- "$ref": "#/definitions/app.Response"
45810
- }
45811
- },
45812
- "503": {
45813
- "description": "Service Unavailable",
46800
+ "description": "Website URL payload",
46801
+ "in": "body",
46802
+ "name": "option",
46803
+ "required": true,
45814
46804
  "schema": {
45815
- "$ref": "#/definitions/app.Response"
46805
+ "$ref": "#/definitions/contact.ContactRequest"
45816
46806
  }
45817
46807
  }
45818
- },
45819
- "security": [
45820
- {
45821
- "ApiKeyAuth": []
45822
- }
45823
- ],
45824
- "summary": "CoinGecko crypto treasuries",
45825
- "tags": [
45826
- "CoinGecko"
45827
- ]
45828
- }
45829
- },
45830
- "/coingecko/trending": {
45831
- "get": {
45832
- "consumes": [
45833
- "application/json"
45834
- ],
45835
- "description": "Returns deduped trending coins and categories from the public CoinGecko highlights page. This endpoint supports the documented `vs_currency` enum.",
45836
- "operationId": "coingecko-trending",
45837
- "parameters": [
45838
- {
45839
- "description": "Rows per section to return, default 20, max 50",
45840
- "in": "query",
45841
- "name": "limit",
45842
- "type": "integer"
45843
- },
45844
- {
45845
- "description": "Quote currency",
45846
- "enum": [
45847
- "btc",
45848
- "eth",
45849
- "ltc",
45850
- "bch",
45851
- "bnb",
45852
- "eos",
45853
- "xrp",
45854
- "xlm",
45855
- "link",
45856
- "dot",
45857
- "yfi",
45858
- "sol",
45859
- "usd",
45860
- "aed",
45861
- "ars",
45862
- "aud",
45863
- "bdt",
45864
- "bhd",
45865
- "bmd",
45866
- "brl",
45867
- "cad",
45868
- "chf",
45869
- "clp",
45870
- "cny",
45871
- "czk",
45872
- "dkk",
45873
- "eur",
45874
- "gbp",
45875
- "gel",
45876
- "hkd",
45877
- "huf",
45878
- "idr",
45879
- "ils",
45880
- "inr",
45881
- "jpy",
45882
- "krw",
45883
- "kwd",
45884
- "lkr",
45885
- "mmk",
45886
- "mxn",
45887
- "myr",
45888
- "ngn",
45889
- "nok",
45890
- "nzd",
45891
- "php",
45892
- "pkr",
45893
- "pln",
45894
- "rub",
45895
- "sar",
45896
- "sek",
45897
- "sgd",
45898
- "thb",
45899
- "try",
45900
- "twd",
45901
- "uah",
45902
- "vef",
45903
- "vnd",
45904
- "zar",
45905
- "xdr",
45906
- "xag",
45907
- "xau",
45908
- "bits",
45909
- "sats"
45910
- ],
45911
- "in": "query",
45912
- "name": "vs_currency",
45913
- "type": "string"
45914
- }
45915
46808
  ],
45916
46809
  "produces": [
45917
46810
  "application/json"
@@ -45920,23 +46813,23 @@
45920
46813
  "200": {
45921
46814
  "description": "OK",
45922
46815
  "schema": {
45923
- "$ref": "#/definitions/coingecko.trendingResponseDoc"
46816
+ "$ref": "#/definitions/contact.contactResponseDoc"
45924
46817
  }
45925
46818
  },
45926
46819
  "400": {
45927
- "description": "Bad Request",
46820
+ "description": "Invalid input or missing URL",
45928
46821
  "schema": {
45929
46822
  "$ref": "#/definitions/app.Response"
45930
46823
  }
45931
46824
  },
45932
- "500": {
45933
- "description": "Internal Server Error",
46825
+ "429": {
46826
+ "description": "Rate limit exceeded",
45934
46827
  "schema": {
45935
46828
  "$ref": "#/definitions/app.Response"
45936
46829
  }
45937
46830
  },
45938
- "503": {
45939
- "description": "Service Unavailable",
46831
+ "500": {
46832
+ "description": "Internal server error during contact extraction",
45940
46833
  "schema": {
45941
46834
  "$ref": "#/definitions/app.Response"
45942
46835
  }
@@ -45947,9 +46840,9 @@
45947
46840
  "ApiKeyAuth": []
45948
46841
  }
45949
46842
  ],
45950
- "summary": "CoinGecko trending highlights",
46843
+ "summary": "Contact API — emails, socials and phones for a website",
45951
46844
  "tags": [
45952
- "CoinGecko"
46845
+ "Web"
45953
46846
  ]
45954
46847
  }
45955
46848
  },
@@ -46453,6 +47346,64 @@
46453
47346
  ]
46454
47347
  }
46455
47348
  },
47349
+ "/diagnostics/antibot-check": {
47350
+ "post": {
47351
+ "consumes": [
47352
+ "application/json"
47353
+ ],
47354
+ "description": "Probes a URL across escalating transports (direct HTTP → browser-impersonation → headless/stealth browsers) and returns an empirical scraping-difficulty assessment for that exact URL: a 0–10 `difficulty_score` and `difficulty_band` (`easy`, `medium`, `hard`, `very_hard`, `blocked`, `unknown`), whether it is `scrapeable`, the detected anti-bot `protections` (Cloudflare, DataDome, Akamai, PerimeterX, Kasada, Imperva, AWS WAF and more — each with a `kind` and `confidence`), the lightest transport that worked, and a `recommended_profile`. Difficulty is per-URL, not per-site — a homepage may be open while deep pages are bot-managed. Intended for authorized public-data scraping planning.",
47355
+ "operationId": "antibot-check",
47356
+ "parameters": [
47357
+ {
47358
+ "description": "Target URL (and optional fast flag)",
47359
+ "in": "body",
47360
+ "name": "request",
47361
+ "required": true,
47362
+ "schema": {
47363
+ "$ref": "#/definitions/diagnostics.AntibotCheckRequest"
47364
+ }
47365
+ }
47366
+ ],
47367
+ "produces": [
47368
+ "application/json"
47369
+ ],
47370
+ "responses": {
47371
+ "200": {
47372
+ "description": "OK",
47373
+ "schema": {
47374
+ "$ref": "#/definitions/diagnostics.antibotCheckResponseDoc"
47375
+ }
47376
+ },
47377
+ "400": {
47378
+ "description": "Invalid or missing URL",
47379
+ "schema": {
47380
+ "$ref": "#/definitions/app.Response"
47381
+ }
47382
+ },
47383
+ "429": {
47384
+ "description": "Rate limit exceeded",
47385
+ "schema": {
47386
+ "$ref": "#/definitions/app.Response"
47387
+ }
47388
+ },
47389
+ "503": {
47390
+ "description": "Probe failed (transport/browser error or blocked target)",
47391
+ "schema": {
47392
+ "$ref": "#/definitions/app.Response"
47393
+ }
47394
+ }
47395
+ },
47396
+ "security": [
47397
+ {
47398
+ "ApiKeyAuth": []
47399
+ }
47400
+ ],
47401
+ "summary": "Anti-bot check — website scraping difficulty",
47402
+ "tags": [
47403
+ "Web"
47404
+ ]
47405
+ }
47406
+ },
46456
47407
  "/ebay/item/{item_id}": {
46457
47408
  "get": {
46458
47409
  "consumes": [
@@ -63209,65 +64160,369 @@
63209
64160
  "ApiKeyAuth": []
63210
64161
  }
63211
64162
  ],
63212
- "summary": "List Reddit subreddit posts",
64163
+ "summary": "List Reddit subreddit posts",
64164
+ "tags": [
64165
+ "Reddit"
64166
+ ]
64167
+ }
64168
+ },
64169
+ "/reddit/subreddits/posts": {
64170
+ "get": {
64171
+ "consumes": [
64172
+ "application/json"
64173
+ ],
64174
+ "description": "Returns normalized public posts from a combined multi-subreddit feed.",
64175
+ "operationId": "reddit-subreddits-posts",
64176
+ "parameters": [
64177
+ {
64178
+ "description": "Comma-separated subreddit names, without r/, maximum 10",
64179
+ "in": "query",
64180
+ "name": "subreddits",
64181
+ "required": true,
64182
+ "type": "string"
64183
+ },
64184
+ {
64185
+ "default": "hot",
64186
+ "description": "Sort: hot, new, top, or rising",
64187
+ "enum": [
64188
+ "hot",
64189
+ "new",
64190
+ "top",
64191
+ "rising"
64192
+ ],
64193
+ "in": "query",
64194
+ "name": "sort",
64195
+ "type": "string"
64196
+ },
64197
+ {
64198
+ "description": "Time window for top sort: hour, day, week, month, year, or all",
64199
+ "enum": [
64200
+ "hour",
64201
+ "day",
64202
+ "week",
64203
+ "month",
64204
+ "year",
64205
+ "all"
64206
+ ],
64207
+ "in": "query",
64208
+ "name": "time",
64209
+ "type": "string"
64210
+ },
64211
+ {
64212
+ "description": "Maximum posts, defaults to 25 and clamps to 100",
64213
+ "in": "query",
64214
+ "name": "limit",
64215
+ "type": "integer"
64216
+ },
64217
+ {
64218
+ "description": "Reddit pagination token",
64219
+ "in": "query",
64220
+ "name": "after",
64221
+ "type": "string"
64222
+ }
64223
+ ],
64224
+ "produces": [
64225
+ "application/json"
64226
+ ],
64227
+ "responses": {
64228
+ "200": {
64229
+ "description": "OK",
64230
+ "schema": {
64231
+ "$ref": "#/definitions/reddit.multiSubredditPostsResponseDoc"
64232
+ }
64233
+ },
64234
+ "400": {
64235
+ "description": "Bad Request",
64236
+ "schema": {
64237
+ "$ref": "#/definitions/app.Response"
64238
+ }
64239
+ },
64240
+ "404": {
64241
+ "description": "Not Found",
64242
+ "schema": {
64243
+ "$ref": "#/definitions/app.Response"
64244
+ }
64245
+ },
64246
+ "429": {
64247
+ "description": "Too Many Requests",
64248
+ "schema": {
64249
+ "$ref": "#/definitions/app.Response"
64250
+ }
64251
+ },
64252
+ "503": {
64253
+ "description": "Service Unavailable",
64254
+ "schema": {
64255
+ "$ref": "#/definitions/app.Response"
64256
+ }
64257
+ }
64258
+ },
64259
+ "security": [
64260
+ {
64261
+ "ApiKeyAuth": []
64262
+ }
64263
+ ],
64264
+ "summary": "List Reddit multi-subreddit posts",
64265
+ "tags": [
64266
+ "Reddit"
64267
+ ]
64268
+ }
64269
+ },
64270
+ "/reddit/trends": {
64271
+ "get": {
64272
+ "consumes": [
64273
+ "application/json"
64274
+ ],
64275
+ "description": "Returns normalized public posts from broad Reddit hot, new, rising, or top feeds. For subreddit-specific trends, use `/reddit/subreddit/{subreddit}/posts` with `sort=hot`, `sort=new`, `sort=rising`, or `sort=top`.",
64276
+ "operationId": "reddit-trends",
64277
+ "parameters": [
64278
+ {
64279
+ "default": "hot",
64280
+ "description": "Sort: hot, new, rising, or top",
64281
+ "enum": [
64282
+ "hot",
64283
+ "new",
64284
+ "rising",
64285
+ "top"
64286
+ ],
64287
+ "in": "query",
64288
+ "name": "sort",
64289
+ "type": "string"
64290
+ },
64291
+ {
64292
+ "description": "Time window for top sort: hour, day, week, month, year, or all",
64293
+ "enum": [
64294
+ "hour",
64295
+ "day",
64296
+ "week",
64297
+ "month",
64298
+ "year",
64299
+ "all"
64300
+ ],
64301
+ "in": "query",
64302
+ "name": "time",
64303
+ "type": "string"
64304
+ },
64305
+ {
64306
+ "description": "Maximum posts, defaults to 25 and clamps to 100",
64307
+ "in": "query",
64308
+ "name": "limit",
64309
+ "type": "integer"
64310
+ },
64311
+ {
64312
+ "description": "Reddit pagination token",
64313
+ "in": "query",
64314
+ "name": "after",
64315
+ "type": "string"
64316
+ }
64317
+ ],
64318
+ "produces": [
64319
+ "application/json"
64320
+ ],
64321
+ "responses": {
64322
+ "200": {
64323
+ "description": "OK",
64324
+ "schema": {
64325
+ "$ref": "#/definitions/reddit.trendsResponseDoc"
64326
+ }
64327
+ },
64328
+ "400": {
64329
+ "description": "Bad Request",
64330
+ "schema": {
64331
+ "$ref": "#/definitions/app.Response"
64332
+ }
64333
+ },
64334
+ "404": {
64335
+ "description": "Not Found",
64336
+ "schema": {
64337
+ "$ref": "#/definitions/app.Response"
64338
+ }
64339
+ },
64340
+ "429": {
64341
+ "description": "Too Many Requests",
64342
+ "schema": {
64343
+ "$ref": "#/definitions/app.Response"
64344
+ }
64345
+ },
64346
+ "503": {
64347
+ "description": "Service Unavailable",
64348
+ "schema": {
64349
+ "$ref": "#/definitions/app.Response"
64350
+ }
64351
+ }
64352
+ },
64353
+ "security": [
64354
+ {
64355
+ "ApiKeyAuth": []
64356
+ }
64357
+ ],
64358
+ "summary": "List Reddit trends",
64359
+ "tags": [
64360
+ "Reddit"
64361
+ ]
64362
+ }
64363
+ },
64364
+ "/reddit/user/{username}/comments": {
64365
+ "get": {
64366
+ "consumes": [
64367
+ "application/json"
64368
+ ],
64369
+ "description": "Returns flat public comment entries from a public Reddit user's comments feed.",
64370
+ "operationId": "reddit-user-comments",
64371
+ "parameters": [
64372
+ {
64373
+ "description": "Public Reddit username, without u/",
64374
+ "in": "path",
64375
+ "name": "username",
64376
+ "required": true,
64377
+ "type": "string"
64378
+ },
64379
+ {
64380
+ "description": "Maximum comments, defaults to 25 and clamps to 100",
64381
+ "in": "query",
64382
+ "name": "limit",
64383
+ "type": "integer"
64384
+ },
64385
+ {
64386
+ "description": "Reddit pagination token",
64387
+ "in": "query",
64388
+ "name": "after",
64389
+ "type": "string"
64390
+ }
64391
+ ],
64392
+ "produces": [
64393
+ "application/json"
64394
+ ],
64395
+ "responses": {
64396
+ "200": {
64397
+ "description": "OK",
64398
+ "schema": {
64399
+ "$ref": "#/definitions/reddit.userCommentsResponseDoc"
64400
+ }
64401
+ },
64402
+ "400": {
64403
+ "description": "Bad Request",
64404
+ "schema": {
64405
+ "$ref": "#/definitions/app.Response"
64406
+ }
64407
+ },
64408
+ "404": {
64409
+ "description": "Not Found",
64410
+ "schema": {
64411
+ "$ref": "#/definitions/app.Response"
64412
+ }
64413
+ },
64414
+ "429": {
64415
+ "description": "Too Many Requests",
64416
+ "schema": {
64417
+ "$ref": "#/definitions/app.Response"
64418
+ }
64419
+ },
64420
+ "503": {
64421
+ "description": "Service Unavailable",
64422
+ "schema": {
64423
+ "$ref": "#/definitions/app.Response"
64424
+ }
64425
+ }
64426
+ },
64427
+ "security": [
64428
+ {
64429
+ "ApiKeyAuth": []
64430
+ }
64431
+ ],
64432
+ "summary": "List Reddit user comments",
64433
+ "tags": [
64434
+ "Reddit"
64435
+ ]
64436
+ }
64437
+ },
64438
+ "/reddit/user/{username}/posts": {
64439
+ "get": {
64440
+ "consumes": [
64441
+ "application/json"
64442
+ ],
64443
+ "description": "Returns normalized public posts from a public Reddit user's submitted feed.",
64444
+ "operationId": "reddit-user-posts",
64445
+ "parameters": [
64446
+ {
64447
+ "description": "Public Reddit username, without u/",
64448
+ "in": "path",
64449
+ "name": "username",
64450
+ "required": true,
64451
+ "type": "string"
64452
+ },
64453
+ {
64454
+ "description": "Maximum posts, defaults to 25 and clamps to 100",
64455
+ "in": "query",
64456
+ "name": "limit",
64457
+ "type": "integer"
64458
+ },
64459
+ {
64460
+ "description": "Reddit pagination token",
64461
+ "in": "query",
64462
+ "name": "after",
64463
+ "type": "string"
64464
+ }
64465
+ ],
64466
+ "produces": [
64467
+ "application/json"
64468
+ ],
64469
+ "responses": {
64470
+ "200": {
64471
+ "description": "OK",
64472
+ "schema": {
64473
+ "$ref": "#/definitions/reddit.userPostsResponseDoc"
64474
+ }
64475
+ },
64476
+ "400": {
64477
+ "description": "Bad Request",
64478
+ "schema": {
64479
+ "$ref": "#/definitions/app.Response"
64480
+ }
64481
+ },
64482
+ "404": {
64483
+ "description": "Not Found",
64484
+ "schema": {
64485
+ "$ref": "#/definitions/app.Response"
64486
+ }
64487
+ },
64488
+ "429": {
64489
+ "description": "Too Many Requests",
64490
+ "schema": {
64491
+ "$ref": "#/definitions/app.Response"
64492
+ }
64493
+ },
64494
+ "503": {
64495
+ "description": "Service Unavailable",
64496
+ "schema": {
64497
+ "$ref": "#/definitions/app.Response"
64498
+ }
64499
+ }
64500
+ },
64501
+ "security": [
64502
+ {
64503
+ "ApiKeyAuth": []
64504
+ }
64505
+ ],
64506
+ "summary": "List Reddit user posts",
63213
64507
  "tags": [
63214
64508
  "Reddit"
63215
64509
  ]
63216
64510
  }
63217
64511
  },
63218
- "/reddit/subreddits/posts": {
64512
+ "/redfin/estimate": {
63219
64513
  "get": {
63220
64514
  "consumes": [
63221
64515
  "application/json"
63222
64516
  ],
63223
- "description": "Returns normalized public posts from a combined multi-subreddit feed.",
63224
- "operationId": "reddit-subreddits-posts",
64517
+ "description": "Returns the Redfin Estimate for a property, including the current estimate, property facts, and the monthly estimate history with city/county/postal comparatives. Faithful pass-through of Redfin's public avm + avmHistoricalData resources.",
64518
+ "operationId": "redfin-estimate",
63225
64519
  "parameters": [
63226
64520
  {
63227
- "description": "Comma-separated subreddit names, without r/, maximum 10",
64521
+ "description": "Redfin property id",
63228
64522
  "in": "query",
63229
- "name": "subreddits",
64523
+ "name": "property_id",
63230
64524
  "required": true,
63231
64525
  "type": "string"
63232
- },
63233
- {
63234
- "default": "hot",
63235
- "description": "Sort: hot, new, top, or rising",
63236
- "enum": [
63237
- "hot",
63238
- "new",
63239
- "top",
63240
- "rising"
63241
- ],
63242
- "in": "query",
63243
- "name": "sort",
63244
- "type": "string"
63245
- },
63246
- {
63247
- "description": "Time window for top sort: hour, day, week, month, year, or all",
63248
- "enum": [
63249
- "hour",
63250
- "day",
63251
- "week",
63252
- "month",
63253
- "year",
63254
- "all"
63255
- ],
63256
- "in": "query",
63257
- "name": "time",
63258
- "type": "string"
63259
- },
63260
- {
63261
- "description": "Maximum posts, defaults to 25 and clamps to 100",
63262
- "in": "query",
63263
- "name": "limit",
63264
- "type": "integer"
63265
- },
63266
- {
63267
- "description": "Reddit pagination token",
63268
- "in": "query",
63269
- "name": "after",
63270
- "type": "string"
63271
64526
  }
63272
64527
  ],
63273
64528
  "produces": [
@@ -63277,7 +64532,7 @@
63277
64532
  "200": {
63278
64533
  "description": "OK",
63279
64534
  "schema": {
63280
- "$ref": "#/definitions/reddit.multiSubredditPostsResponseDoc"
64535
+ "$ref": "#/definitions/redfin.EstimateResponse"
63281
64536
  }
63282
64537
  },
63283
64538
  "400": {
@@ -63286,12 +64541,6 @@
63286
64541
  "$ref": "#/definitions/app.Response"
63287
64542
  }
63288
64543
  },
63289
- "404": {
63290
- "description": "Not Found",
63291
- "schema": {
63292
- "$ref": "#/definitions/app.Response"
63293
- }
63294
- },
63295
64544
  "429": {
63296
64545
  "description": "Too Many Requests",
63297
64546
  "schema": {
@@ -63310,57 +64559,36 @@
63310
64559
  "ApiKeyAuth": []
63311
64560
  }
63312
64561
  ],
63313
- "summary": "List Reddit multi-subreddit posts",
64562
+ "summary": "Get Redfin Estimate",
63314
64563
  "tags": [
63315
- "Reddit"
64564
+ "Redfin"
63316
64565
  ]
63317
64566
  }
63318
64567
  },
63319
- "/reddit/trends": {
64568
+ "/redfin/property": {
63320
64569
  "get": {
63321
64570
  "consumes": [
63322
64571
  "application/json"
63323
64572
  ],
63324
- "description": "Returns normalized public posts from broad Reddit hot, new, rising, or top feeds. For subreddit-specific trends, use `/reddit/subreddit/{subreddit}/posts` with `sort=hot`, `sort=new`, `sort=rising`, or `sort=top`.",
63325
- "operationId": "reddit-trends",
64573
+ "description": "Returns normalized Redfin public property details. Provide a listing url, or a property_id (optionally with listing_id) to use Redfin's public stingray detail API.",
64574
+ "operationId": "redfin-property",
63326
64575
  "parameters": [
63327
64576
  {
63328
- "default": "hot",
63329
- "description": "Sort: hot, new, rising, or top",
63330
- "enum": [
63331
- "hot",
63332
- "new",
63333
- "rising",
63334
- "top"
63335
- ],
64577
+ "description": "Redfin listing URL (primary key)",
63336
64578
  "in": "query",
63337
- "name": "sort",
64579
+ "name": "url",
63338
64580
  "type": "string"
63339
64581
  },
63340
64582
  {
63341
- "description": "Time window for top sort: hour, day, week, month, year, or all",
63342
- "enum": [
63343
- "hour",
63344
- "day",
63345
- "week",
63346
- "month",
63347
- "year",
63348
- "all"
63349
- ],
64583
+ "description": "Redfin property id, used when url is not provided",
63350
64584
  "in": "query",
63351
- "name": "time",
64585
+ "name": "property_id",
63352
64586
  "type": "string"
63353
64587
  },
63354
64588
  {
63355
- "description": "Maximum posts, defaults to 25 and clamps to 100",
63356
- "in": "query",
63357
- "name": "limit",
63358
- "type": "integer"
63359
- },
63360
- {
63361
- "description": "Reddit pagination token",
64589
+ "description": "Redfin listing id, improves completeness with property_id",
63362
64590
  "in": "query",
63363
- "name": "after",
64591
+ "name": "listing_id",
63364
64592
  "type": "string"
63365
64593
  }
63366
64594
  ],
@@ -63371,7 +64599,7 @@
63371
64599
  "200": {
63372
64600
  "description": "OK",
63373
64601
  "schema": {
63374
- "$ref": "#/definitions/reddit.trendsResponseDoc"
64602
+ "$ref": "#/definitions/redfin.PropertyResponse"
63375
64603
  }
63376
64604
  },
63377
64605
  "400": {
@@ -63404,38 +64632,32 @@
63404
64632
  "ApiKeyAuth": []
63405
64633
  }
63406
64634
  ],
63407
- "summary": "List Reddit trends",
64635
+ "summary": "Get Redfin property",
63408
64636
  "tags": [
63409
- "Reddit"
64637
+ "Redfin"
63410
64638
  ]
63411
64639
  }
63412
64640
  },
63413
- "/reddit/user/{username}/comments": {
64641
+ "/redfin/region-trends": {
63414
64642
  "get": {
63415
64643
  "consumes": [
63416
64644
  "application/json"
63417
64645
  ],
63418
- "description": "Returns flat public comment entries from a public Reddit user's comments feed.",
63419
- "operationId": "reddit-user-comments",
64646
+ "description": "Returns Redfin's aggregate market trends for a region (median list/sale price, sale-to-list, offers, days on market, inventory, year-over-year). Faithful pass-through of Redfin's public aggregate-trends resource.",
64647
+ "operationId": "redfin-region-trends",
63420
64648
  "parameters": [
63421
64649
  {
63422
- "description": "Public Reddit username, without u/",
63423
- "in": "path",
63424
- "name": "username",
63425
- "required": true,
63426
- "type": "string"
63427
- },
63428
- {
63429
- "description": "Maximum comments, defaults to 25 and clamps to 100",
64650
+ "description": "Redfin region id from autocomplete",
63430
64651
  "in": "query",
63431
- "name": "limit",
64652
+ "name": "region_id",
64653
+ "required": true,
63432
64654
  "type": "integer"
63433
64655
  },
63434
64656
  {
63435
- "description": "Reddit pagination token",
64657
+ "description": "Redfin region type from autocomplete (defaults to 6, city)",
63436
64658
  "in": "query",
63437
- "name": "after",
63438
- "type": "string"
64659
+ "name": "region_type",
64660
+ "type": "integer"
63439
64661
  }
63440
64662
  ],
63441
64663
  "produces": [
@@ -63445,7 +64667,7 @@
63445
64667
  "200": {
63446
64668
  "description": "OK",
63447
64669
  "schema": {
63448
- "$ref": "#/definitions/reddit.userCommentsResponseDoc"
64670
+ "$ref": "#/definitions/redfin.RegionTrendsResponse"
63449
64671
  }
63450
64672
  },
63451
64673
  "400": {
@@ -63454,12 +64676,6 @@
63454
64676
  "$ref": "#/definitions/app.Response"
63455
64677
  }
63456
64678
  },
63457
- "404": {
63458
- "description": "Not Found",
63459
- "schema": {
63460
- "$ref": "#/definitions/app.Response"
63461
- }
63462
- },
63463
64679
  "429": {
63464
64680
  "description": "Too Many Requests",
63465
64681
  "schema": {
@@ -63478,38 +64694,73 @@
63478
64694
  "ApiKeyAuth": []
63479
64695
  }
63480
64696
  ],
63481
- "summary": "List Reddit user comments",
64697
+ "summary": "Get Redfin region market trends",
63482
64698
  "tags": [
63483
- "Reddit"
64699
+ "Redfin"
63484
64700
  ]
63485
64701
  }
63486
64702
  },
63487
- "/reddit/user/{username}/posts": {
64703
+ "/redfin/search": {
63488
64704
  "get": {
63489
64705
  "consumes": [
63490
64706
  "application/json"
63491
64707
  ],
63492
- "description": "Returns normalized public posts from a public Reddit user's submitted feed.",
63493
- "operationId": "reddit-user-posts",
64708
+ "description": "Returns normalized Redfin public listing search results from Redfin's credential-free region CSV endpoint. Pass region_id/region_type from autocomplete to skip location resolution.",
64709
+ "operationId": "redfin-search",
63494
64710
  "parameters": [
63495
64711
  {
63496
- "description": "Public Reddit username, without u/",
63497
- "in": "path",
63498
- "name": "username",
63499
- "required": true,
64712
+ "description": "Display location; resolved via autocomplete when region_id is omitted",
64713
+ "in": "query",
64714
+ "name": "location",
63500
64715
  "type": "string"
63501
64716
  },
63502
64717
  {
63503
- "description": "Maximum posts, defaults to 25 and clamps to 100",
64718
+ "description": "1-based page",
63504
64719
  "in": "query",
63505
- "name": "limit",
64720
+ "name": "page",
63506
64721
  "type": "integer"
63507
64722
  },
63508
64723
  {
63509
- "description": "Reddit pagination token",
64724
+ "description": "Redfin region id from autocomplete",
63510
64725
  "in": "query",
63511
- "name": "after",
64726
+ "name": "region_id",
64727
+ "type": "integer"
64728
+ },
64729
+ {
64730
+ "description": "Redfin region type from autocomplete (defaults to 6, city)",
64731
+ "in": "query",
64732
+ "name": "region_type",
64733
+ "type": "integer"
64734
+ },
64735
+ {
64736
+ "description": "Listing status: for_sale or sold",
64737
+ "in": "query",
64738
+ "name": "status",
63512
64739
  "type": "string"
64740
+ },
64741
+ {
64742
+ "description": "Minimum price filter",
64743
+ "in": "query",
64744
+ "name": "min_price",
64745
+ "type": "integer"
64746
+ },
64747
+ {
64748
+ "description": "Maximum price filter",
64749
+ "in": "query",
64750
+ "name": "max_price",
64751
+ "type": "integer"
64752
+ },
64753
+ {
64754
+ "description": "Minimum bedrooms filter",
64755
+ "in": "query",
64756
+ "name": "min_beds",
64757
+ "type": "integer"
64758
+ },
64759
+ {
64760
+ "description": "Minimum bathrooms filter",
64761
+ "in": "query",
64762
+ "name": "min_baths",
64763
+ "type": "number"
63513
64764
  }
63514
64765
  ],
63515
64766
  "produces": [
@@ -63519,7 +64770,7 @@
63519
64770
  "200": {
63520
64771
  "description": "OK",
63521
64772
  "schema": {
63522
- "$ref": "#/definitions/reddit.userPostsResponseDoc"
64773
+ "$ref": "#/definitions/redfin.SearchResponse"
63523
64774
  }
63524
64775
  },
63525
64776
  "400": {
@@ -63528,8 +64779,58 @@
63528
64779
  "$ref": "#/definitions/app.Response"
63529
64780
  }
63530
64781
  },
63531
- "404": {
63532
- "description": "Not Found",
64782
+ "429": {
64783
+ "description": "Too Many Requests",
64784
+ "schema": {
64785
+ "$ref": "#/definitions/app.Response"
64786
+ }
64787
+ },
64788
+ "503": {
64789
+ "description": "Service Unavailable",
64790
+ "schema": {
64791
+ "$ref": "#/definitions/app.Response"
64792
+ }
64793
+ }
64794
+ },
64795
+ "security": [
64796
+ {
64797
+ "ApiKeyAuth": []
64798
+ }
64799
+ ],
64800
+ "summary": "Search Redfin listings",
64801
+ "tags": [
64802
+ "Redfin"
64803
+ ]
64804
+ }
64805
+ },
64806
+ "/redfin/similar": {
64807
+ "get": {
64808
+ "consumes": [
64809
+ "application/json"
64810
+ ],
64811
+ "description": "Returns Redfin's comparable (\"similar\") listings for a property as normalized listing rows. Faithful pass-through of Redfin's public similars resource.",
64812
+ "operationId": "redfin-similar",
64813
+ "parameters": [
64814
+ {
64815
+ "description": "Redfin property id",
64816
+ "in": "query",
64817
+ "name": "property_id",
64818
+ "required": true,
64819
+ "type": "string"
64820
+ }
64821
+ ],
64822
+ "produces": [
64823
+ "application/json"
64824
+ ],
64825
+ "responses": {
64826
+ "200": {
64827
+ "description": "OK",
64828
+ "schema": {
64829
+ "$ref": "#/definitions/redfin.SimilarResponse"
64830
+ }
64831
+ },
64832
+ "400": {
64833
+ "description": "Bad Request",
63533
64834
  "schema": {
63534
64835
  "$ref": "#/definitions/app.Response"
63535
64836
  }
@@ -63552,9 +64853,9 @@
63552
64853
  "ApiKeyAuth": []
63553
64854
  }
63554
64855
  ],
63555
- "summary": "List Reddit user posts",
64856
+ "summary": "Get Redfin comparable listings",
63556
64857
  "tags": [
63557
- "Reddit"
64858
+ "Redfin"
63558
64859
  ]
63559
64860
  }
63560
64861
  },
@@ -73051,6 +74352,64 @@
73051
74352
  ]
73052
74353
  }
73053
74354
  },
74355
+ "/web/scrape": {
74356
+ "post": {
74357
+ "consumes": [
74358
+ "application/json"
74359
+ ],
74360
+ "description": "Fetches a single public URL and returns clean content in the requested formats (markdown, html, raw_html, links, metadata). With render=auto the request starts as a fast HTTP fetch and escalates to a real browser when the page is blocked or rendered with JavaScript. only_main_content (default true) strips navigation, headers, footers and other boilerplate before conversion. Only public pages are supported; respect each site's terms of use and robots directives.",
74361
+ "operationId": "web-scrape",
74362
+ "parameters": [
74363
+ {
74364
+ "description": "Scrape options",
74365
+ "in": "body",
74366
+ "name": "scrapeOption",
74367
+ "required": true,
74368
+ "schema": {
74369
+ "$ref": "#/definitions/web.ScrapeOption"
74370
+ }
74371
+ }
74372
+ ],
74373
+ "produces": [
74374
+ "application/json"
74375
+ ],
74376
+ "responses": {
74377
+ "200": {
74378
+ "description": "OK",
74379
+ "schema": {
74380
+ "$ref": "#/definitions/web.scrapeResponseDoc"
74381
+ }
74382
+ },
74383
+ "400": {
74384
+ "description": "Invalid input",
74385
+ "schema": {
74386
+ "$ref": "#/definitions/app.Response"
74387
+ }
74388
+ },
74389
+ "500": {
74390
+ "description": "Internal server error",
74391
+ "schema": {
74392
+ "$ref": "#/definitions/app.Response"
74393
+ }
74394
+ },
74395
+ "502": {
74396
+ "description": "Upstream fetch failed",
74397
+ "schema": {
74398
+ "$ref": "#/definitions/app.Response"
74399
+ }
74400
+ }
74401
+ },
74402
+ "security": [
74403
+ {
74404
+ "ApiKeyAuth": []
74405
+ }
74406
+ ],
74407
+ "summary": "Scrape a URL into markdown, HTML, links or metadata",
74408
+ "tags": [
74409
+ "Web"
74410
+ ]
74411
+ }
74412
+ },
73054
74413
  "/yahoo-finance/calendars": {
73055
74414
  "get": {
73056
74415
  "consumes": [