Download Discover Base Tables (DBTs) and Analytical Base Tables (ABTs)

You can use the eventData/dbtReport endpoint of the Download API to download the Discover Base Tables (DBTs) and Analytical Base Tables (ABTs):

  • DBTs combine sets of information from different detail tables to create tables that you might find useful for analysis. Each DBT is created to provide you with one place to get the most relevant information about a specific subject. In addition, these tables are used to create the predefined reports that are available in SAS Customer Intelligence 360. For more information, see Discover Base Tables in SAS Customer Intelligence 360: Data Dictionary.
  • ABTs contain data about user behavior and help to analyze insights. For more information, see Analytical Base Tables in SAS Customer Intelligence 360: Data Dictionary.
    Note: In the API call, the user specifies start and end time periods for the data. However, hourly data is not available for ABTs because attribution data is available only on the 23rd hour of a given day. To include a specific day of data, include the 23rd hour of that day.

To download DBTs, you must have a license for SAS 360 Discover. To download ABTs, you must have a license for SAS 360 Discover or SAS 360 Engage.

Note: In some situations, there might be a mismatch between the contents of the tables and the schema version:
  • The downloaded data might contain more columns than are documented in the Help Center or in the schema files. These columns might have been introduced for internal consumption already and will be added to a future version of the schema.

    The same scenario can happen when you are not using the most recent schema. The data that you download always uses the columns from the latest schema, but you might have requested a schema version that has fewer columns.

  • A schema might add columns to tables, but the columns are not populated with data until a later release of SAS Customer Intelligence 360. For example, a table in the current schema might have nine columns, but data records populate only seven columns. When columns are added but not yet populated with data, you can ignore these columns when you process the data.

    When SAS Customer Intelligence 360 is updated to populate these columns, you might need to wait 2–3 days before the data is populated in the downloaded tables.

To mitigate any issues, configure your ETL processes to allow for the physical files to have more columns than what is described in the JSON schema and the documentation.

To download data for the DBTs and the ABTs:

  1. Set up authorization for the REST API. For REST API calls, in most situations the access point type is going to be a General Access Point.

    When you create the access point, make note of the value in the External gateway host field. Use this value when you see the variable <external gateway host> in the documentation.

  2. Send a GET call to the dbtReport endpoint to retrieve a list of download URLs. This is a simple example of that call:
    GET https://<external gateway host>/marketingGateway/discoverService/dataDownload/
      eventData/dbtReport?schemaVersion=23
    Note: The files that are provided by the download links are delimited files that represent the structure of the tables from the schema that existed when those files were created. The download links are only to the tables of the schema that is requested, but the structure of those files conforms to the most recent schema version. For more information, see Schemas for Data Tables.

    This GET call can use these query parameters in the URL:

    Query Parameters to Download Tables

    Name

    Required or Optional

    Data Type

    Description

    start

    Optional

    Integer

    The start index of the items to return in the current response. The default value is 0.

    limit

    Optional

    Integer

    The maximum number of items to return in the current response.

    For the SAS Customer Intelligence 360 Download API, the limit parameter is restricted to a maximum value of 100. If you specify a value that is higher than the maximum, the limit is reset to the default value of 20.

    When the count parameter (which is the total number of items that exist) is larger than the limit, the response returns only the first page of items in the response (or a specific page based on the start parameter). When results are paginated, the links in the response contain entries for the next, previous, and last pages of items that are available.

    Tip Use the start and limit parameters to control the response based on your use case. If you want all of the items in a single response, set the limit parameter to a number that is equal to or above the total count.

    However, if items in the response have a short-lived URL, you might want to set the limit to a smaller value. Then, you can process the smaller set of items before moving to the next page.

    dataRangeStartTimeStamp

    Optional

    Timestamp

    The start timestamp to use. The timestamp must be in UTC format, such as:

    2026-01-09T00:00:00.000Z
    

    Note: To download data for an entire day (that is, starting at 12:00 AM), make sure that the digits for hour, minutes, and seconds are zeros.

    dataRangeEndTimeStamp

    Optional

    Timestamp

    The end timestamp to use. The timestamp must be in UTC format, such as:

    2026-01-09T12:59:59.999Z

    The value must be within 124 days of the value for the dataRangeStartTimeStamp parameter.

    schemaVersion

    Optional

    Integer

    The schema that the tables use. Use an integer that is 1 or in the range 3–23.

    The default value is 1, which is the schema that corresponds to the original data tables from SAS 360 Discover.

    Downloads with schema 4 and later are restricted by the values that are set for the category parameter. For more information, see Schemas for Data Tables.

  3. Download the tables from the JSON response. These are the most relevant parts of the response:
    • the top-level of the response includes the start, count, and limit parameters. The count parameter displays the total number of items that are returned for the detail tables. The number of items in each response is based on the start value (which is zero-based) and the limit that you sent with the request.

      For example, assume that there are 200 total items returned. If the start value is 0, and the limit is 10, the response includes items 1–9. To see the second page of responses, send another request with a start value of 10 and the same limit of 10. The second response includes items 10–19.

    • the download URLs for each table are nested in the top-level items object. See the following example for the structure of the JSON return and the URL location:
      {
        ...
        "start": 0,
        "count": 735,
        "items": [
           {
             "dataRangeStartTimeStamp": "<timestamp>",
             "dataRangeEndTimeStamp": "<timestamp>",
             "schemaUrl": "<schema URL>",
             "schemaVersion": "23.0",
             "entities": [
               {
                 "entityName": "<table name>",
                 "dataUrlDetails": [
                   {
                     "url": "<temporary URL 1>",
                   },
                   {
                     "url": "<temporary URL 2>",
                   },
                 ]
               },
               ... More tables are listed here ...
             ]
           },
           {
             "dataRangeStartTimeStamp": "<later start timestamp>",
             "dataRangeEndTimeStamp": "<later end timestamp>",
             ...
           }
        ]
        ...
      }

      If you plan to process the response programmatically, be aware of these considerations:

      • In the url attribute, part of the download URL contains a datekey string that you can use to determine which files to download. The format for the string is datekey%3D<datestamp><hour interval>/.

        For example:

        "url": "https://<server>/4e36c3d7eac544c390afe528d340208a/dfs/data/dbt-report/DBT_CONTENT/datekey%3D2020100304/...

        Each table is partitioned into different hour intervals, which are represented by the last two digits of the datekey string.

      • Aside from your pagination settings, the top-level items list is populated based on timestamps. For each list object in items, there is a set of entities (and entityName children) to loop through.
      • For each entityName (table), there could be one or more URLs to process in the dataUrlDetails object.
      • If you want to download the schema, you need to download the schema only once. That is, you get the same schema file regardless of which schemaUrl value you process.
        Note: The response to REST API calls contains a URL to the schema that you requested, but the tables themselves contain columns that were introduced in later schemas.
    • In rare situations, primary keys in downloaded tables might not be unique. For example, this situation might occur from browser behavior or packet loss. Review these best practices to evaluate records with duplicate primary keys:
      • To avoid problems in on-site databases (or when re-importing into SAS Customer Intelligence 360), import data by using an UPSERT method or sanitize your files to ignore records when the primary key already exists.

        When you use the UPSERT method, records are updated based on their primary keys and the value of the load_dttm column.

      • If the primary keys and the values for the load_dttm columns are the same, you can use the value of the other *_dttm column (the DATETIME column that represents when the event occurred) to determine which record is the most recent.

        If two records are exactly the same, you can discard one of the records. SAS Customer Intelligence 360 is designed to ensure that events are not missed, so data collection is more permissive than restrictive. As a result, duplicate records cannot be completely avoided.

      • In extract (_EXT) tables, duplicate records might exist based on a change in behavior. For more information, see this document: GCS Customer Notification Number: 2018-06 - 360 Discover EXT Changes (PDF).
Last updated: November 10, 2026