Report
객체는 생성하려는 보고서를 설명하는 재사용 가능한 템플릿을 정의합니다. Report 객체는 보고서의 측정기준, 측정항목, 기간과 같은 기준을 구성합니다.
이 가이드에서는 Curation Partners API를 사용하여 실적을 추적하는 보고서를 만들거나, 요구사항에 맞게 기존 보고서를 수정하거나, 더 이상 사용되지 않는 보고서의 템플릿을 삭제하는 방법을 설명합니다.
시작하기 전에
계속하기 전에 인증을 설정해야 합니다.
보고서 만들기
curators.reports.create
메서드를 사용하여 보고서를 만들 수 있습니다. 보고서는 보고 쿼리의 측정기준, 측정항목, 기간, 시간대, 필터, 기본 정렬을 구성합니다.
다음 예에서는 Report 객체가 포함된 JSON 본문으로 curators.reports.create 메서드에 POST 요청을 보냅니다.
REST
요청
curl --request POST \
'https://curationpartners.googleapis.com/v1/curators/ACCOUNT_ID/reports' \
--header 'Authorization: Bearer ACCESS_TOKEN' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
"displayName": "Monthly Data Segment Performance",
"reportDefinition": {
"dimensions": [
"DATE",
"CURATION_DATA_SEGMENT_ID"
],
"metrics": [
"IMPRESSIONS",
"CLICKS",
"SPEND",
"CURATION_PARTNER_FEE"
],
"dateRange": {
"relative": "LAST_30_DAYS"
},
"timeZoneSource": "UTC"
}
}' \
--compressed
다음을 바꿉니다.
ACCOUNT_ID: 계정 IDACCESS_TOKEN: 액세스 토큰
응답
{
"name": "curators/ACCOUNT_ID/reports/123456789",
"reportId": "123456789",
"displayName": "Monthly Data Segment Performance",
"reportDefinition": {
"dimensions": [
"DATE",
"CURATION_DATA_SEGMENT_ID"
],
"metrics": [
"IMPRESSIONS",
"CLICKS",
"SPEND",
"CURATION_PARTNER_FEE"
],
"dateRange": {
"relative": "LAST_30_DAYS"
},
"timeZoneSource": "UTC"
},
"createTime": "2026-08-01T10:00:00Z",
"updateTime": "2026-08-01T10:00:00Z",
"locale": "en"
}
보고서를 만들 때는
reportDefinition
객체를 다음 필드로 채워야 합니다.
dimensions: 보고서에서 측정항목을 그룹화하는 데 사용할 수 있는 측정기준 목록입니다(예:DATE,CURATION_DATA_SEGMENT_ID,DEAL_ID,ENVIRONMENT).metrics: 집계할 측정항목 목록입니다(예:IMPRESSIONS,CLICKS,SPEND,CURATION_PARTNER_FEE).dateRange: 보고서의 기간입니다. 기간은 보고서가 실행되는 시점을 기준으로 한 범위(예:LAST_30_DAYS또는YESTERDAY) 또는startDate및endDate가 있는 고정 범위로 지정됩니다.
선택적으로 다음 필드를 구성할 수 있습니다.
timeZoneSource: 보고서에 적용되는 시간대의 소스입니다. 기본값은 태평양 표준시를 사용하는AD_EXCHANGEenum 값입니다.timeZone: IANA 시간대 문자열입니다(예:"America/New_York").timeZoneSource필드를PROVIDED값으로 설정할 때는 이 필드를 채워야 합니다.filters: 보고서 데이터를 지정한 특정 측정기준 또는 측정항목 값으로 제한합니다.sorts: 보고서 결과 행의 기본 정렬 순서입니다.
자바
/* * Copyright (c) 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.api.services.samples.curationpartners.v1.curators.reports; import com.google.api.services.curationpartners.v1.CurationPartners; import com.google.api.services.curationpartners.v1.model.DateRange; import com.google.api.services.curationpartners.v1.model.Report; import com.google.api.services.curationpartners.v1.model.ReportDefinition; import com.google.api.services.samples.curationpartners.v1.Utils; import java.io.IOException; import java.security.GeneralSecurityException; import java.util.List; import net.sourceforge.argparse4j.ArgumentParsers; import net.sourceforge.argparse4j.inf.ArgumentParser; import net.sourceforge.argparse4j.inf.ArgumentParserException; import net.sourceforge.argparse4j.inf.Namespace; public class CreateReport { /** * Executes the create operation for a report. * * @param curationPartnersClient the initialized Curation Partners API client. * @param accountId the account ID of the curator that will create the report. * @param displayName the display name of the report to be created. * @param dimensions the list of dimensions to include in the report definition. * @param metrics the list of metrics to include in the report definition. * @param relativeDateRange the relative date range for the report. * @throws IOException if the API returns an error. */ public static void execute( CurationPartners curationPartnersClient, Long accountId, String displayName, List<String> dimensions, List<String> metrics, String relativeDateRange) throws IOException { String parent = String.format("curators/%s", accountId); System.out.printf("Creating Report \"%s\" for curator with name \"%s\".%n", displayName, parent); ReportDefinition reportDefinition = new ReportDefinition() .setDimensions(dimensions) .setMetrics(metrics) .setDateRange(new DateRange().setRelative(relativeDateRange)); Report newReport = new Report() .setDisplayName(displayName) .setReportDefinition(reportDefinition); // Create a new report. Report createdReport = curationPartnersClient .curators() .reports() .create(parent, newReport) .execute(); System.out.println("Successfully created report:"); Utils.jsonPrettyPrint(createdReport); } /** * Creates and configures the ArgumentParser for this sample. * * @return the configured ArgumentParser. */ private static ArgumentParser createArgumentParser() { ArgumentParser parser = ArgumentParsers.newFor("CreateReport") .build() .defaultHelp(true) .description("Creates a new report for the given curator account."); // Required arguments. parser .addArgument("-a", "--account_id") .help("The account ID of the curator that will create the report.") .required(true) .type(Long.class); parser .addArgument("-d", "--display_name") .help("The display name of the report to be created.") .required(true); parser .addArgument("--dimensions") .help("The space-delimited list of dimensions to include in the report definition " + "(for example: DATE BUYER_NAME). For a listing of possible values, see: " + "https://developers.google.com/authorized-buyers/curation/apis/curationpartners/reference/rest/v1/curators.reports#dimension") .required(true) .nargs("+"); parser .addArgument("--metrics") .help("The space-delimited list of metrics to include in the report definition " + "(for example: IMPRESSIONS CLICKS). For a listing of possible values, see: " + "https://developers.google.com/authorized-buyers/curation/apis/curationpartners/reference/rest/v1/curators.reports#metric") .required(true) .nargs("+"); // Optional arguments. parser .addArgument("--relative_date_range") .help("The relative date range for the report to include in the report definition. (for example: LAST_7_DAYS, TODAY, YESTERDAY). " + "Defaults to LAST_7_DAYS if unspecified. For a listing of possible values, see: " + "https://developers.google.com/authorized-buyers/curation/apis/curationpartners/reference/rest/v1/curators.reports#relativedaterange") .setDefault("LAST_7_DAYS"); return parser; } public static void main(String[] args) { ArgumentParser parser = createArgumentParser(); Namespace parsedArgs = null; try { parsedArgs = parser.parseArgs(args); } catch (ArgumentParserException ex) { parser.handleError(ex); System.exit(1); } CurationPartners client = null; try { client = Utils.getCurationPartnersClient(); } catch (IOException ex) { System.out.printf("Unable to create Curation Partners API service:%n%s", ex); System.out.println("Did you specify a valid path to a service account key file?"); System.exit(1); } catch (GeneralSecurityException ex) { System.out.printf("Unable to establish secure HttpTransport:%n%s", ex); System.exit(1); } Long accountId = parsedArgs.getLong("account_id"); String displayName = parsedArgs.getString("display_name"); List<String> dimensions = parsedArgs.getList("dimensions"); List<String> metrics = parsedArgs.getList("metrics"); String relativeDateRange = parsedArgs.getString("relative_date_range"); try { execute(client, accountId, displayName, dimensions, metrics, relativeDateRange); } catch (IOException ex) { System.out.printf("Curation Partners API returned error response:%n%s", ex); System.exit(1); } } }
기존 보고서 수정하기
기존 보고서를 수정하려면
curators.reports.patch
메서드를 사용합니다. 업데이트할 필드를 지정하려면 updateMask 쿼리 매개변수를 사용합니다.
다음 예에서는 보고서의 표시 이름과 상대적 기간을 업데이트하는 PATCH 요청을 보냅니다.
REST
요청
curl --request PATCH \
'https://curationpartners.googleapis.com/v1/curators/ACCOUNT_ID/reports/123456789?updateMask=displayName,reportDefinition.dateRange.relative' \
--header 'Authorization: Bearer ACCESS_TOKEN' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{
"displayName": "Updated Data Segment Performance",
"reportDefinition": {
"dateRange": {
"relative": "THIS_MONTH_TO_DATE"
}
}
}' \
--compressed
응답
{
"name": "curators/ACCOUNT_ID/reports/123456789",
"reportId": "123456789",
"displayName": "Updated Data Segment Performance",
"reportDefinition": {
"dimensions": [
"DATE",
"CURATION_DATA_SEGMENT_ID"
],
"metrics": [
"IMPRESSIONS",
"CLICKS",
"SPEND",
"CURATION_PARTNER_FEE"
],
"dateRange": {
"relative": "THIS_MONTH_TO_DATE"
},
"timeZoneSource": "UTC"
},
"createTime": "2026-08-01T10:00:00Z",
"updateTime": "2026-08-01T10:10:00Z",
"locale": "en"
}
자바
/* * Copyright (c) 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.api.services.samples.curationpartners.v1.curators.reports; import com.google.api.services.curationpartners.v1.CurationPartners; import com.google.api.services.curationpartners.v1.model.DateRange; import com.google.api.services.curationpartners.v1.model.Report; import com.google.api.services.curationpartners.v1.model.ReportDefinition; import com.google.api.services.samples.curationpartners.v1.Utils; import java.io.IOException; import java.security.GeneralSecurityException; import java.util.ArrayList; import java.util.List; import net.sourceforge.argparse4j.ArgumentParsers; import net.sourceforge.argparse4j.inf.ArgumentParser; import net.sourceforge.argparse4j.inf.ArgumentParserException; import net.sourceforge.argparse4j.inf.Namespace; public class PatchReport { private PatchReport() {} /** * Executes the patch operation for a report. * * @param curationPartnersClient the initialized Curation Partners API client. * @param accountId the account ID of the curator that created the report. * @param reportId the resource ID of the report to update. * @param displayName the modified display name for the report (or null if not being modified). * @param relativeDateRange the modified relative date range for the report definition (or null * if not being modified). * @param dimensions the modified list of dimensions for the report definition (or null if not * being modified). * @param metrics the modified list of metrics for the report definition (or null if not being * modified). * @throws IOException if the API returns an error. */ public static void execute( CurationPartners curationPartnersClient, Long accountId, String reportId, String displayName, String relativeDateRange, List<String> dimensions, List<String> metrics) throws IOException { String name = String.format("curators/%d/reports/%s", accountId, reportId); List<String> patchedFields = new ArrayList<>(); Report patchedReport = new Report(); if (displayName != null) { patchedReport.setDisplayName(displayName); patchedFields.add("displayName"); } ReportDefinition reportDefinition = new ReportDefinition(); if (relativeDateRange != null) { reportDefinition.setDateRange(new DateRange().setRelative(relativeDateRange)); patchedFields.add("reportDefinition.dateRange.relative"); } if (dimensions != null) { reportDefinition.setDimensions(dimensions); patchedFields.add("reportDefinition.dimensions"); } if (metrics != null) { reportDefinition.setMetrics(metrics); patchedFields.add("reportDefinition.metrics"); } // Set the ReportDefinition on the patched Report unconditionally. Any fields not // explicitly specified in the updateMask will be ignored by the API. patchedReport.setReportDefinition(reportDefinition); if (patchedFields.isEmpty()) { System.out.println("No fields specified to update."); return; } String updateMask = String.join(",", patchedFields); System.out.printf("Patching report with name \"%s\".%n", name); // Patch the report. Report returnedReport = curationPartnersClient .curators() .reports() .patch(name, patchedReport) .setUpdateMask(updateMask) .execute(); System.out.println("Successfully patched report:"); Utils.jsonPrettyPrint(returnedReport); } /** * Creates and configures the ArgumentParser for this sample. * * @return the configured ArgumentParser. */ private static ArgumentParser createArgumentParser() { ArgumentParser parser = ArgumentParsers.newFor("PatchReport") .build() .defaultHelp(true) .description("Updates a specified report."); // Required arguments. parser .addArgument("-a", "--account_id") .help("The account ID of the curator that created the report.") .required(true) .type(Long.class); parser .addArgument("-r", "--report_id") .help("The resource ID of the report to update.") .required(true); // Optional arguments. parser .addArgument("-d", "--display_name") .help("The modified display name of the report."); parser .addArgument("--relative_date_range") .help("The modified relative date range for the report definition (for example: " + "LAST_7_DAYS, TODAY, YESTERDAY). For a listing of possible values, see: " + "https://developers.google.com/authorized-buyers/curation/apis/curationpartners/reference/rest/v1/curators.reports#relativedaterange"); parser .addArgument("--dimensions") .help("A space-delimited list of modified dimensions for the report definition (for " + "example: DATE, BUYER_NAME). For a listing of possible values, see: " + "https://developers.google.com/authorized-buyers/curation/apis/curationpartners/reference/rest/v1/curators.reports#dimension") .nargs("+"); parser .addArgument("--metrics") .help("A space-delimited list of modified metrics for the report definition (for " + "example: IMPRESSIONS CLICKS). For a listing of possible values, see: " + "https://developers.google.com/authorized-buyers/curation/apis/curationpartners/reference/rest/v1/curators.reports#metric") .nargs("+"); return parser; } public static void main(String[] args) { ArgumentParser parser = createArgumentParser(); Namespace parsedArgs = null; try { parsedArgs = parser.parseArgs(args); } catch (ArgumentParserException e) { parser.handleError(e); System.exit(1); } CurationPartners client = null; try { client = Utils.getCurationPartnersClient(); } catch (IOException ex) { System.out.printf("Unable to create Curation Partners API service:%n%s", ex); System.out.println("Did you specify a valid path to a service account key file?"); System.exit(1); } catch (GeneralSecurityException ex) { System.out.printf("Unable to establish secure HttpTransport:%n%s", ex); System.exit(1); } Long accountId = parsedArgs.getLong("account_id"); String reportId = parsedArgs.getString("report_id"); String displayName = parsedArgs.getString("display_name"); String relativeDateRange = parsedArgs.getString("relative_date_range"); List<String> dimensions = parsedArgs.getList("dimensions"); List<String> metrics = parsedArgs.getList("metrics"); try { execute( client, accountId, reportId, displayName, relativeDateRange, dimensions, metrics); } catch (IOException e) { System.out.printf("Curation Partners API returned error response:%n%s", e); System.exit(1); } } }
보고서 삭제
더 이상 필요하지 않은 보고서를 삭제하려면
curators.reports.delete
메서드를 사용합니다. 보고서를 삭제한 후에는 향후 보고서 실행에 보고서를 더 이상 사용할 수 없습니다. curators.reports.get 또는 curators.reports.list 메서드로 보고서를 검색할 수도 없습니다.
다음 예에서는 지정된 보고서를 삭제하는 DELETE 요청을 보냅니다.
REST
요청
curl --request DELETE \
'https://curationpartners.googleapis.com/v1/curators/ACCOUNT_ID/reports/123456789' \
--header 'Authorization: Bearer ACCESS_TOKEN' \
--header 'Accept: application/json' \
--compressed
응답
{}
자바
/* * Copyright (c) 2026 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ package com.google.api.services.samples.curationpartners.v1.curators.reports; import com.google.api.services.curationpartners.v1.CurationPartners; import com.google.api.services.samples.curationpartners.v1.Utils; import java.io.IOException; import java.security.GeneralSecurityException; import net.sourceforge.argparse4j.ArgumentParsers; import net.sourceforge.argparse4j.inf.ArgumentParser; import net.sourceforge.argparse4j.inf.ArgumentParserException; import net.sourceforge.argparse4j.inf.Namespace; public class DeleteReport { /** * Executes the delete operation for a report. * * @param curationPartnersClient the initialized Curation Partners API client. * @param accountId the account ID of the curator that created the report. * @param reportId the resource ID of the report to delete. * @throws IOException if the API returns an error. */ public static void execute( CurationPartners curationPartnersClient, Long accountId, String reportId) throws IOException { String name = String.format("curators/%s/reports/%s", accountId, reportId); System.out.printf("Deleting report with name \"%s\".%n", name); // Delete the specified report. curationPartnersClient.curators().reports().delete(name).execute(); System.out.println("Successfully deleted report."); } /** * Creates and configures the ArgumentParser for this sample. * * @return the configured ArgumentParser. */ private static ArgumentParser createArgumentParser() { ArgumentParser parser = ArgumentParsers.newFor("DeleteReport") .build() .defaultHelp(true) .description("Deletes a specified report."); // Required arguments. parser .addArgument("-a", "--account_id") .help("The account ID of the curator that created the report.") .required(true) .type(Long.class); parser .addArgument("-r", "--report_id") .help("The resource ID of the report to delete.") .required(true); return parser; } public static void main(String[] args) { ArgumentParser parser = createArgumentParser(); Namespace parsedArgs = null; try { parsedArgs = parser.parseArgs(args); } catch (ArgumentParserException ex) { parser.handleError(ex); System.exit(1); } CurationPartners client = null; try { client = Utils.getCurationPartnersClient(); } catch (IOException ex) { System.out.printf("Unable to create Curation Partners API service:%n%s", ex); System.out.println("Did you specify a valid path to a service account key file?"); System.exit(1); } catch (GeneralSecurityException ex) { System.out.printf("Unable to establish secure HttpTransport:%n%s", ex); System.exit(1); } try { execute( client, parsedArgs.getLong("account_id"), parsedArgs.getString("report_id")); } catch (IOException ex) { System.out.printf("Curation Partners API returned error response:%n%s", ex); System.exit(1); } } }
다음 단계
- Curation Partners API로 보고서를 보는 방법 을 알아보세요.
- Curation Partners API로 보고서를 실행하는 방법 을 알아보세요.
- Curation Partners API로 완료된 보고서를 폴링하고 보는 방법 을 알아보세요.