AWS Kinesis

Stream events to an Amazon Kinesis Data Stream.

Creating a Kinesis 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_kinesis",
  "topics": ["orders"],
  "config": {
    "stream_name": "my-stream",
    "region": "us-east-1"
  },
  "credentials": {
    "key": "<AWS_ACCESS_KEY_ID>",
    "secret": "<AWS_SECRET_ACCESS_KEY>"
  }
}'

Configuration

Config

FieldTypeRequiredDescription
config.stream_namestringYesThe Kinesis stream name
config.regionstringYesAWS region (e.g., us-east-1)
config.endpointstringNoCustom endpoint URL (for LocalStack, etc.)
config.partition_key_templatestringNoJMESPath expression for the partition key

Credentials

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

Record Format

By default, each Kinesis record includes both metadata and the event's data field:

{
  "metadata": {
    "event-id": "evt_123",
    "topic": "orders",
    "timestamp": "1704067200",
    "source": "checkout-service"
  },
  "data": {
    "order_id": "123",
    "status": "created"
  }
}

Configure DESTINATIONS_AWS_KINESIS_METADATA_IN_PAYLOAD=false in the Config API or in Hookdeck Outpost Destinations settings to send only the event's data field (no metadata wrapper).

Set DESTINATIONS_AWS_KINESIS_METADATA_IN_PAYLOAD=false to send only the event's data field (no metadata wrapper).

Partition Key

By default, the event ID is used as the partition key. Customize it with a JMESPath expression:

{
  "config": {
    "stream_name": "my-stream",
    "region": "us-east-1",
    "partition_key_template": "data.customer_id"
  }
}

IAM Permissions

The IAM user or role requires:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "kinesis:PutRecord",
    "Resource": "arn:aws:kinesis:*:*:stream/my-stream"
  }]
}