volume_weighted_growth is a field on multi-source get_growth, not a separate mode. Send a comma-separated source list. After the second parse, read the object next to source_results. It is a weighted average of growth percents, using recent_volume as the weight. Sources with only a 0-100 score do not move the number. How to form that list is on compare sources. The HTTP call is POST https://api.trendsapi.ai/api.
The object only appears on multi-source
A single-source body has results and no blend. The blend is computed from sources that returned status success and a volume-bearing row. The handler uses the first volume-bearing window per source so a ["3M","12M"] list does not count the same platform twice.
POST https://api.trendsapi.ai/api
Authorization: Bearer <api_key>
Content-Type: application/json
{"mode":"get_growth","source":"google search, tiktok, youtube","keyword":"air fryer","percent_growth":["12M"]}
How the weight is built
Each included source contributes recent_volume / total_volume * growth. Sum those contributions. Round to two decimals.
A 27 Aug 2026 pull for air fryer returned:
| Field | Value |
|---|---|
has_volume_data |
true |
volume_weighted_growth |
16.67 |
sources_with_volume |
1 |
weight_coverage |
1/3 sources |
total_volume |
4450000 |
volume_details listed only google search. That source had volume_available true, volume_estimated true, and volume_growth_omitted_reason stating volume is derived from the trend value, not an independent measurement. youtube had 36.36 percent score growth and no volume fields, so it did not enter the weight. tiktok missed 12M (date_out_of_range) and added no volume.
When the number is null
If no source has a positive recent_volume, has_volume_data is false and volume_weighted_growth is null. That is not a zero move. Read source_results for the per-platform percents. Null volume versus a 0-100 value is explained on volume versus score.
Do not average 0-100 scores by this field. Caps stay on pricing.