Skip to content

Regions and limits

You choose your Region when you register: any Region where Amazon SES sends email. Your data stays in that Region, and only our deployment in that Region ever processes it. Install the template there.

We run the service in us-east-2 today, and in other Regions on request. If you register in a Region we don’t run in yet, your account stays pending and we’re told at once. We deploy the service in your Region, and then setup carries on; until then the console shows that you’re waiting for your Region. Your data is never processed in another Region in the meantime.

RegionNameStatusAPI base URL for API keys
us-east-2US East (Ohio)Runninghttps://api.rhinorelay.com/v1
us-east-1US East (N. Virginia)On requesthttps://api.us-east-1.rhinorelay.com/v1
us-west-1US West (N. California)On requesthttps://api.us-west-1.rhinorelay.com/v1
us-west-2US West (Oregon)On requesthttps://api.us-west-2.rhinorelay.com/v1
ca-central-1Canada (Central)On requesthttps://api.ca-central-1.rhinorelay.com/v1
sa-east-1South America (São Paulo)On requesthttps://api.sa-east-1.rhinorelay.com/v1
eu-west-1Europe (Ireland)On requesthttps://api.eu-west-1.rhinorelay.com/v1
eu-west-2Europe (London)On requesthttps://api.eu-west-2.rhinorelay.com/v1
eu-west-3Europe (Paris)On requesthttps://api.eu-west-3.rhinorelay.com/v1
eu-central-1Europe (Frankfurt)On requesthttps://api.eu-central-1.rhinorelay.com/v1
eu-north-1Europe (Stockholm)On requesthttps://api.eu-north-1.rhinorelay.com/v1
eu-south-1Europe (Milan)On requesthttps://api.eu-south-1.rhinorelay.com/v1
il-central-1Israel (Tel Aviv)On requesthttps://api.il-central-1.rhinorelay.com/v1
me-south-1Middle East (Bahrain)On requesthttps://api.me-south-1.rhinorelay.com/v1
af-south-1Africa (Cape Town)On requesthttps://api.af-south-1.rhinorelay.com/v1
ap-south-1Asia Pacific (Mumbai)On requesthttps://api.ap-south-1.rhinorelay.com/v1
ap-northeast-1Asia Pacific (Tokyo)On requesthttps://api.ap-northeast-1.rhinorelay.com/v1
ap-northeast-2Asia Pacific (Seoul)On requesthttps://api.ap-northeast-2.rhinorelay.com/v1
ap-northeast-3Asia Pacific (Osaka)On requesthttps://api.ap-northeast-3.rhinorelay.com/v1
ap-southeast-1Asia Pacific (Singapore)On requesthttps://api.ap-southeast-1.rhinorelay.com/v1
ap-southeast-2Asia Pacific (Sydney)On requesthttps://api.ap-southeast-2.rhinorelay.com/v1
ap-southeast-3Asia Pacific (Jakarta)On requesthttps://api.ap-southeast-3.rhinorelay.com/v1

Use your Region’s API base URL with API keys: https://api.rhinorelay.com/v1 for us-east-2, and https://api.<region>.rhinorelay.com/v1 for any other Region. The console’s Setup page shows yours. A request to another Region’s host gets 421 wrong_region. SigV4 requests go to your Region’s own endpoint, shown on the console’s API keys page (see Authentication). SES sandbox status and quotas are also per Region, so request production access in the same Region.

Limit Value When you go over
Requests for your account 50 a second 429 rate_limited, with Retry-After
Requests from one IP address 1,000 per 5 minutes, at AWS WAF 429 from WAF
JSON request body 1 MB 413 batch_too_large
Contacts in POST /contacts/batch 1,000 413 batch_too_large
Page size (?limit=) 1 to 500, default 100 422 validation_failed
Idempotency keys Kept 24 hours A reused key with a different request gives 409 idempotency_conflict
Presigned upload and download links 1 hour; the response gives the exact expiry S3 refuses the link

Files never go through the API: CSV uploads and exports use presigned links to buckets in your own account. See Pagination and Idempotency.

Limit Value
Custom fields per contact 100
Field names 64 characters: letters, digits, _, . and -
Field values 1,024 characters
Tags per contact 200, each up to 100 characters
Soft bounces before a contact is marked bounced 3 in a row
Limit Value
Segment nesting 3 levels
Segment conditions 50 in all
Template HTML 512 KB, and the HTML and plain text together under 380 KB, since a version is stored as one item in your table. Over 102 KB you get a warning, because Gmail clips larger messages.
Subject line 998 characters
Email addresses Only ASCII before the @: Amazon SES can’t send to anything else, so such addresses are refused, saying why. Domains in any script are accepted (stored in their ASCII form, shown as written in the console).
Template versions returned The newest 20 with the template; all of them from GET /templates/{id}/versions, a page at a time
Test send recipients 10 addresses per request
Emails per queued batch 50
Our SES configuration sets in your account Two: rhino-relay-campaigns for every campaign, and rhino-relay-test for test sends. Campaigns are told apart by the tags on each email, so there’s no limit on how many you run.

Our work queues are shared by all clients and carry IDs only. We count the messages we take for your account from each queue in every 5-minute window. The limits are far above anything your own sending produces:

Queue Messages per 5 minutes, per client
Send (a message is a batch of up to 50 emails) 20,000
SES events 600,000
Imports 5,000

If your account goes over a limit, for example because something in your account publishes a flood of junk events:

  1. We stop taking your messages from that queue and set them aside, still IDs only, to replay when taking resumes. Set-aside messages are kept for up to 14 days.
  2. We email your account’s admins.
  3. Taking resumes by itself once a 5-minute window stays calm. We check every 5 minutes. Clicking Verify in the console resumes it straight away.

Other clients carry on as normal while your messages are held, and so do you if another client floods.

These are in your settings (GET /settings, PATCH /settings).

Setting Default What it does
pause.hardBounceRate 2% A campaign pauses when hard bounces pass this share of sent emails
pause.complaintRate 0.1% A campaign pauses when complaints pass this share of delivered emails
pause.minDelivered 1,000 Rates are checked only once this many emails are delivered
sunset.enabled false Turns on sunsetting: leaving unengaged contacts out of segments
sunset.minSends and sunset.inactiveDays 4 emails, 180 days With sunsetting on, a contact with at least this many emails and no human open or click for this long is left out of segments
quotaReserve 500 Emails of your SES daily quota kept free for test sends and other campaigns

Each plan includes a number of subscribed contacts. Unsubscribed and suppressed contacts don’t count. The SES production access request text asks AWS for the daily quota shown.

PlanSubscribed contactsSES daily quota to request
Starter25,00025,000
Growth150,000150,000
Scale500,000500,000

If a subscription ends, sending continues for a 30-day grace period. Then your account is read-only for 90 days: unsubscribe links, erasure, exports and reads keep working, and new campaigns and imports return 402 entitlement_inactive.

Terminal window
curl "$BASE/settings" -H "Authorization: Bearer $KEY"
curl "$BASE/health" -H "Authorization: Bearer $KEY"

Check it worked: the settings show your pause and sunset thresholds, and the quota and send_rate health checks show your SES daily quota and sending rate.