Emails
Send partner and team emails from your own provider and domain, with your branding, in each recipient's language, and customize any template.
Referalli emails your partners and your team when something needs their attention: a payout was sent or failed, an invitation or a contract arrived, a partner was approved, a webhook endpoint was disabled, a tax form is ready. Every email comes from your own email provider and domain, carries your branding, and is written in the recipient's language.
Connect your provider
Referalli never sends from a shared account. Bring your own key from Resend, Brevo or Postmark:
curl -X PUT https://referalli.com/v1/email/settings \
-H "Authorization: Bearer $KEY" -H "content-type: application/json" \
-d '{
"provider": "resend",
"apiKey": "re_...",
"fromAddress": "partners@yourbrand.com",
"fromName": "YourBrand Partners",
"replyTo": "partners-help@yourbrand.com",
"defaultLocale": "en",
"logoUrl": "https://yourbrand.com/logo.png",
"primaryColor": "#0e9f6e"
}'Field | Meaning |
|---|---|
|
|
| Write-only: it's stored encrypted and never returned ( |
| An address on a domain you've verified with your provider. |
| Optional sender name and reply-to address. |
| The language for recipients who haven't picked one: |
| Branding for the email header and button. The colour is |
Owners and admins only. GET /v1/email/settings returns the same fields plus domainStatus.
POST /v1/email/settings/verify-domain asks your provider whether the domain of fromAddress is verified and stores the answer: verified, pending, failed or unknown. Resend and Brevo answer with the sending key; Postmark needs an account token, so it reports unknown (Postmark still refuses unverified senders).
Until you add a key, emails use the operator's provider if one is configured, and otherwise aren't sent. In-app notifications are always created.
Languages
Each email goes out in the recipient's language: the one they picked in the dashboard or partner portal language menu, else your defaultLocale, else English. The menus save the choice with PUT /v1/me/locale and PUT /v1/partner/locale ({ "locale": "de" }). Amounts are formatted for that language, so €123.45 becomes 123,45 € in German.
Templates
Every email has a default template in all 10 languages. GET /v1/email/templates lists each event with its placeholders, and for every language the default and your override, if you have one.
Event | Sent to | Placeholders |
|---|---|---|
| partner |
|
| your team (owner) |
|
| partner |
|
| partner |
|
| partner |
|
| your team (owner) |
|
| partner |
|
Override one event in one language:
curl -X PUT https://referalli.com/v1/email/templates/payout_sent/de \
-H "Authorization: Bearer $KEY" -H "content-type: application/json" \
-d '{
"subject": "Deine Auszahlung über {amount} ist unterwegs",
"text": "Hallo! {merchant} hat dir {amount} überwiesen.\n\nDetails: {url}",
"html": "<p>Hallo! <strong>{merchant}</strong> hat dir {amount} überwiesen.</p><p><a href=\"{url}\">Details ansehen</a></p>"
}'subjectandtextare required;htmlis optional, and without it the HTML is built from the text.Values are HTML-escaped wherever they appear in the HTML, so a program name can't inject markup. Your HTML is kept, except scripts, frames, forms, event handlers and
javascript:links, which are removed before sending.Every email is wrapped in your branded layout (logo or name, colour, footer).
Other languages keep the default.
DELETE /v1/email/templates/payout_sent/dereturns that language to the default.
Preview and test
POST /v1/email/previewwith{ "event": "payout_sent", "locale": "de" }renders the stored template with sample values; add"draft": { "subject", "text", "html" }to preview an unsaved edit. The response hassubject,text,html,localeandsource(overrideordefault).POST /v1/email/testwith{ "event", "locale", "to": "you@yourbrand.com" }sends that email with sample values through your provider. A provider refusal comes back as400with the provider's reason.
The dashboard has all of this under Settings → Emails.