Zernio
APIFor you
Zernio
APIFor you
Platforms

Reddit Ads

Overview

Build

Create an AdPromote a Post

Target

Targeting

Measure

Analytics & Conversions

Operate

Manage Ads

Reference

Limits & Errors
Dashboard
OverviewPlatformsAPI ReferenceResources
Reddit Ads

Create an Ad

Create a Reddit image, video, carousel or text ad, with its goal, pixel, budget and schedule.


POST /v1/ads/create creates the post, the campaign, the ad group and the ad in one call.

The shape of the creative picks the format: carouselCards makes a carousel, video a video ad, imageUrl an image ad, and none of them a text ad.

Create an ad

import Zernio from '@zernio/node';

const zernio = new Zernio();

const { data: created } = await zernio.adcampaigns.createStandaloneAd({
  body: {
    accountId: '66b2e19d8c3f5a7e9d0b1c2d',
    adAccountId: 'a2_gu5tcd9ah5se',
    name: 'Planner launch',
    goal: 'traffic',
    budgetAmount: 50,
    budgetType: 'daily',
    headline: 'The planner your whole team will actually open',
    body: 'Tasks, docs and meetings in one place. Free for teams of 5.',
    imageUrl: 'https://cdn.example.com/planner.png',
    linkUrl: 'https://example.com/planner',
    callToAction: 'SIGN_UP',
    countries: ['US', 'CA'],
    targeting: {
      communities: ['productivity', 'r/projectmanagement'],
      conversationKeywords: ['task manager']
    }
  }
});

console.log(created.ad.id);

Response (201):

{
  "ad": {
    "id": "66f0a1b2c3d4e5f6a7b8c9d0",
    "name": "Planner launch",
    "platform": "reddit",
    "status": "pending_review",
    "adType": "standalone",
    "goal": "traffic",
    "budget": { "amount": 50, "type": "daily" },
    "platformAdId": "2160485120873925373",
    "platformCampaignId": "2160485120262584829",
    "platformAdSetId": "2160485120597863293",
    "platformAdAccountId": "a2_gu5tcd9ah5se"
  },
  "message": "Ad created and submitted for review"
}

budgetAmount is in whole units of the ad account's currency, so 50 is $50.00 on a USD account. platformAdSetId is the Reddit ad group.

Campaign and ad group names default to <name> - Campaign and <name> - Ad Group; send campaignName and adSetName to set them.

Every sample on the Reddit Ads pages reuses the zernio and client constructors from this one. The accountId is the redditads account from Connect.

If Reddit rejects a later step, Zernio archives the campaign and ad group it already created, so a failed create does not leave an empty campaign behind.

Formats

FormatSendNotes
Imageheadline, imageUrl, linkUrl, optional body and callToAction
Videoheadline, video.url, video.thumbnailUrl (or imageUrl as the thumbnail), linkUrl, optional body and callToActionvideo.id is not accepted: send a URL
Carouselheadline, carouselCards (2 to 10), optional bodyEach card takes imageUrl, linkUrl (falls back to the top-level linkUrl), callToAction and a caption from its headline or description
Textheadline and body onlyA text ad cannot link out: linkUrl returns 400. callToAction does not apply
Existing postPOST /v1/ads/boostPromote an existing post

headline is required on every format and takes up to 300 characters; a longer one returns 400.

Zernio publishes the creative as a post from the ad account's profile, with comments open, and the ad promotes that post.

Call to action

callToAction takes one of:

  • LEARN_MORE, SHOP_NOW, SIGN_UP, CONTACT_US, DOWNLOAD, GET_QUOTE
  • SUBSCRIBE, APPLY_NOW, BOOK_NOW, BUY_TICKETS, DONATE_NOW
  • GET_DIRECTIONS, GET_SHOWTIMES, LISTEN_NOW, ORDER_NOW, SEE_MENU
  • INSTALL_MOBILE_APP (shown as "Install")

Any other value returns 400 listing these. Omit it to leave the button off.

Goals

goalReddit objectiveDeliveryRequires
trafficClicksBilled per click
awarenessBrand awarenessBilled per thousand impressions
video_viewsVideo viewsBilled per 6-second view (optimizationGoal: "VIDEO_VIEW_6S", the default) or 15-second view (VIDEO_VIEW_15S)A video creative; anything else returns 422
conversionsConversionsOptimizes toward one pixel eventpromotedObject.customEventType, and a pixel that has received that event
lead_generationLead generationSends people to linkUrl and optimizes toward the pixel's LEAD eventA pixel that has received LEAD

Any other goal returns 422 listing these 5. conversions and lead_generation ad groups use Reddit's 7-day click, 1-day view attribution window.

Pixel

Every Reddit ad group carries a pixel. Zernio uses the pixel you name in promotedObject.pixelId (or tracking.pixelId), and otherwise the ad account's first pixel.

A pixel id that is not a pixel of adAccountId returns 400 with param: "promotedObject.pixelId". List an ad account's pixels with List conversion destinations.

On conversions, promotedObject.customEventType picks the event the campaign optimizes toward (case-insensitive):

customEventTypeReddit optimization goal
PURCHASEPurchase
LEADLead
SIGN_UP, COMPLETE_REGISTRATIONSign up
ADD_TO_CARTAdd to cart
PAGE_VISIT, VIEW_CONTENT, CONTENT_VIEWPage visit

Omitting it returns 400 with code missing_required_field.

{
  "goal": "conversions",
  "promotedObject": { "pixelId": "a2_gu5tcd9ah5se", "customEventType": "PURCHASE" }
}

Reddit only optimizes toward an event the pixel has already received. Before a conversions or lead_generation create, Zernio reads the pixel's last-fired times.

If the pixel never received the event, the request returns 422 with code invalid_resource_state. Fire the event from your site, or send it once through the Conversions API, then retry.

Budget, schedule and bidding

The budget sits on the ad group:

  • budgetType: "daily" spends up to budgetAmount a day.
  • budgetType: "lifetime" spends it over the whole flight and needs endDate, otherwise the request returns 400 with param: "endDate".

startDate defaults to now. A startDate or endDate without a time zone offset is read in the ad account's time zone, and a date-only endDate runs to 23:59:59 that day. Send an offset (2027-01-04T09:00:00Z) to pin an exact instant.

New ad groups always bid automatically. To set a manual bid or a cost cap, update the ad group after creation (Manage ads).

status: "PAUSED" creates everything paused so you can review it before it spends; campaignStatus overrides the switch for the campaign alone. Omitted, the ad goes live after Reddit's review.

Related

  • Create standalone ad: every field of the request.
  • Targeting: the targeting fields this request takes.
Was this page helpful?

Reddit Ads

Create image, video, carousel and text ads, promote existing Reddit posts, target subreddits and conversation keywords, and send Conversions API events on a redditads account.

Promote a Post

Promote a Reddit post that already exists as an ad, keeping its votes and comments.

On this page

Create an adFormatsCall to actionGoalsPixelBudget, schedule and biddingRelated