# Send a Sample Request

After you've set everything up, make sure you can successfully send a sample
request to the Search Ads 360 API. The following code sample demonstrates how to
send an [asynchronous request](https://developers.google.com/search-ads/v2/how-tos/reporting/asynchronous-requests)
for the list of campaigns under your advertiser. If the request
is successful, you'll get a response from the Search Ads 360 API saying that the report is created
but not ready (this is because asynchronous requests require additional requests to
actually download a report).


You'll need to specify your own OAuth 2.0 access token and your own agency ID in
the request. To find your agency ID:

1. Visit the [Search Ads 360 UI](http://searchads.google.com/ds/cm/cm/).
2. Your agency and advertiser IDs are displayed in the URL, just after the `ay=` and `av=` prefix. For example:  
   `https://searchads.google.com/ds/cm/cm/cm/cm#campaigns.ay=123456789012345678;av=123456789012345678;`

### JSON

```
POST  https://www.googleapis.com/doubleclicksearch/v2/reports
Authorization: Bearer your OAuth 2.0 access token
Content-type: application/json

{
  "reportScope": {
    "agencyId": "your agency ID",
    "advertiserId": "your advertiser ID"
  },
  "reportType": "campaign",
  "columns": [
    { "columnName": "campaignId" },
    { "columnName": "campaign" }
  ],
  "downloadFormat": "csv",
  "maxRowsPerFile": 6000000,
  "statisticsCurrency": "agency"
}
```

#### Use the Search Ads 360 utility script to send this request


To send a raw JSON POST request, you can use the [sa360Api.py
script](https://developers.google.com/search-ads/v2/prereqs#ds3py) as follows:

1. Copy the example JSON object (everything between and including the two curly brackets) into a new text file named `request.txt`.
2. Change the agency ID that's in the JSON code to your own agency ID.
3. Remove any comments, such as `// The date column segments the report by individual days.`
4. Assemble your OAuth 2.0 credentials into a single, comma-delimited string as follows:  
   `client-ID,client-secret,refresh-token`   
   (This is the same string that `sa360Api.py` outputs when you run `sa360Api.py
   --login` as described in [Set Up
   Authorization](https://developers.google.com/search-ads/v2/authorizing).)
5. Invoke `sa360Api.py` as follows:  
   `sa360Api.py --cred
   CREDENTIALS --server API-method --post < request.txt
   `  
   In the command above, substitute the string you assembled in the previous step for `CREDENTIALS`.   
   Substitute the name of the POST method in the box below for `API-method`.


   For example:  
   `sa360Api.py --cred
   123456789123.apps.googleusercontent.com,ABCDEFGHIJKLMNOPQR_abcdef,1/HIJklM01OPQR23NOP456rst890uvw
   --server https://www.googleapis.com/doubleclicksearch/v2/reports/generate --post < request.txt`

### Java

```
import com.google.api.client.googleapis.json.GoogleJsonError.ErrorInfo;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.services.doubleclicksearch.Doubleclicksearch;
import com.google.api.services.doubleclicksearch.model.ReportApiColumnSpec;
import com.google.api.services.doubleclicksearch.model.ReportRequest;
import com.google.api.services.doubleclicksearch.model.ReportRequest.ReportScope;
import com.google.api.services.doubleclicksearch.model.ReportRequest.TimeRange;

import java.io.IOException;
import java.util.Arrays;

  /**
   * Creates a campaign report request, submits the report, and returns the report ID.
   */
  private static String createReport(Doubleclicksearch service) throws IOException {
    try {
       return service.reports().request(createSampleRequest()).execute().getId();
    } catch (GoogleJsonResponseException e) {
      System.err.println("Report request was rejected.");
      for (ErrorInfo error : e.getDetails().getErrors()) {
        System.err.println(error.getMessage());
      }
      System.exit(e.getStatusCode());
      return null; // Unreachable code.
    }
  }

  /**
   * Returns a simple static request that lists the ID and name of all
   * campaigns under agency 20100000000000895 and advertiser 21700000000011523.
   * Substitute your own agency ID and advertiser IDs for the IDs in this sample.
   */
  private static ReportRequest createSampleRequest() {
    return new ReportRequest()
        .setReportScope(new ReportScope()
        .setAgencyId(20100000000000895L) // Replace with your ID
        .setAdvertiserId(21700000000011523L)) // Replace with your ID
        .setReportType("campaign")
        .setColumns(Arrays.asList(
            new ReportApiColumnSpec[] {
              new ReportApiColumnSpec().setColumnName("campaignId"),
              new ReportApiColumnSpec().setColumnName("campaign")
            }))
        .setTimeRange(new TimeRange()
            .setStartDate("2014-05-01")
            .setEndDate("2014-05-01"))
        .setDownloadFormat("csv")
        .setStatisticsCurrency("usd")
        .setMaxRowsPerFile(5000000);
  }
```

### .NET

```
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;

using Google.Apis.Auth.OAuth2;
using Google.Apis.Auth.OAuth2.Flows;
using api = Google.Apis.Doubleclicksearch.v2;

/// <summary>
/// Creates a campaign report request, submits the report, and returns the report ID.
/// </summary>
/// <param name="service">Search Ads API service.</param>
private static string CreateReport(api.DoubleclicksearchService service)
{
    var req = service.Reports.Request(CreateSampleRequest());
    var report = req.Execute();
    Console.WriteLine("Created report: ID={0}", report.Id);
    return report.Id;
}

/// <summary>
/// Returns a simple static request that lists the ID and name of all
/// campaigns under agency 20100000000000895 and advertiser 21700000000011523.
/// Substitute your own agency ID and advertiser IDs for the IDs in this sample.
/// </summary>
private static api.Data.ReportRequest CreateSampleRequest()
{
    return new api.Data.ReportRequest
    {
        ReportScope = new api.Data.ReportRequest.ReportScopeData
        {
            AgencyId = 20100000000000895,
            AdvertiserId = 21700000000011523,
        },
        ReportType = "campaign",
        Columns = new List<api.Data.ReportRequest.ColumnsData>
        {
            new api.Data.ReportRequest.ColumnsData
            {
                ColumnName = "campaignId",
            },
            new api.Data.ReportRequest.ColumnsData
            {
                ColumnName = "campaign",
            },
        },
        TimeRange = new api.Data.ReportRequest.TimeRangeData
        {
            StartDate = "2014-01-01",
            EndDate = "2014-01-31",
        },
        DownloadFormat = "csv",
        StatisticsCurrency = "usd",
        MaxRowsPerFile = 5000000,
    };
}
```

### Python

```
def generate_report(service):
  """Generate and print sample report.

  Args:
    service: An authorized Doubleclicksearch service. See https://developers.google.com/search-ads/v2/configure.
  """
  request = service.reports().request(
    body =
    {
      "reportScope": {
        "agencyId": "your agency ID",
        "advertiserId": "your advertiser ID"
      },
      "reportType": "campaign",
      "columns": [
        { "columnName": "campaignId" },
        { "columnName": "campaign" }
      ],
      "downloadFormat": "csv",
      "maxRowsPerFile": 6000000,
      "statisticsCurrency": "agency"
    }
  )

  pprint.pprint(request.execute())
```