Preferences Export

The Preferences Centre export provides user preference selections enriched with preference definitions and option metadata.

Requesting Access

To request access to preferences exports for your integration, please contact customer support with the following information:

  • Client ID
  • Preferred destination (S3, etc.)
  • Desired export frequency

Export Destinations

Exports can be delivered to the following destinations:

Amazon S3

  • Direct delivery to your S3 bucket
  • Requires: bucket name, region, and appropriate IAM permissions
  • Primary destination for all exports
  • See S3 Destination

Other Destinations

Additional destinations may be available in future releases. Contact customer support to discuss your specific requirements or request new destination types.

Export Types

Full vs Differential Exports

Differential Exports: Each export contains only records that have been created or modified since the last successful export. The system uses a checkpoint mechanism to track the last export timestamp per client and only includes records with last_updated > last_checkpoint.

Full Exports: Full historical exports are available upon request. Contact customer support if you require a complete snapshot of all preference data regardless of modification date.

Export Scheduling

Exports can be configured to run at the following intervals:

  • Hourly: Every hour at a specified minute
  • Daily: Once per day at a specified time (UTC)
  • Weekly: Once per week on a specified day and time (UTC)
  • Custom: Contact customer support for custom scheduling requirements. We use Cron for scheduling: https://crontab.guru/

Data Formats

All preference exports are delivered as JSON files.


Export Samples

User Preferences Export

The user preferences export contains user preference selections enriched with preference names and option metadata from joined tables.

Sample Export:

[
  {
    "id": 12345,
    "client": "DEMOCLIENT",
    "user_id": 98765,
    "anonymous": false,
    "preference_key": "marketing_emails",
    "preference_name": "Marketing Communications",
    "preference_option_id": 101,
    "preference_option_value": "opt_in",
    "preference_option_metadata": {
      "visualType": "checkbox",
      "type": "opt-in",
      "description": "Receive promotional offers and updates"
    },
    "created_at": "2024-01-15T10:30:00.000000",
    "last_updated": "2024-03-20T14:25:30.000000",
    "last_updated_by": "user_portal",
    "last_updated_by_ip": "192.168.1.100",
    "last_updated_by_ip_raw": "192.168.1.100"
  },
  {
    "id": 12346,
    "client": "DEMOCLIENT",
    "user_id": 98765,
    "anonymous": false,
    "preference_key": "data_sharing",
    "preference_name": "Data Sharing Preferences",
    "preference_option_id": 205,
    "preference_option_value": "partners_only",
    "preference_option_metadata": {
      "visualType": "radio",
      "type": "opt-in",
      "description": "Share data with trusted partners only"
    },
    "created_at": "2024-01-15T10:30:00.000000",
    "last_updated": "2024-03-22T09:15:45.000000",
    "last_updated_by": "admin_portal",
    "last_updated_by_ip": "10.0.0.50",
    "last_updated_by_ip_raw": "10.0.0.50"
  },
  {
    "id": 12347,
    "client": "DEMOCLIENT",
    "user_id": 55432,
    "anonymous": true,
    "preference_key": "cookie_consent",
    "preference_name": "Cookie Preferences",
    "preference_option_id": 310,
    "preference_option_value": "essential_only",
    "preference_option_metadata": {
      "visualType": "select",
      "description": "Essential cookies only"
    },
    "created_at": "2024-03-21T16:45:00.000000",
    "last_updated": "2024-03-21T16:45:00.000000",
    "last_updated_by": null,
    "last_updated_by_ip": "203.0.113.42",
    "last_updated_by_ip_raw": "203.0.113.42"
  }
]

Field Descriptions:

FieldTypeDescription
idintegerUnique identifier for the user preference record
clientstringClient identifier
user_idintegerUser identifier in your system
anonymousbooleanWhether this is an anonymous user preference
preference_keystringUnique key identifying the preference type
preference_namestringHuman-readable name of the preference (from joined client_preference table)
preference_option_idintegerID of the selected option
preference_option_valuestringValue of the selected option (from joined client_preference_option table)
preference_option_metadataobjectAdditional metadata about the option including visual type and description
created_atstringTimestamp when the preference was first set
last_updatedstringTimestamp of the last modification
last_updated_bystringSystem or portal that made the last update
last_updated_by_ipstringIP address that made the last update
last_updated_by_ip_rawstringRaw IP address that made the last update

Best Practices

  1. Differential Processing: Exports are differential by default. Design your integration to process incremental updates and maintain a local copy of the full dataset
  2. First Export: The first export will contain all historical records. Subsequent exports will only include changes
  3. Data Processing: Always validate the JSON structure before processing exports
  4. Error Handling: Implement retry logic for failed export retrievals
  5. Monitoring: Set up alerts for missing or delayed exports
  6. Date Handling: All timestamps are in UTC; convert to your local timezone as needed
  7. Null Handling: Be prepared to handle null values in optional fields like last_updated_by and joined fields
  8. Anonymous Users: Check the anonymous flag to distinguish between authenticated and anonymous user preferences

Troubleshooting

Export Not Received

  • Verify your destination credentials are current
  • Check that your destination has sufficient storage space
  • Review any firewall or security rules that might block the delivery

Missing Historical Data

  • Exports are differential by default - you'll only receive changes since the last export
  • To receive all historical data, contact support to reset your export checkpoint

Data Discrepancies

  • Ensure you're processing the most recent export file
  • Verify timezone handling for date fields
  • Contact customer support if data appears incorrect

Empty Exports

  • Empty exports are normal when no preference changes have occurred since the last export
  • This indicates stable data with no user activity for the export period