Developers

Estamail Partner API

Give the tenants and members of your SaaS platform free basic email signatures. Register a tenant, provision its members, and sign them in with one click.

Overview

The API is a simple JSON REST API. Your server calls it with a secret API key. Your platform has tenants (organisations), and each tenant has members (people). You use your own IDs for both, so you never need to store ours.

Each provisioned member gets an Estamail account on the free Basic plan, with the email already verified. Base URL:

https://app.estamail.waestaltd.com/api/v1

Authentication

Send your API key in the x-api-key header (or as Authorization: Bearer ...). Keys start with em_. Call the API from your server only. Never put the key in a browser or mobile app.

curl https://app.estamail.waestaltd.com/api/v1/tenants \
  -H "x-api-key: em_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"external_id":"acme-123","name":"Acme Ltd"}'

To get a key, contact us with your platform name and a contact email. Keys are shown once when issued, so store yours securely. We can deactivate a key at any time, and you can ask for a replacement if one leaks.

Tenants

POST/tenants

Register a tenant. Safe to call again: an existing external_id is updated, not duplicated.

{ "external_id": "acme-123", "name": "Acme Ltd" }

Returns 201 with id, external_id, name, created_at, updated_at.

DELETE/tenants/{tenantExternalId}

Remove a tenant and its member records. Returns 204. Members keep their Estamail accounts.

Members

POST/tenants/{tenantExternalId}/members

Provision a member. Creates the Estamail account and the free Basic subscription. Idempotent: calling again with the same member external_id returns the existing record.

{ "external_id": "user-42", "email": "jane@acme.com", "full_name": "Jane Doe" }

Returns 201 (new) or 200 (already existed) with id, external_id, email, full_name, supabase_user_id, created_at.

GET/tenants/{tenantExternalId}/members

List the tenant's members. Returns { "data": [ ... ] }.

DELETE/tenants/{tenantExternalId}/members/{memberExternalId}

Remove a member from the tenant. Returns 204.

One-click sign-in

POST/tenants/{tenantExternalId}/members/{memberExternalId}/link

Generate a single-use sign-in link. Redirect your user to it and they land in Estamail already signed in. Optionally choose where they land (the URL must be one we allow).

{ "redirect_to": "https://app.estamail.waestaltd.com/builder" }

Returns { "link": "https://...", "email": "jane@acme.com" }. Links are single-use and short-lived, so generate one at the moment the user clicks.

Typical integration

  1. When a customer signs up on your platform, call POST /tenants.
  2. When someone joins that customer, call POST /tenants/…/members.
  3. Add an "Email signature" button in your app. On click, your server calls …/link and redirects the user to the returned link.
  4. When a member or customer leaves, call the matching DELETE.

Errors and limits

Errors return JSON: { "error": "message" }.

  • 400 missing or invalid fields
  • 401 missing, invalid or deactivated API key
  • 404 tenant or member not found
  • 429 too many requests. Wait the number of seconds in Retry-After.
  • 500 server error. Safe to retry; all create calls are idempotent.

Requests are rate limited per IP address. Contact us if you need higher limits for a bulk import.

What members get

Free Basic plan: the signature builder and a selection of templates. Members can upgrade to a paid plan at any time from inside Estamail. Questions? Get in touch.