Skip to main content
POST
/
contacts
/
{id}
/
payment-email
Link a payment email to a contact
curl --request POST \
  --url https://api.getfernand.com/contacts/{id}/payment-email \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data '
{
  "source": "STRIPE",
  "email": "billing@piedpiper.com"
}
'
import requests

url = "https://api.getfernand.com/contacts/{id}/payment-email"

payload = {
"source": "STRIPE",
"email": "billing@piedpiper.com"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({source: 'STRIPE', email: 'billing@piedpiper.com'})
};

fetch('https://api.getfernand.com/contacts/{id}/payment-email', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.getfernand.com/contacts/{id}/payment-email",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'source' => 'STRIPE',
'email' => 'billing@piedpiper.com'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
require 'uri'
require 'net/http'

url = URI("https://api.getfernand.com/contacts/{id}/payment-email")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"source\": \"STRIPE\",\n \"email\": \"billing@piedpiper.com\"\n}"

response = http.request(request)
puts response.read_body
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.getfernand.com/contacts/{id}/payment-email"

payload := strings.NewReader("{\n \"source\": \"STRIPE\",\n \"email\": \"billing@piedpiper.com\"\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
using RestSharp;


var options = new RestClientOptions("https://api.getfernand.com/contacts/{id}/payment-email");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("X-API-Key", "<api-key>");
request.AddJsonBody("{\n \"source\": \"STRIPE\",\n \"email\": \"billing@piedpiper.com\"\n}", false);
var response = await client.PostAsync(request);

Console.WriteLine("{0}", response.Content);
HttpResponse<String> response = Unirest.post("https://api.getfernand.com/contacts/{id}/payment-email")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"source\": \"STRIPE\",\n \"email\": \"billing@piedpiper.com\"\n}")
.asString();
{
  "subscription_start": "2023-11-07T05:31:56Z",
  "financials": {}
}
{
"error": "<string>"
}
{
"error": "<string>"
}
Associates a payment email from a payment processor (Stripe, Paddle, or Lemon Squeezy) with a contact. If the payment email differs from the contact’s primary email, it creates or updates the payment email link. The endpoint then either propagates existing financial data or triggers an asynchronous task to fetch and propagate financial information from the payment processor. Returns financial data immediately if available, otherwise returns empty response while processing continues in the background.

Authorizations

X-API-Key
string
header
required

Authenticate your account by including your secret key in API requests. You can manage your API keys in the Dashboard.

Authentication to the API is performed by using the HTTP Header X-API-Key.

Path Parameters

id
integer
required

ID of the contact to link the payment email to.

Body

application/json
source
enum<string>
required

Payment processor source (case-insensitive, will be converted to uppercase).

Available options:
STRIPE,
PADDLE,
LEMON
Example:

"STRIPE"

email
string<email>
required

Payment email address to link to the contact.

Example:

"billing@piedpiper.com"

Response

Payment email linked successfully with financial data returned.

subscription_status
enum<string> | null
Available options:
active,
past_due,
unpaid,
canceled,
churned,
incomplete,
trialing
subscription_start
string<date-time> | null
financials
object | null