调用Spotify Ads API获报表遇Could not deserialize ReportingRequest错误
排查Spotify Ads API报表请求反序列化错误
问题概述
调用Spotify Ads API获取报表数据时,持续收到Could not deserialize ReportingRequest解析错误,请求头可正常用于其他API端点(如获取推广活动数据),改用curl调用仍报错,推测问题出在请求体格式或字段内容上。
Python请求代码
reports = requests.post('https://api-partner.spotify.com/ads/v1.3/adAccounts/8a578aa1-e36d-42da-8110-52914f99f907/report', headers=headers, data=data)
错误响应
{"error":{"type":"ParsingError","message":"Request is invalid","errors":["Could not deserialize ReportingRequest"],"sp_trace_id":"89e3b470-6bdd-4e03-8903-d4e814e71164"}}
当前请求体内容
data = { "filters": { "campaign_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "ad_set_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "ad_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "advertiser_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "country_isos": [ "string" ], "region_ids": [ 0 ], "dma_ids": [ 0 ], "platforms": "IOS", "campaign_statuses": "ACTIVE", "ad_set_statuses": "ACTIVE", "ad_set_start_dates": [ "2019-08-24T14:15:22Z" ], "ad_set_end_dates": [ "2019-08-24T14:15:22Z" ], "cost_type_filters": "CPCL", "report_datetime_range": { "report_start": "2019-08-24T14:15:22Z", "report_end": "2019-08-24T14:15:22Z" } }, "dimensions": "CAMPAIGN", "fields": "CLICKS", "organization_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "ad_account_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "continuation_token": "string", "page_size": 0 }
curl请求命令
curl --request POST \ --url https://api-partner.spotify.com/ads/v1.3/report \ --header 'Authorization: ' \ --header 'Content-Type: application/json' \ --data '{ "filters": { "campaign_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "ad_set_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "ad_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "advertiser_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "country_isos": [ "string" ], "region_ids": [ 0 ], "dma_ids": [ 0 ], "platforms": "IOS", "campaign_statuses": "ACTIVE", "ad_set_statuses": "ACTIVE", "ad_set_start_dates": [ "2019-08-24T14:15:22Z" ], "ad_set_end_dates": [ "2019-08-24T14:15:22Z" ], "cost_type_filters": "CPCL", "report_datetime_range": { "report_start": "2019-08-24T14:15:22Z", "report_end": "2019-08-24T14:15:22Z" } }, "dimensions": "CAMPAIGN", "fields": "CLICKS", "organization_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "ad_account_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "continuation_token": "string", "page_size": 0 }'
错误原因分析及解决方法
1. 字段类型不匹配
根据Spotify Ads API规范,以下字段应为数组类型,当前传入单个字符串导致反序列化失败:
platforms:改为数组格式,如["IOS"]campaign_statuses:改为数组格式,如["ACTIVE"]ad_set_statuses:改为数组格式,如["ACTIVE"]cost_type_filters:改为数组格式,如["CPCL"]
2. 无效占位值与非法参数
country_isos:占位符"string"无效,替换为真实ISO国家代码(如["US"]),无需过滤可直接删除该字段region_ids/dma_ids:0不是有效ID,无需过滤可删除这些字段,或替换为真实区域IDcontinuation_token:无续传需求时删除该字段,或传入null,不要用占位符"string"page_size:值为0不符合API要求,设置为正整数(如100)
3. Python请求参数错误
Python代码中使用data=data会默认以application/x-www-form-urlencoded格式发送请求,API要求application/json格式,需改为json=data,让requests自动处理JSON序列化和Content-Type头:
reports = requests.post('https://api-partner.spotify.com/ads/v1.3/adAccounts/8a578aa1-e36d-42da-8110-52914f99f907/report', headers=headers, json=data)
4. 冗余字段冲突
在adAccounts/{id}/report端点中,URL已指定广告账户ID,请求体中的ad_account_ids字段可删除避免冲突;organization_ids若不是必填字段也可删除,或确认其为有效组织ID。
修正后的请求体示例
data = { "filters": { "campaign_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "platforms": ["IOS"], "campaign_statuses": ["ACTIVE"], "ad_set_statuses": ["ACTIVE"], "cost_type_filters": ["CPCL"], "report_datetime_range": { "report_start": "2019-08-24T14:15:22Z", "report_end": "2019-08-24T14:15:22Z" } }, "dimensions": "CAMPAIGN", "fields": "CLICKS", "page_size": 100 }
内容的提问来源于stack exchange,提问作者pskt
相关产品推荐
相关产品推荐

