AWS S3

Store events as JSON objects in an Amazon S3 bucket.

Creating an S3 Destination

curl 'https://api.outpost.hookdeck.com/2025-07-01/tenants/<TENANT_ID>/destinations' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <API_KEY>' \
--data '{
  "type": "aws_s3",
  "topics": ["orders"],
  "config": {
    "bucket": "my-events-bucket",
    "region": "us-east-1"
  },
  "credentials": {
    "key": "<AWS_ACCESS_KEY_ID>",
    "secret": "<AWS_SECRET_ACCESS_KEY>"
  }
}'

Configuration

Config

FieldTypeRequiredDescription
config.bucketstringYesThe S3 bucket name
config.regionstringYesAWS region (e.g., us-east-1)
config.key_templatestringNoJMESPath expression for the object key
config.storage_classstringNoS3 storage class (default: STANDARD)
config.endpointstringNoCustom endpoint URL (for LocalStack, etc.)

Credentials

FieldTypeRequiredDescription
credentials.keystringYesAWS Access Key ID
credentials.secretstringYesAWS Secret Access Key
credentials.sessionstringNoAWS Session Token (for temporary credentials)

Object Format

The S3 object body contains the event's data field as JSON. Event metadata (event-id, topic, timestamp, plus any custom metadata from the published event) is stored in the S3 object's user-defined metadata — not in the body.

Object Key

By default, objects are stored as {timestamp}_{event-id}.json. Customize with a JMESPath expression:

{
  "config": {
    "bucket": "my-events-bucket",
    "region": "us-east-1",
    "key_template": "join('/', [data.customer_id, metadata.\"event-id\"])"
  }
}

Storage Classes

Supported storage classes:

ClassDescription
STANDARDDefault — general purpose
STANDARD_IAInfrequent access
ONEZONE_IASingle AZ infrequent access
INTELLIGENT_TIERINGAuto-tiered based on access patterns
GLACIERArchival, minutes to hours retrieval
DEEP_ARCHIVELowest cost, 12-hour retrieval
GLACIER_IRArchival with instant retrieval
REDUCED_REDUNDANCYLegacy — not recommended

IAM Permissions

The IAM user or role requires:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "s3:PutObject",
    "Resource": "arn:aws:s3:::my-events-bucket/*"
  }]
}