---
title: "Search the Bilibili Huahuo creator marketplace"
description: "TikHub tool tikhub-api-bilibili-huahuo-search-upper on looot: input fields, $0.01 per call, output shape, and code to run it with curl, JavaScript or Python."
sidebar:
  hidden: true
---

{/* Generated by scripts/generate-api-reference.mjs from data/api-reference.json. Do not edit. */}

Searches creators on Huahuo, Bilibili's paid creator-collaboration marketplace for brands, by nickname, UID or content keyword, with filters for fans, price, performance and industry. Send `nickname_or_mids` to search creators or `main_search` to search their content, usually one of the two. Returns 20 creators per page; reuse `request_id` when paging with the same filters. For normal Bilibili search, use tikhub-api-bilibili-app-fetch-search-all.

- **Tool id:** `tikhub-api-bilibili-huahuo-search-upper`
- **Provider:** [TikHub](/providers/tikhub)
- **Job:** [Search upper api bilibili huahuo](/reference/jobs/api-bilibili-huahuo-search-upper) (`api.bilibili.huahuo.search-upper`)
- **Price:** $0.01 per call. A call that fails at the provider costs $0.

## Inputs

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `av_active` | string | no | Recent-publishing activity switch: 1=enabled, 0=all |
| `av_active_tag` | string | no | Recent-publishing activity tier from square_static_info.av_active_tag |
| `av_honor` | string | no | Video-honor condition with honor type, time period, and count |
| `bdata_tag_lv5` | string | no | Bilibili level-five content-tag filter values |
| `blue_url_click_cost_gte` | string | no | Minimum blue-link click cost, cooperation and promotion spend divided by clicks |
| `blue_url_click_cost_lt` | string | no | Maximum blue-link click cost, cooperation and promotion spend divided by clicks |
| `blue_url_ctr_gte` | string | no | Minimum blue-link CTR, blue-link clicks divided by video views |
| `blue_url_ctr_lt` | string | no | Maximum blue-link CTR, blue-link clicks divided by video views |
| `category_dmp_group_id` | string | no | Content-category DMP audience-package ID |
| `category_dmp_label` | string | no | Display label for the content-category DMP audience package |
| `cooperate_experience_type` | string | no | Industry experience: 1=experienced, 2=extensive, 3=none in selected industry, 4=other industries |
| `cpc_cycle` | string | no | CPC window: 1=7 days, 2=15 days, 3=30 days |
| `cpc_traffic_type` | string | no | CPC traffic scope: 1=all traffic, 2=organic traffic |
| `cpe_cycle` | string | no | CPE window: 1=7 days, 3=30 days |
| `cpe_gte` | string | no | Minimum CPE, calculated as spend divided by valid engagements |
| `cpe_lt` | string | no | Maximum CPE, calculated as spend divided by valid engagements |
| `cpe_traffic_type` | string | no | CPE traffic scope: 1=all traffic, 2=organic traffic |
| `cpm_cycle` | string | no | CPM window: 1=7 days, 2=15 days, 3=30 days |
| `cpm_type` | string | no | CPM traffic scope: 1=all traffic, 2=organic traffic |
| `custom_video_pricing_set` | string | no | Whether custom-video pricing has been configured |
| `dmp_group_id` | string | no | DMP custom audience-package ID |
| `dmp_pkg_effect_rate_gte` | string | no | Minimum DMP influence: recent matching viewers divided by the audience population |
| `dmp_pkg_effect_rate_lte` | string | no | Maximum DMP influence: recent matching viewers divided by the audience population |
| `dmp_pkg_fan_rate_gte` | string | no | Minimum DMP attention: matching audience members divided by all followers |
| `dmp_pkg_fan_rate_lte` | string | no | Maximum DMP attention: matching audience members divided by all followers |
| `dmp_pkg_name` | string | no | DMP special-audience package name query |
| `dmp_pkg_vertical_rate_gte` | string | no | Minimum DMP verticality: matching videos divided by all videos |
| `dmp_pkg_vertical_rate_lte` | string | no | Maximum DMP verticality: matching videos divided by all videos |
| `draft_duration` | string | no | Dominant video duration bucket from under 30 seconds to over 10 minutes |
| `entry_cost_max` | string | no | Maximum store-entry cost for relevant cooperation in the last year |
| `entry_cost_min` | string | no | Minimum store-entry cost for relevant cooperation in the last year |
| `fans_age_tag` | string | no | Audience age-affinity tags from square_static_info |
| `fans_gender_tag` | string | no | Audience gender-affinity tags from square_static_info |
| `fans_region_tag` | string | no | Audience region-affinity tags from square_static_info |
| `fans_stick` | string | no | Follower-loyalty filter; 0=all, otherwise use a static-option value |
| `folder_id` | string | no | Saved-creator folder ID used to limit the search |
| `gender` | string | no | Creator gender; use values from square_static_info.gender_info |
| `goods_avg_price_max` | string | no | Maximum average product price in the last 30 days, in RMB |
| `goods_avg_price_min` | string | no | Minimum average product price in the last 30 days, in RMB |
| `goods_category_first_ids` | string | no | Primary commerce-category IDs |
| `goods_ctr_max` | string | no | Maximum commerce-component CTR, clicks divided by impressions |
| `goods_ctr_min` | string | no | Minimum commerce-component CTR, clicks divided by impressions |
| `goods_ctr_type` | string | no | Commerce CTR component scope: 1=all components, 2=comment component |
| `goods_gpm_max` | string | no | Maximum 30-day GPM, paid GMV per 1,000 commerce-video views |
| `goods_gpm_min` | string | no | Minimum 30-day GPM, paid GMV per 1,000 commerce-video views |
| `goods_permission` | string | no | Commerce permission filter: 1=required, 0=all |
| `goods_up_levels` | string | no | Commerce-creator level values |
| `half_max_hot_avid_cnt` | string | no | Maximum viral-video count in the last six months |
| `half_min_hot_avid_cnt` | string | no | Minimum viral-video count in the last six months |
| `high_potential_type` | string | no | High-potential type: 0=all, 1=onboarded, 2=not onboarded |
| `is_boosting` | string | no | Boosting-status filter: 1=currently boosting, 0=all |
| `is_new_enter` | string | no | Whether to filter for newly onboarded creators |
| `is_painter_order` | string | no | Whether to require illustration-commission capability |
| `is_timely_response` | string | no | Whether to require timely-response creators |
| `is_treasure_up` | string | no | Whether to filter for treasure creators |
| `is_x_plan_better_up` | string | no | Whether to filter for X Plan preferred creators |
| `label_array` | string | no | Dynamic label-tree paths using labels and values returned by upper_label_tree |
| `last_14_days_set_price` | string | no | Quote-updated-in-14-days filter: 1=yes, 0=all |
| `last_30_days_set_price` | string | no | Quote-updated-in-30-days filter: 1=yes, 0=all |
| `last_7_days_set_price` | string | no | Quote-updated-in-7-days filter: 1=yes, 0=all |
| `main_search` | string | no | Content-keyword query; matched videos are included in the result |
| `marketing_target` | string | no | Marketing objective: 1=brand awareness, 2=consideration, 3=conversion |
| `max_avid_cnt` | string | no | Maximum eligible original-video count in the last 90 days |
| `max_cpc` | string | no | Maximum CPC, calculated as spend divided by component clicks |
| `max_cpm` | string | no | Maximum CPM, calculated as spend divided by views times 1,000 |
| `max_fans_num` | string | no | Maximum follower count, inclusive |
| `max_hot_avid_rate` | string | no | Maximum viral-video ratio in the last 90 days |
| `max_interact_rate` | string | no | Maximum engagement rate for eligible original videos in the last 180 days |
| `max_play_median` | string | no | Maximum median views for eligible original videos published at least seven days ago |
| `max_task_price` | string | no | Maximum standard cooperation quote in RMB |
| `mcn_ids` | string | no | MCN organization IDs from mcn_drop |
| `mids` | string | no | List of creator UIDs to match exactly |
| `min_avid_cnt` | string | no | Minimum eligible original-video count in the last 90 days |
| `min_cpc` | string | no | Minimum CPC, calculated as spend divided by component clicks |
| `min_cpm` | string | no | Minimum CPM, calculated as spend divided by views times 1,000 |
| `min_fans_num` | string | no | Minimum follower count, inclusive |
| `min_hot_avid_rate` | string | no | Minimum viral-video ratio in the last 90 days |
| `min_interact_rate` | string | no | Minimum engagement rate for eligible original videos in the last 180 days |
| `min_play_median` | string | no | Minimum median views for eligible original videos published at least seven days ago |
| `min_task_price` | string | no | Minimum standard cooperation quote in RMB |
| `nickname_or_mids` | string | no | Creator nickname or UID query; separate multiple terms with commas |
| `only_contract` | string | no | Contract-eligible filter: 1=only eligible creators, 0=all |
| `order_by` | string | no | Sort field, such as fans_num, play_median, or interactive_rate |
| `page` | string | no | One-based page number; each page returns 20 records |
| `panel_type` | string | no | Strategy panel: 0=general, 1=gaming, 2=beauty, 3=digital, 4=automotive, 5=performance, 6=food, 8=internet |
| `partition_id` | string | no | Primary content-category ID from partition_drop |
| `play_median_cycle` | string | no | Median-view window: 1=7 days, 2=15 days, 3=30 days |
| `play_median_traffic_type` | string | no | Median-view traffic scope: 1=all traffic, 2=organic traffic |
| `price_info` | string | no | Pricing rules by cooperation type with quote bounds and creative options |
| `provider_id` | string | no | Service-provider IDs using values offered by the Huahuo filter |
| `region_id` | string | no | Primary residence-region IDs from region_drop |
| `request_id` | string | no | Search-session ID; reuse it across pages of the same filter set |
| `second_partition_id` | string | no | Secondary content-category IDs from partition_drop |
| `second_region_id` | string | no | Secondary residence-region IDs from region_drop |
| `sort` | string | no | Sort direction: desc=descending, asc=ascending |
| `spark_tag` | string | no | Huahuo capability tags such as cooperate, grow, or hot_frequent |
| `special_tags` | string | no | Feature-tag values from square_static_info |
| `square_tag_in` | string | no | Marketplace scenario tags such as ad_partner_experienced |
| `upper_mid` | string | no | Single creator UID for an exact match |
| `upper_types` | string | no | Creator type: 1 or 4=MCN-affiliated, 3=independent |
| `goods_category_second_ids` | string | no | Secondary commerce-category IDs |
| `huahuo_first_industry_ids` | string | no | Huahuo primary-industry IDs from square_static_info |
| `huahuo_third_industry_ids` | string | no | Huahuo tertiary-industry IDs from square_static_info |
| `huahuo_second_industry_ids` | string | no | Huahuo secondary-industry IDs from square_static_info |
| `goods_is_high_fans_play_permeate` | string | no | High follower-view penetration filter |
| `cooperate_experience_industry_ids` | string | no | Industry IDs used for cooperation-experience filtering |
| `goods_is_high_video_play_permeate` | string | no | High video-view penetration filter, top 20% by recent viewers per follower |

## Output

The run's `result` holds the provider's answer. Signed in, `looot inspect tikhub-api-bilibili-huahuo-search-upper` prints its fields.

## Run it

Every call needs your API token in `LOOOT_TOKEN`; [Sign in](/get-started/sign-in#use-the-token-in-scripts-and-agents) shows how to get one. Each run also needs a new idempotency key, so a retry never pays twice. With `wait: 30` the answer comes back inline when the run ends within 30 seconds. Otherwise you get the running run back: poll `GET /v1/runs/<runId>`.

Example input with placeholder values:

<CodeGroup>

```bash curl
curl -X POST "https://api.looot.ai/v1/runs" \
  -H "Authorization: Bearer $LOOOT_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"endpointId":"tikhub-api-bilibili-huahuo-search-upper","input":{"mids":"<mids>"},"wait":30}'
```

```js JavaScript
const response = await fetch("https://api.looot.ai/v1/runs", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LOOOT_TOKEN}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
    endpointId: "tikhub-api-bilibili-huahuo-search-upper",
    input: {
      mids: "<mids>",
    },
    wait: 30,
  }),
});
const run = await response.json();
console.log(run.status, run.result);
```

```python Python
import os
import uuid

import requests

response = requests.post(
    "https://api.looot.ai/v1/runs",
    headers={
        "Authorization": f"Bearer {os.environ['LOOOT_TOKEN']}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "endpointId": "tikhub-api-bilibili-huahuo-search-upper",
        "input": {
            "mids": "<mids>",
        },
        "wait": 30,
    },
    timeout=90,
)
run = response.json()
print(run["status"], run.get("result"))
```

</CodeGroup>

To let looot pick among every provider of this job instead, send `job:api.bilibili.huahuo.search-upper` as `endpointId`; see [the job page](/reference/jobs/api-bilibili-huahuo-search-upper).
