使用LinkedIn API创建广告失败:CREATIVE_CREATE_FORBIDDEN错误排查
操作流程回顾
1. 图片上传(成功)
BASE_API_URL = "https://api.linkedin.com/rest" headers.Add("LinkedIn-Version", "202502"); headers.Add("X-Restli-Protocol-Version", "2.0.0");
var uploadUrl = $"{BASE_API_URL}/images?action=initializeUpload"; var request = new { initializeUploadRequest = new { //owner = $"urn:li:sponsoredAccount:{accountId}" owner = $"urn:... {organizationId}" } };
已尝试将图片所有者设为组织或广告账户,成功获取imageId。
2. 创建帖子(成功)
var postUrl = $"{BASE_API_URL}/posts"; var request = new { adContext = new { dscAdAccount = $"urn:li:sponsoredAccount:{accountId}", dscStatus = "ACTIVE", dscName = ad.externalAdName }, author = {organizationId}, commentary = "Commentery goes here", visibility = "PUBLIC", distribution = new { feedDistribution = "NONE", thirdPartyDistributionChannels = new object[] { } }, content = new { //Also tried this - didn't work //media = new //{ // title = "Title of the Image", // id = $"urn:li:image:{imageId}" //} article = new { title = ad.externalAdName, thumbnail = $"urn:li:image:{imageId}", source = ad.landingPage } }, contentCallToActionLabel = ad.externalAdCTA, contentLandingPage = ad.landingPage, lifecycleState = "PUBLISHED", isReshareDisabledByAuthor = true };
成功获取postId。
3. 创建广告创意(失败)
var createCreativeUrl = $"{BASE_API_URL}/adAccounts/{asset.extId}/creatives"; var newCreative = new { campaign = $"urn:li:sponsoredCampaign:{campaignId}", intendedStatus = "PAUSED", name = ad.externalAdName, content = new { reference = postId } };
错误响应:
{"code":"CREATIVE_CREATE_FORBIDDEN","message":"Not permitted to create the creative. Please check your permissions and that account and campaign details are correct.","status":403}
已确认:自身为账单管理员(测试用自有账户),token拥有ads_rw等权限。
可能的遗漏点排查
广告账户与组织的关联权限
确认创建帖子的组织ID与广告账户(asset.extId)属于同一企业实体,且广告账户已获得该组织的内容使用授权。图片上传的所有者若为组织,需确保广告账户有权访问该组织的媒体资源。帖子
adContext与创意广告账户一致性
检查帖子adContext.dscAdAccount中的广告账户ID,是否与创建创意时使用的adAccounts/{asset.extId}完全一致。跨账户关联会触发权限校验失败。content.reference的URN格式正确性postId需传入完整的URN格式(如urn:li:post:{postId}),而非单纯的ID字符串。格式错误会导致LinkedIn无法识别帖子归属,进而拒绝创意创建。账户角色的权限范围
账单管理员角色默认不包含广告创意创建权限,需确认你的账户在目标广告账户中是否拥有广告创作者或广告账户管理员角色——即使token有ads_rw权限,账户角色的细分限制依然生效。广告活动与账户的归属关系
验证campaignId对应的广告活动是否属于当前操作的广告账户(asset.extId),跨账户关联创意会返回403。同时确认活动类型与帖子内容类型兼容(如文章类帖子匹配对应的广告活动目标)。
内容的提问来源于stack exchange,提问作者Ziv Weissman

