REALTY-DATA.
Property APIGuides

Push files to your S3 bucket

Onboard a least-privilege cross-account destination and consume atomic publications

Push delivery writes governed exports into a customer-controlled S3 prefix by assuming a dedicated IAM role. Destination verification proves the configured region, encryption, and object operations before any subscription can publish.

The external ID is shown once

The onboarding response can contain externalId only once and is sent with Cache-Control: no-store. Store it immediately in the destination role's trust policy. If it is lost, rotate onboarding; support cannot retrieve it.

Onboard a destination

Prepare a dedicated prefix and role

Use a role whose path is role/realty-data-platform/file-delivery/*. Grant only the required object operations on the destination prefix and, when applicable, the named KMS key.

Reserve the destination

POST /v1/file-export-destinations
Content-Type: application/json
x-api-key: YOUR_API_KEY

{
  "bucket": "acme-realty-deliveries",
  "region": "us-east-1",
  "prefix": "realty/production",
  "roleArn": "arn:aws:iam::123456789012:role/realty-data-platform/file-delivery/production",
  "kmsKeyArn": "arn:aws:kms:us-east-1:123456789012:key/11111111-2222-3333-4444-555555555555"
}

Add the returned external ID to trust

Require both the Realty platform principal and exact sts:ExternalId in the role trust policy. Do not put the external ID in tags, logs, or support cases.

Wait for verification

The destination checker assumes the role, verifies bucket region, and writes, heads, and deletes a random encrypted probe. Create push subscriptions only after GET /v1/file-export-destinations reports the destination active.

Publication layout

manifest.json
part-00001.parquet
part-00002.parquet
_COMPLETE

The platform writes _COMPLETE last, after publication authorization and remote size/checksum verification. Consumers must ignore a prefix until that marker exists, then verify that its publication matches the immutable manifest. A conflicting existing object is never overwritten.

Create a push subscription

{
  "name": "Nightly S3 listings",
  "domain": "listing",
  "deliveryMode": "push",
  "destinationId": "018f2f21-15d8-7c8b-8ba5-2b90cbfe38d8",
  "cadenceSeconds": 86400,
  "preferredMinuteOfDay": 300,
  "emptyDeliveryBehavior": "manifest_only"
}
{
  "name": "Nightly S3 listings with recovery pull",
  "domain": "listing",
  "deliveryMode": "both",
  "destinationId": "018f2f21-15d8-7c8b-8ba5-2b90cbfe38d8",
  "cadenceSeconds": 86400,
  "preferredMinuteOfDay": 300,
  "emptyDeliveryBehavior": "manifest_only"
}

AWS and consumer best practices

On this page