### Get Daily Budget Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/11-types-and-enums.md Example of retrieving a campaign's daily budget and converting it from cents to dollars. ```java // Getting budget String budgetCents = campaign.getFieldDailyBudget(); // "5000" double budgetDollars = Long.parseLong(budgetCents) / 100.0; ``` -------------------------------- ### Complete Example: SDK Operations Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/09-quick-start.md A comprehensive example demonstrating initialization, campaign creation, ad set creation, listing campaigns, and updating a campaign. Includes optional debug logging. ```java import com.facebook.ads.sdk.*; public class CompleteExample { public static void main(String[] args) { try { // Setup String accessToken = "your_token"; String appSecret = "your_secret"; String accountId = "your_account_id"; APIContext context = new APIContext(accessToken, appSecret); context.enableDebug(true); // Optional: enable logging AdAccount account = new AdAccount(accountId, context); // Create campaign System.out.println("=== Creating Campaign ==="); Campaign campaign = account.createCampaign() .setName("My Campaign") .setObjective(Campaign.EnumObjective.VALUE_LINK_CLICKS) .setStatus(Campaign.EnumStatus.VALUE_PAUSED) .setDailyBudget(5000L) // $50/day .execute(); System.out.println("Campaign ID: " + campaign.getId()); System.out.println("Campaign Name: " + campaign.getFieldName()); // Create ad set System.out.println("\n=== Creating Ad Set ==="); AdSet adSet = account.createAdSet() .setCampaignId(campaign.getId()) .setName("My Ad Set") .setStatus(AdSet.EnumStatus.VALUE_PAUSED) .setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_LINK_CLICKS) .setBillingEvent(AdSet.EnumBillingEvent.VALUE_LINK_CLICKS) .setDailyBudget(2500L) // $25/day .execute(); System.out.println("Ad Set ID: " + adSet.getId()); // List all campaigns System.out.println("\n=== All Campaigns ==="); APINodeList campaigns = account.getCampaigns() .requestIdField() .requestNameField() .requestStatusField() .execute(); for (Campaign c : campaigns) { System.out.println(c.getId() + ": " + c.getFieldName() + " (" + c.getFieldStatus() + ")"); } // Update campaign System.out.println("\n=== Updating Campaign ==="); campaign.update() .setName("Updated Campaign Name") .execute(); System.out.println("Campaign updated"); } catch(APIException e) { System.err.println("Error: " + e.getMessage()); e.printStackTrace(); } } } ``` -------------------------------- ### Get Campaign Start Time Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves the campaign's start time in ISO 8601 format. ```java public String getFieldStartTime() ``` ```java String startTime = "2025-01-15T00:00:00+0000"; ``` -------------------------------- ### Set Daily Budget Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/11-types-and-enums.md Example of setting a daily budget for a campaign in cents. ```java // Setting daily budget of $50 campaign.update().setDailyBudget(5000L).execute(); ``` -------------------------------- ### Campaign Subclass Example Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/03-api-node.md Demonstrates the pattern for subclassing APINode, using Campaign as an example. It includes field serialization, constructors, getters, static fetch methods, CRUD operations, and edge navigation. ```java public class Campaign extends APINode { @SerializedName("name") private String mName = null; @SerializedName("id") private String mId = null; // Constructor public Campaign(String id, APIContext context) { this.mId = id; this.context = context; } // Field getters public String getFieldName() { return mName; } public String getFieldId() { return mId; } // Static fetch methods public static Campaign fetchById(String id, APIContext context) throws APIException { return new APIRequestGet(id, context) .requestAllFields() .execute(); } // CRUD operations public APIRequestGet get() { return new APIRequestGet(this.getPrefixedId(), context); } public APIRequestUpdate update() { return new APIRequestUpdate(this.getPrefixedId(), context); } public APIRequestDelete delete() { return new APIRequestDelete(this.getPrefixedId(), context); } // Edge navigation public APINodeList getAds() { return getAds(false); } public APINodeList getAds(boolean asUser) { return new APIRequestGetAds(this.getPrefixedId(), context) .setAsUser(asUser) .execute(); } } ``` -------------------------------- ### getFieldStartTime() Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves the scheduled start time for the campaign in ISO 8601 format. ```APIDOC ## getFieldStartTime() ### Description Retrieves the start time of the campaign. ### Returns `String` - Campaign start time (ISO 8601 format). ``` -------------------------------- ### Set Campaign Start Time Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Sets the campaign start time using the update() method. The time must be in ISO 8601 format. ```java public APIRequestUpdate setStartTime(String startTime) ``` -------------------------------- ### Initialize APIContext Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/README.md Required setup for all API calls using the access token and app secret. ```java APIContext context = new APIContext(ACCESS_TOKEN, APP_SECRET); ``` -------------------------------- ### Simple GET Request Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/02-api-request.md Executes a simple GET request to retrieve a list of campaigns, specifying the fields to include in the response. ```java APIRequest request = new APIRequest<>( context, "123456789", "/campaigns", "GET", Campaign.getParser() ); APINodeList campaigns = (APINodeList) request.requestField("id") .requestField("name") .execute(); ``` -------------------------------- ### get() Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Initiates a request to fetch campaign data. Allows for specifying which fields to retrieve. ```APIDOC ## get() ### Description Fetches campaign data with optional field selection. ### Methods - `requestAllFields()` - Request all available fields for the campaign. - `requestXxxField()` - Request specific fields (e.g., `requestIdField()`, `requestNameField()`). - `execute()` - Executes the GET request and returns the campaign data. ``` -------------------------------- ### Create Resource with Hierarchy Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/index.md Demonstrates creating resources with a hierarchical relationship. This example shows creating a Campaign, then an AdSet linked to that Campaign, and finally an Ad linked to the AdSet. Each creation returns the created resource. ```java Campaign c = account.createCampaign().setName("...").execute(); AdSet as = account.createAdSet().setCampaignId(c.getId()).execute(); Ad ad = account.createAd().setAdsetId(as.getId()).execute(); ``` -------------------------------- ### List Resources with Auto-Pagination Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/index.md This example illustrates how to list resources (e.g., campaigns) associated with an ad account and automatically paginate through all results. It requests all fields and iterates over the results, printing the field name of each campaign. ```java account.getCampaigns() .requestAllFields() .execute() .withAutoPaginationIterator(true) .forEach(c -> System.out.println(c.getFieldName())); ``` -------------------------------- ### Create Campaign GET Request Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Generates a GET request builder for the current Campaign instance, allowing for specific field selection before execution. ```java public APIRequestGet get() ``` ```java Campaign campaign = new Campaign("123456789", context); campaign.get() .requestIdField() .requestNameField() .requestStatusField() .execute(); ``` -------------------------------- ### setStartTime(String startTime) Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Sets the start time for the campaign using an ISO 8601 formatted string. This method is used as part of the update operation. ```APIDOC ## setStartTime(String startTime) ### Description Sets the start time for the campaign for an update operation. ### Parameters - **startTime** (String) - Required - The campaign start time in ISO 8601 format (e.g., "2025-01-15T00:00:00"). ``` -------------------------------- ### Create Campaign with String ID Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/11-types-and-enums.md Example of creating a Campaign object using a string representation of the campaign ID. ```java String campaignId = "123456789"; Campaign campaign = new Campaign(campaignId, context); ``` -------------------------------- ### Get Campaign Daily Budget Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves the daily budget for a campaign in cents as a string. ```java public String getFieldDailyBudget() ``` ```java String daily = campaign.getFieldDailyBudget(); // "100000" = $1000 ``` -------------------------------- ### Construct Example API URL Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/02-api-request.md Illustrates the structure of a Facebook Graph API URL, including nodeId, endpoint, and query parameters like fields and access token. ```text https://graph.facebook.com/v25.0/{nodeId}{endpoint}?{queryParams} ``` ```text https://graph.facebook.com/v25.0/123456789/campaigns?fields=id,name,status&access_token=... ``` -------------------------------- ### Update Campaign Objective Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/11-types-and-enums.md Example of setting a campaign's objective to link clicks. ```java campaign.update() .setObjective(Campaign.EnumObjective.VALUE_OUTCOME_LINK_CLICKS) .execute(); ``` -------------------------------- ### Error Recovery with APIException Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/index.md This example demonstrates how to implement error recovery using a try-catch block to handle potential API exceptions. It attempts to fetch a campaign by ID and logs an error message if the fetch operation fails, re-throwing the exception. ```java try { return Campaign.fetchById(id, context); } catch(APIException e) { logger.error("Fetch failed: " + e.getMessage()); throw e; } ``` -------------------------------- ### Example: Custom Campaign Parser Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/10-advanced-topics.md Implement a custom parser for Campaign objects, handling both JSON object and array responses. This allows for specific logic when the SDK's default parsing is insufficient. ```java public class CustomCampaignParser implements ResponseParser { @Override public Campaign parseResponse(String response, APIContext context, APIRequest request, String header) throws MalformedResponseException { // Custom parsing logic JsonParser parser = new JsonParser(); JsonElement element = parser.parse(response); if (element.isJsonObject()) { JsonObject obj = element.getAsJsonObject(); // Your custom logic here if (obj.has("data")) { obj = obj.get("data").getAsJsonObject(); } Campaign campaign = Campaign.loadJSON(obj.toString(), context, header); return campaign; } else if (element.isJsonArray()) { // Handle array response APINodeList list = new APINodeList<>(request, response, header); JsonArray arr = element.getAsJsonArray(); for (int i = 0; i < arr.size(); i++) { Campaign c = Campaign.loadJSON(arr.get(i).toString(), context, header); list.add(c); } return (Campaign) list; } throw new MalformedResponseException("Unexpected response format"); } } // Use APIRequest request = new APIRequest<>( context, campaignId, "/", "GET", new CustomCampaignParser() ); Campaign campaign = (Campaign) request.execute(); ``` -------------------------------- ### Campaign Instance Methods Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Provides instance methods to refresh a campaign's data, and to create API request builders for GET, UPDATE, and DELETE operations. ```APIDOC ## Instance Methods ### fetch() ```java public Campaign fetch() throws APIException ``` Refreshes this campaign with all fields from the API. **Returns:** `Campaign` - This instance (updated) **Throws:** `APIException` - If fetch fails **Example:** ```java Campaign campaign = new Campaign("123456789", context); campaign.fetch(); String name = campaign.getFieldName(); ``` ### get() ```java public APIRequestGet get() ``` Creates a GET request for this campaign. **Returns:** `APIRequestGet` - Request builder **Example:** ```java Campaign campaign = new Campaign("123456789", context); campaign.get() .requestIdField() .requestNameField() .requestStatusField() .execute(); ``` ### update() ```java public APIRequestUpdate update() ``` Creates an UPDATE request for this campaign. **Returns:** `APIRequestUpdate` - Request builder for setting fields **Example:** ```java Campaign campaign = new Campaign("123456789", context); campaign.update() .setName("Updated Campaign Name") .setStatus(Campaign.EnumStatus.VALUE_ACTIVE) .execute(); ``` ### delete() ```java public APIRequestDelete delete() ``` Creates a DELETE request for this campaign. **Returns:** `APIRequestDelete` - Request builder **Example:** ```java campaign.delete().execute(); ``` ``` -------------------------------- ### List Campaigns with Pagination Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/README.md Illustrates how to list campaigns and handle pagination to retrieve all available campaigns. This is useful for managing multiple campaigns. ```java APINodeList campaigns = Campaign.fetchPage(apiContext); while (campaigns.hasNextPage()) { campaigns.moveNextToNextPage(); } for (Campaign campaign : campaigns) { System.out.println(campaign.getName()); } ``` -------------------------------- ### Using ArrayList Methods on APINodeList Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/03-api-node.md Demonstrates leveraging standard Java ArrayList methods like size(), get(), isEmpty(), and iteration on APINodeList objects. ```java APINodeList campaigns = account.getCampaigns().execute(); int count = campaigns.size(); // Number of items in current page Campaign first = campaigns.get(0); // First item boolean hasCampaigns = !campaigns.isEmpty(); // Check if empty for (Campaign c : campaigns) { ... } campaigns.forEach(c -> ...); ``` -------------------------------- ### Get AdAccount Balance Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/08-ad-account-api.md Retrieves the account balance in cents as a String. This example shows how to parse it into a Double for display in dollars. ```java String balanceCents = account.getFieldBalance(); double balanceDollars = Double.parseDouble(balanceCents) / 100.0; System.out.println("Balance: $" + balanceDollars); ``` -------------------------------- ### Get Ad Sets for Campaign Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves all ad sets associated with a specific campaign. Use requestAllFields() and execute() to fetch the data. ```java public APINodeList getAdSets() ``` ```java Campaign campaign = Campaign.fetchById("123", context); APINodeList adSets = campaign.getAdSets() .requestAllFields() .execute(); for (AdSet adSet : adSets) { System.out.println(adSet.getFieldName()); } ``` -------------------------------- ### Get Current Async Request Executor Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/02-api-request.md Retrieves the currently active asynchronous request executor. Useful for checking the current async network handling setup. ```java public static IAsyncRequestExecutor getAsyncExecutor() ``` -------------------------------- ### Create Campaign with Ad Set and Ad Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/README.md Demonstrates the creation of a campaign, including its associated ad set and ad, in a single operation. This showcases nested resource creation. ```java AdAccount adAccount = AdAccount.fetchById(apiContext, "YOUR_AD_ACCOUNT_ID"); Campaign campaign = new Campaign(apiContext) .setName("My New Campaign") .setObjective("LINK_CLICKS") .setStatus(Campaign.Status.PAUSED) .create(); AdSet adSet = new AdSet(apiContext) .setName("My New Ad Set") .setCampaignId(campaign.getId()) .setBillingEvent(AdSet.BillingEvent.IMPRESSIONS) .setOptimizationGoal(AdSet.OptimizationGoal.LINK_CLICKS) .setStatus(AdSet.Status.PAUSED) .create(); Ad ad = new Ad(apiContext) .setName("My New Ad") .setAdSetId(adSet.getId()) .setCreative(new AdCreative(apiContext).setBody("Check this out!")) .setStatus(Ad.Status.PAUSED) .create(); System.out.println("Campaign created: " + campaign.getId()); System.out.println("AdSet created: " + adSet.getId()); System.out.println("Ad created: " + ad.getId()); ``` -------------------------------- ### API Context with Custom File Logger Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/01-api-context.md Initializes an `APIContext`, enables debug logging, and sets a file output stream as the logger. This example demonstrates logging API interactions to a file named 'api.log'. ```java APIContext context = new APIContext(accessToken, appSecret); try (PrintStream logger = new PrintStream(new FileOutputStream("api.log"))) { context.enableDebug(true).setLogger(logger); Campaign campaign = Campaign.fetchById("123456789", context); } catch (IOException e) { // Handle file errors } ``` -------------------------------- ### Build Complex Targeting Object Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/11-types-and-enums.md Provides a detailed example of constructing a targeting map with nested structures for countries, interests, and age ranges, then applying it to an ad set. ```java Map targeting = new HashMap<>(); // Countries Map geoLocation = new HashMap<>(); geolocation.put("countries", Arrays.asList("US", "CA", "MX")); targeting.put("geo_locations", geoLocation); // Interests List> interests = new ArrayList<>(); Map interest = new HashMap<>(); interest.put("id", "6003107520433"); interest.put("name", "Python (programming language)"); interests.add(interest); targeting.put("interests", interests); // Age range targeting.put("age_min", 18); targeting.put("age_max", 65); // Use in ad set adSet.update().setTargeting(targeting).execute(); ``` -------------------------------- ### Create GET Request for AdAccount Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/08-ad-account-api.md Creates a GET request builder for the AdAccount. Allows specifying which fields to retrieve before executing the request. ```java account.get() .requestIdField() .requestNameField() .requestCurrencyField() .execute(); ``` -------------------------------- ### FailedRequestException Example Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/05-error-handling.md Illustrates how to catch a FailedRequestException, which is thrown for API request failures. It shows logging the error message and printing the stack trace. ```java try { Campaign campaign = Campaign.fetchById("invalid_id", context); } catch(APIException.FailedRequestException e) { System.err.println("Failed: " + e.getMessage()); e.printStackTrace(); } ``` -------------------------------- ### Handle API Errors Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/index.md Provides an example of how to handle potential API exceptions, specifically `FailedRequestException` for API-related errors and a general `APIException` for other issues. ```java try { Campaign c = Campaign.fetchById("invalid", context); } catch(APIException.FailedRequestException e) { // Handle API error } catch(APIException e) { // Handle other errors } ``` -------------------------------- ### Create Resources with Dependencies Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/04-batch-request.md This snippet demonstrates creating resources with dependencies using response placeholders. Reference previous batch results by name and field path to set IDs or other values for subsequent requests. ```java BatchRequest batch = new BatchRequest(context); AdAccount account = new AdAccount("123456789", context); // Create campaign batch.addRequest("campaign", account.createCampaign() .setName("My Campaign") .setObjective(Campaign.EnumObjective.VALUE_LINK_CLICKS)); // Create ad set using campaign ID from previous response batch.addRequest("adset", account.createAdSet() .setCampaignId("{result=campaign:$.id}") // Reference campaign response .setName("My Ad Set") .setStatus(AdSet.EnumStatus.VALUE_PAUSED) .setDailyBudget(1000L)); // Create ad using ad set ID batch.addRequest("ad", account.createAd() .setAdsetId("{result=adset:$.id}") // Reference adset response .setName("My Ad") .setCreative("{...}")); // JSON with creative_id, etc. List responses = batch.execute(); Campaign c = (Campaign) responses.get(0); AdSet as = (AdSet) responses.get(1); Ad ad = (Ad) responses.get(2); ``` -------------------------------- ### Create Campaign Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Demonstrates how to create a new campaign with specified name, objective, status, and daily budget. Requires an initialized AdAccount object. ```java AdAccount account = new AdAccount("123456789", context); Campaign campaign = account.createCampaign() .setName("My New Campaign") .setObjective(Campaign.EnumObjective.VALUE_LINK_CLICKS) .setStatus(Campaign.EnumStatus.VALUE_PAUSED) .setDailyBudget(5000L) // $50/day .execute(); System.out.println("Created campaign: " + campaign.getId()); ``` -------------------------------- ### API Request Get Campaign Data Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Initiates a GET request for campaign data. Use methods like requestAllFields() or requestXxxField() to specify fields, then execute() to send the request. ```java public APIRequestGet get() ``` ```java campaign.get() .requestIdField() .requestNameField() .requestStatusField() .requestDailyBudgetField() .execute(); ``` -------------------------------- ### Create Campaign, Ad Set, Creative, and Ad Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/08-ad-account-api.md Demonstrates the process of creating a full advertising structure: a campaign, an ad set within that campaign, an ad creative, and finally an ad linked to the ad set and creative. Ensure all necessary IDs are passed correctly. ```java AdAccount account = new AdAccount("123456789", context); // Create campaign Campaign campaign = account.createCampaign() .setName("Q1 Campaign") .setObjective(Campaign.EnumObjective.VALUE_LINK_CLICKS) .setStatus(Campaign.EnumStatus.VALUE_PAUSED) .execute(); System.out.println("Campaign created: " + campaign.getId()); // Create ad set AdSet adSet = account.createAdSet() .setCampaignId(campaign.getId()) .setName("Desktop Traffic") .setStatus(AdSet.EnumStatus.VALUE_PAUSED) .setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_LINK_CLICKS) .setBillingEvent(AdSet.EnumBillingEvent.VALUE_LINK_CLICKS) .setDailyBudget(10000L) .execute(); System.out.println("Ad Set created: " + adSet.getId()); // Create creative AdCreative creative = account.createAdCreative() .setTitle("Learn More") .setBody("Check out our offer") .setImageHash("abcd1234") .setLinkUrl("https://example.com") .execute(); System.out.println("Creative created: " + creative.getId()); // Create ad Ad ad = account.createAd() .setAdsetId(adSet.getId()) .setName("Desktop Ad") .setCreative("{creative_id: \"" + creative.getId() + "\"}") .setStatus(Ad.EnumStatus.VALUE_PAUSED) .setBidAmount(50L) .execute(); System.out.println("Ad created: " + ad.getId()); ``` -------------------------------- ### Create a New Resource Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/00-overview.md Illustrates the process of creating a new resource, such as a Campaign, by setting its properties and executing the creation request. ```java Campaign campaign = account.createCampaign() .setName("My Campaign") .setObjective(Campaign.EnumObjective.VALUE_LINK_CLICKS) .setStatus(Campaign.EnumStatus.VALUE_PAUSED) .execute(); ``` -------------------------------- ### Initialize API Context Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/09-quick-start.md Import necessary classes and create an APIContext object with your access token, app secret, and ad account ID. ```java import com.facebook.ads.sdk.*; public class QuickStart { public static void main(String[] args) throws APIException { String accessToken = "your_access_token"; String appSecret = "your_app_secret"; String accountId = "your_ad_account_id"; // Create context APIContext context = new APIContext(accessToken, appSecret); } } ``` -------------------------------- ### Get Campaign Objective Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves the objective of the campaign as a string. ```java public String getFieldObjective() ``` -------------------------------- ### Get Ads for Campaign Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves all ads belonging to a specific campaign. ```java public APINodeList getAds() ``` -------------------------------- ### Get Campaign Created Time Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves the timestamp when the campaign was created. ```java public String getFieldCreatedTime() ``` -------------------------------- ### Batch Operations for Campaign Creation Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Shows how to create multiple campaigns efficiently using a `BatchRequest`. Each request is added to the batch and then executed. ```java BatchRequest batch = new BatchRequest(context); AdAccount account = new AdAccount("123456789", context); batch.addRequest("campaign1", account.createCampaign() .setName("Campaign 1") .setObjective(Campaign.EnumObjective.VALUE_LINK_CLICKS)); batch.addRequest("campaign2", account.createCampaign() .setName("Campaign 2") .setObjective(Campaign.EnumObjective.VALUE_CONVERSIONS)); List responses = batch.execute(); Campaign c1 = (Campaign) responses.get(0); Campaign c2 = (Campaign) responses.get(1); ``` -------------------------------- ### Create a Campaign with Java SDK Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/README.md Minimal implementation to create a campaign in an ad account. Requires valid access token, account ID, and app secret. ```java import com.facebook.ads.sdk.APIContext; import com.facebook.ads.sdk.AdAccount; import com.facebook.ads.sdk.AdAccount.EnumCampaignStatus; import com.facebook.ads.sdk.AdAccount.EnumCampaignObjective; import com.facebook.ads.sdk.Campaign; import com.facebook.ads.sdk.APIException; public class QuickStartExample { public static final String ACCESS_TOKEN = "[Your access token]"; public static final Long ACCOUNT_ID = [Your account ID]; public static final String APP_SECRET = "[Your app secret]"; public static final APIContext context = new APIContext(ACCESS_TOKEN, APP_SECRET); public static void main(String[] args) { try { AdAccount account = new AdAccount(ACCOUNT_ID, context); Campaign campaign = account.createCampaign() .setName("Java SDK Test Campaign") .setObjective(Campaign.EnumObjective.VALUE_LINK_CLICKS) .setSpendCap(10000L) .setStatus(Campaign.EnumStatus.VALUE_PAUSED) .execute(); System.out.println(campaign.fetch()); } catch (APIException e) { e.printStackTrace(); } } } ``` -------------------------------- ### Get Campaign Updated Time Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves the timestamp when the campaign was last updated. ```java public String getFieldUpdatedTime() ``` -------------------------------- ### Initialize APIContext and Fetch Campaign Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/index.md This snippet shows how to initialize the APIContext with access token and app secret, and then fetch a campaign by its ID. Ensure you have valid credentials and campaign ID. ```java APIContext context = new APIContext(accessToken, appSecret); Campaign campaign = Campaign.fetchById(campaignId, context); ``` -------------------------------- ### Create Multiple Resources in One Call (Batch) Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/README.md Illustrates how to create multiple resources (e.g., campaigns) in a single API call using batch operations. This improves efficiency for bulk actions. ```java BatchRequest batchRequest = new BatchRequest(apiContext); batchRequest.add(new Campaign(apiContext) .setName("Batch Campaign 1") .setObjective("LINK_CLICKS") .setStatus(Campaign.Status.PAUSED)); batchRequest.add(new Campaign(apiContext) .setName("Batch Campaign 2") .setObjective("LINK_CLICKS") .setStatus(Campaign.Status.PAUSED)); List responses = batchRequest.execute(); for (APIResponse response : responses) { System.out.println(response.getBody()); } ``` -------------------------------- ### Get Access Token Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/01-api-context.md Retrieves the access token that was provided during the APIContext construction. ```java String token = context.getAccessToken(); ``` -------------------------------- ### Fetch and Update Campaign Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Shows how to fetch an existing campaign by ID, print its current details, and then update its name and status. Requires a valid campaign ID and context. ```java Campaign campaign = Campaign.fetchById("123456789", context); System.out.println("Current name: " + campaign.getFieldName()); System.out.println("Current status: " + campaign.getFieldStatus()); campaign.update() .setName("Updated Name") .setStatus(Campaign.EnumStatus.VALUE_PAUSED) .execute(); System.out.println("Campaign updated"); ``` -------------------------------- ### Get Account Capabilities Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/08-ad-account-api.md Retrieves a list of features enabled for the account, such as ADS_MANAGEMENT or INSIGHTS. ```java public List getFieldCapabilities() ``` -------------------------------- ### Get Account Timezone ID Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/08-ad-account-api.md Retrieves the numerical ID for the account's timezone. ```java public Long getFieldTimezoneId() ``` -------------------------------- ### Use Map Types for Targeting Parameters Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/11-types-and-enums.md Illustrates setting targeting parameters using a Map. This is common for complex targeting configurations. ```java Map targeting = new HashMap<>(); targeting.put("geo_locations", Arrays.asList(...)); targeting.put("interests", Arrays.asList(...)); adSet.update().setTargeting(targeting).execute(); ``` -------------------------------- ### Get Campaign Account ID Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves the ad account ID to which this campaign belongs. ```java public String getFieldAccountId() ``` -------------------------------- ### createAdSet() Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/08-ad-account-api.md Creates a new ad set for this account. ```APIDOC ## createAdSet() ### Description Creates a new ad set. ### Returns `APIRequestCreateAdSet` - Request builder ### Required Parameters - `setCampaignId()` - Campaign ID - `setName()` - Ad set name - `setOptimizationGoal()` - Optimization goal - `setBillingEvent()` - Billing event type ### Optional Parameters - `setStatus()` - Initial status - `setDailyBudget()` - Daily budget - `setLifetimeBudget()` - Lifetime budget - `setStartTime()` - Start date - `setEndTime()` - End date - `setTargeting()` - Audience targeting ### Example ```java AdSet adSet = account.createAdSet() .setCampaignId(campaignId) .setName("My Ad Set") .setStatus(AdSet.EnumStatus.VALUE_PAUSED) .setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_IMPRESSIONS) .setBillingEvent(AdSet.EnumBillingEvent.VALUE_IMPRESSIONS) .setDailyBudget(5000L) // $50/day .execute(); ``` ``` -------------------------------- ### Get Campaign Name Field Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves the campaign name as a String from a Campaign object. ```java public String getFieldName() ``` -------------------------------- ### Create Campaign Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/08-ad-account-api.md Initiates the creation of a new campaign. Requires setting the name and objective. Optional parameters include status, budget, and dates. ```java Campaign campaign = account.createCampaign() .setName("My Campaign") .setObjective(Campaign.EnumObjective.VALUE_LINK_CLICKS) .setStatus(Campaign.EnumStatus.VALUE_PAUSED) .setDailyBudget(10000L) // $100/day .execute(); System.out.println("Created campaign: " + campaign.getId()); ``` -------------------------------- ### Load Configuration from Environment Variables Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/06-configuration.md Loads access token, app secret, and app ID from environment variables. Throws an IllegalArgumentException if the access token is not set. ```java String accessToken = System.getenv("FB_ACCESS_TOKEN"); String appSecret = System.getenv("FB_APP_SECRET"); String appID = System.getenv("FB_APP_ID"); if (accessToken == null) { throw new IllegalArgumentException("FB_ACCESS_TOKEN not set"); } APIContext context = new APIContext(accessToken, appSecret, appID); ``` -------------------------------- ### Get Campaign ID Field Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves the campaign ID as a String from a Campaign object. ```java public String getFieldId() ``` -------------------------------- ### Get HTTP Response Headers Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/03-api-node.md Retrieves the HTTP headers associated with the API response. ```java @Override public String getHeader() ``` -------------------------------- ### Get Campaign Lifetime Budget Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves the total lifetime budget for a campaign in cents as a string. ```java public String getFieldLifetimeBudget() ``` -------------------------------- ### POST Request with Parameters Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/02-api-request.md Creates a new campaign using a POST request, setting parameters such as name, objective, and status. The response is parsed into a Campaign object. ```java APIRequest request = new APIRequest<>( context, "123456789", "/campaigns", "POST", Campaign.getParser() ); Campaign newCampaign = (Campaign) request.setParam("name", "My Campaign") .setParam("objective", "OUTCOME_TRAFFIC") .setParam("status", "PAUSED") .execute(); ``` -------------------------------- ### Campaign Status Enum Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/11-types-and-enums.md Defines the possible statuses for a campaign, used for GET requests and filtering. ```java public enum EnumStatus { VALUE_ACTIVE("ACTIVE"), // Active campaign VALUE_PAUSED("PAUSED"), // Paused campaign VALUE_DELETED("DELETED"), // Deleted campaign VALUE_PENDING_REVIEW("PENDING_REVIEW"), // Awaiting approval VALUE_DISAPPROVED("DISAPPROVED"), // Rejected by review VALUE_ARCHIVED("ARCHIVED") // Archived campaign } ``` -------------------------------- ### Get Raw JSON Response Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/03-api-node.md Retrieves the complete, unprocessed JSON string returned by the API. ```java @Override public String getRawResponse() ``` -------------------------------- ### Initialize API Context Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/00-overview.md Encapsulates authentication credentials and configuration. Required for all API operations. Enable debug logging with `enableDebug(true)`. ```java APIContext context = new APIContext(accessToken, appSecret); context.enableDebug(true); // Enable request/response logging ``` -------------------------------- ### createCampaign() Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/08-ad-account-api.md Creates a new campaign for this account. ```APIDOC ## createCampaign() ### Description Creates a new campaign. ### Returns `APIRequestCreateCampaign` - Request builder ### Required Parameters - `setName()` - Campaign name - `setObjective()` - Campaign objective ### Optional Parameters - `setStatus()` - Initial status (default PAUSED) - `setDailyBudget()` - Daily budget in cents - `setLifetimeBudget()` - Lifetime budget in cents - `setStartTime()` - Campaign start date - `setStopTime()` - Campaign end date - `setSpecialAdCategories()` - Special categories ### Example ```java Campaign campaign = account.createCampaign() .setName("My Campaign") .setObjective(Campaign.EnumObjective.VALUE_LINK_CLICKS) .setStatus(Campaign.EnumStatus.VALUE_PAUSED) .setDailyBudget(10000L) // $100/day .execute(); System.out.println("Created campaign: " + campaign.getId()); ``` ``` -------------------------------- ### Handle Pagination with Auto-Pagination Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/09-quick-start.md Illustrates using `withAutoPaginationIterator(true)` to automatically fetch subsequent pages of results, simplifying iteration over large datasets. ```java // ✅ Auto pagination APINodeList campaigns = account.getCampaigns() .requestAllFields() .execute() .withAutoPaginationIterator(true); for (Campaign c : campaigns) { // Automatically fetches next page System.out.println(c.getFieldName()); } ``` -------------------------------- ### Get Campaign Special Ad Categories Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves a list of special ad categories associated with the campaign. ```java public List getFieldSpecialAdCategories() ``` -------------------------------- ### Get Campaign Stop Time Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves the campaign's end time in ISO 8601 format. ```java public String getFieldStopTime() ``` -------------------------------- ### Create Ad Set Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/08-ad-account-api.md Initiates the creation of a new ad set. Requires campaign ID, name, optimization goal, and billing event. Optional parameters include status, budget, and targeting. ```java AdSet adSet = account.createAdSet() .setCampaignId(campaignId) .setName("My Ad Set") .setStatus(AdSet.EnumStatus.VALUE_PAUSED) .setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_IMPRESSIONS) .setBillingEvent(AdSet.EnumBillingEvent.VALUE_IMPRESSIONS) .setDailyBudget(5000L) // $50/day .execute(); ``` -------------------------------- ### Filter Campaigns by Effective Status Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/11-types-and-enums.md Example of filtering campaigns by a list of effective statuses, such as active or paused. ```java account.getCampaigns() .setEffectiveStatus(Arrays.asList( Campaign.EnumEffectiveStatus.VALUE_ACTIVE, Campaign.EnumEffectiveStatus.VALUE_PAUSED )) .execute(); ``` -------------------------------- ### Handle ISO 8601 Timestamps Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/11-types-and-enums.md Demonstrates how to retrieve, set, and convert ISO 8601 formatted timestamps from the SDK. Includes parsing to LocalDateTime. ```java String createdTime = campaign.getFieldCreatedTime(); // Example: "2025-01-15T10:30:00+0000" // Set start time campaign.update() .setStartTime("2025-02-01T00:00:00") .execute(); // Convert to LocalDateTime DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME; OffsetDateTime odt = OffsetDateTime.parse(createdTime); LocalDateTime ldt = odt.toLocalDateTime(); ``` -------------------------------- ### Update Campaign Status Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/11-types-and-enums.md Example of how to update a campaign's status to paused using the EnumStatus enum. ```java campaign.update() .setStatus(Campaign.EnumStatus.VALUE_PAUSED) .execute(); ``` -------------------------------- ### Get Account Timezone Name Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/08-ad-account-api.md Retrieves the name of the account's timezone, e.g., "America/New_York". ```java public String getFieldTimezoneName() ``` -------------------------------- ### Reuse APIContext Instance Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/09-quick-start.md Illustrates the best practice of creating a single APIContext instance and reusing it for multiple API calls to improve efficiency and performance. ```java // ✅ Create once, reuse APIContext context = new APIContext(token, secret); Campaign c1 = Campaign.fetchById("123", context); Campaign c2 = Campaign.fetchById("456", context); AdAccount account = new AdAccount("789", context); ``` -------------------------------- ### Get Campaign Budget Remaining Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves the remaining budget for a campaign in cents as a string. This can be converted to dollars for display. ```java public String getFieldBudgetRemaining() ``` ```java String budgetCents = campaign.getFieldBudgetRemaining(); double budgetDollars = Double.parseDouble(budgetCents) / 100.0; ``` -------------------------------- ### Get Graph API Version Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/01-api-context.md Retrieves the configured Graph API version string, such as "v25.0". ```java public String getVersion() ``` -------------------------------- ### Batch Composition Pattern: Create Multiple Resources Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/04-batch-request.md Demonstrates how to use BatchRequest to create multiple resources, such as campaigns, in a single batch operation. This pattern is useful for efficiently creating multiple related entities. ```APIDOC ## Batch Composition Pattern: Create Multiple Resources ### Description Demonstrates how to use BatchRequest to create multiple resources, such as campaigns, in a single batch operation. This pattern is useful for efficiently creating multiple related entities. ### Example ```java BatchRequest batch = new BatchRequest(context); AdAccount account = new AdAccount("123456789", context); // Add three campaign creation requests batch.addRequest("campaign1", account.createCampaign() .setName("Campaign 1") .setObjective(Campaign.EnumObjective.VALUE_LINK_CLICKS)); batch.addRequest("campaign2", account.createCampaign() .setName("Campaign 2") .setObjective(Campaign.EnumObjective.VALUE_ENGAGEMENT)); batch.addRequest("campaign3", account.createCampaign() .setName("Campaign 3") .setObjective(Campaign.EnumObjective.VALUE_CONVERSIONS)); List responses = batch.execute(); Campaign c1 = (Campaign) responses.get(0); Campaign c2 = (Campaign) responses.get(1); Campaign c3 = (Campaign) responses.get(2); ``` ``` -------------------------------- ### List Campaigns with Field Selection Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Demonstrates how to list campaigns associated with an AdAccount, selecting specific fields to retrieve. Includes pagination support. ```java AdAccount account = new AdAccount("123456789", context); APINodeList campaigns = account.getCampaigns() .requestIdField() .requestNameField() .requestStatusField() .requestDailyBudgetField() .execute(); System.out.println("Total campaigns on page: " + campaigns.size()); for (Campaign c : campaigns) { System.out.println(c.getId() + ": " + c.getFieldName() + " (" + c.getFieldStatus() + ")"); } // Get next page APINodeList nextPage = campaigns.nextPage(); if (nextPage != null) { System.out.println("Next page: " + nextPage.size() + " campaigns"); } ``` -------------------------------- ### Get First Item in List Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/03-api-node.md Retrieves the first item from the current page of results. Returns null if the list is empty. ```java @Override public T head() ``` ```java APINodeList campaigns = account.getCampaigns().execute(); Campaign first = campaigns.head(); ``` -------------------------------- ### Batch Multiple Operations Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/index.md Illustrates how to create and execute a batch request containing multiple operations, such as creating two campaigns. Each request in the batch can be identified by a string key. ```java BatchRequest batch = new BatchRequest(context); batch.addRequest("c1", account.createCampaign().setName("C1")); batch.addRequest("c2", account.createCampaign().setName("C2")); List responses = batch.execute(); ``` -------------------------------- ### Get Raw Response as JsonObject Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/03-api-node.md Parses the raw JSON response string into a `JsonObject` for easier programmatic access to its fields. ```java @Override public JsonObject getRawResponseAsJsonObject() ``` -------------------------------- ### Get App Secret Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/01-api-context.md Retrieves the app secret if it was provided during the APIContext construction. Returns null if no app secret was set. ```java public String getAppSecret() ``` -------------------------------- ### Error Handling for Campaign Fetch Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Demonstrates how to handle potential `APIException` errors when fetching a campaign, such as invalid IDs or access denial. Includes specific handling for `FailedRequestException`. ```java try { Campaign campaign = Campaign.fetchById("invalid_id", context); } catch(APIException.FailedRequestException e) { System.err.println("Campaign not found or access denied: " + e.getMessage()); } catch(APIException e) { System.err.println("Error: " + e.getMessage()); } ``` -------------------------------- ### Create Campaign with Long ID Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/11-types-and-enums.md Example of creating a Campaign object using a long integer representation of the campaign ID. ```java // Or with Long Campaign campaign = new Campaign(123456789L, context); ``` -------------------------------- ### Handle Pagination Manually Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/09-quick-start.md Shows how to manually fetch pages of results using `nextPage()`, providing control over the pagination process. ```java // ✅ Manual pagination APINodeList page1 = account.getCampaigns().execute(); for (Campaign c : page1) { ... } APINodeList page2 = page1.nextPage(); ``` -------------------------------- ### Get Campaign Field Status Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/07-campaign-api.md Retrieves the current status of a campaign. Use this to check if a campaign is active, paused, or in another state. ```java public EnumStatus getFieldStatus() ``` ```java Campaign campaign = Campaign.fetchById("123", context); Campaign.EnumStatus status = campaign.getFieldStatus(); if (status == Campaign.EnumStatus.VALUE_ACTIVE) { System.out.println("Campaign is active"); } ``` -------------------------------- ### Load Configuration from Property File Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/06-configuration.md Loads access token, app secret, and app ID from a properties file named 'facebook.properties'. ```java Properties props = new Properties(); props.load(new FileInputStream("facebook.properties")); String accessToken = props.getProperty("facebook.access_token"); String appSecret = props.getProperty("facebook.app_secret"); String appID = props.getProperty("facebook.app_id"); APIContext context = new APIContext(accessToken, appSecret, appID); ``` -------------------------------- ### Get API Context Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/02-api-request.md Retrieves the APIContext object associated with the current API request. The context holds configuration and authentication details. ```java public APIContext getContext() ``` -------------------------------- ### Create Ad Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/08-ad-account-api.md Initiates the creation of a new ad. Requires ad set ID, creative specification, and ad name. Optional parameters include status and bid amount. ```java Ad ad = account.createAd() .setAdsetId(adSetId) .setName("My Ad") .setCreative("{creative_id: \"" + creativeId + "\"}") .setStatus(Ad.EnumStatus.VALUE_PAUSED) .setBidAmount(100L) .execute(); ``` -------------------------------- ### createAdSet() Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/08-ad-account-api.md Initiates the creation of a new ad set associated with the AdAccount. ```APIDOC ## createAdSet() ### Description Initiates the creation of a new ad set associated with the AdAccount. This method returns a builder object that allows setting ad set details before execution. ### Method Signature `public AdSet.CreateBuilder createAdSet()` ### Parameters This method does not take direct parameters, but configuration is done via chained methods on the returned builder: - `setCampaignId(String campaignId)`: Sets the ID of the campaign this ad set belongs to. - `setName(String name)`: Sets the name of the ad set. - `setStatus(AdSet.EnumStatus status)`: Sets the status of the ad set. - `setOptimizationGoal(AdSet.EnumOptimizationGoal goal)`: Sets the optimization goal for the ad set. - `setBillingEvent(AdSet.EnumBillingEvent event)`: Sets the billing event for the ad set. - `setDailyBudget(Long budget)`: Sets the daily budget for the ad set. - `execute()`: Executes the ad set creation. ### Example ```java AdSet adSet = account.createAdSet() .setCampaignId(campaign.getId()) .setName("Desktop Traffic") .setStatus(AdSet.EnumStatus.VALUE_PAUSED) .setOptimizationGoal(AdSet.EnumOptimizationGoal.VALUE_LINK_CLICKS) .setBillingEvent(AdSet.EnumBillingEvent.VALUE_LINK_CLICKS) .setDailyBudget(10000L) .execute(); ``` ``` -------------------------------- ### Get Logger Output Stream Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/01-api-context.md Retrieves the `PrintStream` instance currently used for logging. This allows direct interaction with the logger if needed. ```java public PrintStream getLogger() ``` -------------------------------- ### createAd() Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/08-ad-account-api.md Creates a new ad for this account. ```APIDOC ## createAd() ### Description Creates a new ad. ### Returns `APIRequestCreateAd` - Request builder ### Required Parameters - `setAdsetId()` - Ad set ID - `setCreative()` - Creative specification - `setName()` - Ad name ### Optional Parameters - `setStatus()` - Initial status - `setBidAmount()` - Bid amount ### Example ```java Ad ad = account.createAd() .setAdsetId(adSetId) .setName("My Ad") .setCreative("{creative_id: \"" + creativeId + "\"}") .setStatus(Ad.EnumStatus.VALUE_PAUSED) .setBidAmount(100L) .execute(); ``` ``` -------------------------------- ### Override API Base URL Source: https://github.com/facebook/facebook-java-business-sdk/blob/main/_autodocs/06-configuration.md Example of how to override the default API base URL by passing a custom endpoint to the APIContext constructor. ```java String customBase = "https://custom.endpoint.com"; APIContext context = new APIContext( customBase, DEFAULT_VIDEO_API_BASE, DEFAULT_API_VERSION, accessToken, appSecret, appID, true ); ```