Edit Campaign goes to a 404 page


I created a campaign via the twitter ads api (through our app), and the campaign seems to have been created successfully.
When I visit the campaign within Twitter, I can see that it was created successfully although it is in the paused state. The issue is I cannot edit it. If I attempt to edit the campaign, via the Twitter Ads UI not our own app, I am taken to a ‘page doesn’t exist’ message.

We are currently using the Ruby client to communicate with the Ads API and here is a snippet of the code we are using.

object = TwitterAds::Campaign.new(self.ad_account.twitter_object)
object.funding_instrument_id = self.funding_instrument_id
object.daily_budget_amount_local_micro = (self.daily_budget_cents * 1e4).to_i
object.total_budget_amount_local_micro = self.total_budget_cents ? (self.total_budget_cents * 1e4).to_i : nil
object.name = self.name
object.paused = true

Any help would be much appreciated


@OmidRezaS: Could you please provide the account, campaign, and line item IDs that this is happening with. We’ll be able to look at the campaign(s) from the API side, but, if this is Twitter Ads UI specific, you’ll need to go through that support channel—by clicking “Help?” on the top right of the page.


here are the details
the account id: 18ce53xbgo3
the campaign: 11228051
I don’t believe I have a line item id. where would i find that?


@OmidRezaS: Thanks for the additional information.

The reason this is happening is that there isn’t a line item associated with this campaign yet. The line item is where you specify the campaign’s objective and an objective is needed so that you see the proper campaign form in the Twitter Ads UI. Since there’s no objective, there’s nothing for the UI to show yet. For more details, you can see the example requests, below.

First, we can take a look at the campaign in question. (Note: in the API, we use the base36 representation for IDs, which is why we use 6onmb and not 11228051.)

$ twurl -H ads-api.twitter.com "/1/accounts/18ce53xbgo3/campaigns/6onmb" | jq
  "request": {
    "params": {
      "campaign_id": "6onmb",
      "account_id": "18ce53xbgo3"
  "data_type": "campaign",
  "data": {
    "name": "TestCampaign",
    "start_time": "2016-12-05T21:35:00Z",
    "reasons_not_servable": [
    "servable": false,
    "daily_budget_amount_local_micro": 1000000,
    "end_time": "2016-12-06T21:35:00Z",
    "funding_instrument_id": "kqh5q",
    "duration_in_days": null,
    "standard_delivery": true,
    "total_budget_amount_local_micro": 2000000,
    "id": "6onmb",
    "entity_status": "PAUSED",
    "paused": true,
    "account_id": "18ce53xbgo3",
    "frequency_cap": null,
    "currency": "USD",
    "created_at": "2016-12-05T21:41:45Z",
    "updated_at": "2016-12-05T21:41:45Z",
    "deleted": false

Note that reasons_not_servable shows INCOMPLETE.

Next, we can look for line items associated with particular campaign IDs by making the following request.

$ twurl -H ads-api.twitter.com "/1/accounts/18ce53xbgo3/line_items?campaign_ids=6onmb" | jq
  "request": {
    "params": {
      "account_id": "18ce53xbgo3",
      "campaign_ids": [
  "data": [],
  "data_type": "line_item",
  "total_count": 0,
  "next_cursor": null

You can create a line item by using the POST accounts/:account_id/line_items endpoint.