Send Card
curl --request POST \
--url https://app.cardclan.io/api/integration/send-card \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"card": "60f7b2b5b8f4a20015a4f5a5",
"integrationId": "60f7b2b5b8f4a20015a4f5a7",
"mergeTags": [
{
"name": "John Doe",
"email": "john@example.com",
"company": "Acme Corp",
"position": "Marketing Manager"
}
],
"emailAccount": "CardClan"
}
'import requests
url = "https://app.cardclan.io/api/integration/send-card"
payload = {
"card": "60f7b2b5b8f4a20015a4f5a5",
"integrationId": "60f7b2b5b8f4a20015a4f5a7",
"mergeTags": [
{
"name": "John Doe",
"email": "john@example.com",
"company": "Acme Corp",
"position": "Marketing Manager"
}
],
"emailAccount": "CardClan"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
card: '60f7b2b5b8f4a20015a4f5a5',
integrationId: '60f7b2b5b8f4a20015a4f5a7',
mergeTags: [
{
name: 'John Doe',
email: 'john@example.com',
company: 'Acme Corp',
position: 'Marketing Manager'
}
],
emailAccount: 'CardClan'
})
};
fetch('https://app.cardclan.io/api/integration/send-card', 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://app.cardclan.io/api/integration/send-card",
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([
'card' => '60f7b2b5b8f4a20015a4f5a5',
'integrationId' => '60f7b2b5b8f4a20015a4f5a7',
'mergeTags' => [
[
'name' => 'John Doe',
'email' => 'john@example.com',
'company' => 'Acme Corp',
'position' => 'Marketing Manager'
]
],
'emailAccount' => 'CardClan'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.cardclan.io/api/integration/send-card"
payload := strings.NewReader("{\n \"card\": \"60f7b2b5b8f4a20015a4f5a5\",\n \"integrationId\": \"60f7b2b5b8f4a20015a4f5a7\",\n \"mergeTags\": [\n {\n \"name\": \"John Doe\",\n \"email\": \"john@example.com\",\n \"company\": \"Acme Corp\",\n \"position\": \"Marketing Manager\"\n }\n ],\n \"emailAccount\": \"CardClan\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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))
}HttpResponse<String> response = Unirest.post("https://app.cardclan.io/api/integration/send-card")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"card\": \"60f7b2b5b8f4a20015a4f5a5\",\n \"integrationId\": \"60f7b2b5b8f4a20015a4f5a7\",\n \"mergeTags\": [\n {\n \"name\": \"John Doe\",\n \"email\": \"john@example.com\",\n \"company\": \"Acme Corp\",\n \"position\": \"Marketing Manager\"\n }\n ],\n \"emailAccount\": \"CardClan\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.cardclan.io/api/integration/send-card")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"card\": \"60f7b2b5b8f4a20015a4f5a5\",\n \"integrationId\": \"60f7b2b5b8f4a20015a4f5a7\",\n \"mergeTags\": [\n {\n \"name\": \"John Doe\",\n \"email\": \"john@example.com\",\n \"company\": \"Acme Corp\",\n \"position\": \"Marketing Manager\"\n }\n ],\n \"emailAccount\": \"CardClan\"\n}"
response = http.request(request)
puts response.read_body{
"message": "Card successfully sent to recipient: john@example.com",
"status": true,
"recipient_id": "60f7b2b5b8f4a20015a4f5a8",
"tracking_url": "https://cardclan.com/api/analytics/fetchImage/60f7b2b5b8f4a20015a4f5a8"
}{
"error": "Bad Request",
"message": "Card ID is required",
"statusCode": 400,
"timestamp": "2024-01-15T10:30:00.000Z"
}Integration API
Send Card
Sends a personalized card to a recipient via email
POST
/
integration
/
send-card
Send Card
curl --request POST \
--url https://app.cardclan.io/api/integration/send-card \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"card": "60f7b2b5b8f4a20015a4f5a5",
"integrationId": "60f7b2b5b8f4a20015a4f5a7",
"mergeTags": [
{
"name": "John Doe",
"email": "john@example.com",
"company": "Acme Corp",
"position": "Marketing Manager"
}
],
"emailAccount": "CardClan"
}
'import requests
url = "https://app.cardclan.io/api/integration/send-card"
payload = {
"card": "60f7b2b5b8f4a20015a4f5a5",
"integrationId": "60f7b2b5b8f4a20015a4f5a7",
"mergeTags": [
{
"name": "John Doe",
"email": "john@example.com",
"company": "Acme Corp",
"position": "Marketing Manager"
}
],
"emailAccount": "CardClan"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
card: '60f7b2b5b8f4a20015a4f5a5',
integrationId: '60f7b2b5b8f4a20015a4f5a7',
mergeTags: [
{
name: 'John Doe',
email: 'john@example.com',
company: 'Acme Corp',
position: 'Marketing Manager'
}
],
emailAccount: 'CardClan'
})
};
fetch('https://app.cardclan.io/api/integration/send-card', 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://app.cardclan.io/api/integration/send-card",
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([
'card' => '60f7b2b5b8f4a20015a4f5a5',
'integrationId' => '60f7b2b5b8f4a20015a4f5a7',
'mergeTags' => [
[
'name' => 'John Doe',
'email' => 'john@example.com',
'company' => 'Acme Corp',
'position' => 'Marketing Manager'
]
],
'emailAccount' => 'CardClan'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.cardclan.io/api/integration/send-card"
payload := strings.NewReader("{\n \"card\": \"60f7b2b5b8f4a20015a4f5a5\",\n \"integrationId\": \"60f7b2b5b8f4a20015a4f5a7\",\n \"mergeTags\": [\n {\n \"name\": \"John Doe\",\n \"email\": \"john@example.com\",\n \"company\": \"Acme Corp\",\n \"position\": \"Marketing Manager\"\n }\n ],\n \"emailAccount\": \"CardClan\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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))
}HttpResponse<String> response = Unirest.post("https://app.cardclan.io/api/integration/send-card")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"card\": \"60f7b2b5b8f4a20015a4f5a5\",\n \"integrationId\": \"60f7b2b5b8f4a20015a4f5a7\",\n \"mergeTags\": [\n {\n \"name\": \"John Doe\",\n \"email\": \"john@example.com\",\n \"company\": \"Acme Corp\",\n \"position\": \"Marketing Manager\"\n }\n ],\n \"emailAccount\": \"CardClan\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.cardclan.io/api/integration/send-card")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"card\": \"60f7b2b5b8f4a20015a4f5a5\",\n \"integrationId\": \"60f7b2b5b8f4a20015a4f5a7\",\n \"mergeTags\": [\n {\n \"name\": \"John Doe\",\n \"email\": \"john@example.com\",\n \"company\": \"Acme Corp\",\n \"position\": \"Marketing Manager\"\n }\n ],\n \"emailAccount\": \"CardClan\"\n}"
response = http.request(request)
puts response.read_body{
"message": "Card successfully sent to recipient: john@example.com",
"status": true,
"recipient_id": "60f7b2b5b8f4a20015a4f5a8",
"tracking_url": "https://cardclan.com/api/analytics/fetchImage/60f7b2b5b8f4a20015a4f5a8"
}{
"error": "Bad Request",
"message": "Card ID is required",
"statusCode": 400,
"timestamp": "2024-01-15T10:30:00.000Z"
}Sends a personalized card to a recipient via email. This is the core action endpoint that delivers your cards with dynamic content based on merge tags.
Key Features
- Personalization: Replace merge tags with recipient-specific data
- Email Delivery: Send via your configured email accounts or CardClan’s default
- Tracking: Get unique tracking URLs for engagement analytics
- Error Handling: Robust validation and error reporting
Request Parameters
string
required
The ID of the card you want to send. Get available cards using the Get Cards endpoint.
string
required
Integration configuration ID that links your card to workflow settings. Create one using the Create Integration
Config endpoint.
array
required
Array containing recipient data for personalization. Must contain at least one object with
name and email fields.string
Email account to send from. Use
"CardClan" for default CardClan email, or provide an email account ID from Get Email
Accounts.Response Details
string
Human-readable success or failure message
boolean
true if card was sent successfully, false if sending failedstring
Unique identifier for this card delivery instance, used for tracking
string
URL that tracks when the recipient opens the card email
Response Example
Success Response
{
"message": "Card sent successfully!",
"status": true,
"recipient_id": "60f7b2b5b8f4a20015a4f5a9",
"tracking_url": "https://app.cardclan.io/track/email/abc123def456"
}
Error Response
{
"message": "Card sending failed: Invalid email address",
"status": false
}
Authorizations
Enter your CardClan integration key
Body
application/json
Card ID to send
Example:
"60f7b2b5b8f4a20015a4f5a5"
Integration configuration ID
Example:
"60f7b2b5b8f4a20015a4f5a7"
Array of merge tag objects with recipient data
Minimum array length:
1Show child attributes
Show child attributes
Email account ID or 'CardClan' for default
Example:
"CardClan"
Was this page helpful?