infoOverview
About this API
Send a transactional email to a single recipient using an API key.
keySecurity
Authentication
Include your API credential in the request header. Keep credentials on the server and never expose them in client-side applications.
Locationheader
Field name
Authorization: Bearer <TOKEN>Example value
YOUR_ACCESS_TOKENuploadInput
Request Body
Send a application/json payload. Replace placeholder values with data from your integration.
Top-Level Fields
NameTypeRequirementDescription
tostringRequiredRecipient email address.fromstringRequiredSender email address.contentstringRequiredEmail body content (HTML or text).subjectstringRequiredEmail subject line.fromNamestringNot specifiedDisplay name of the sender.attachmentsarrayNot specifiedOptional array of attachments as base64-encoded content.{}
{
"type": "object",
"required": [
"from",
"to",
"subject",
"content"
],
"properties": {
"to": {
"type": "string",
"format": "email",
"example": "user@example.com",
"description": "Recipient email address."
},
"from": {
"type": "string",
"format": "email",
"example": "no-reply@example.com",
"description": "Sender email address."
},
"content": {
"type": "string",
"example": "<p>Hello, welcome to Pinnacle Email!</p>",
"description": "Email body content (HTML or text)."
},
"subject": {
"type": "string",
"example": "Welcome to Pinnacle Email",
"description": "Email subject line."
},
"fromName": {
"type": "string",
"example": "Pinnacle Support",
"nullable": true,
"description": "Display name of the sender."
},
"attachments": {
"type": "array",
"items": {
"type": "object",
"required": [
"filename",
"content"
],
"properties": {
"content": {
"type": "string",
"example": "JVBERi0xLjQKJ...",
"description": "Base64-encoded file content."
},
"filename": {
"type": "string",
"example": "invoice.pdf"
}
}
},
"nullable": true,
"description": "Optional array of attachments as base64-encoded content."
}
}
}
codeIntegration
Code Examples
Select your language and customize the request URL. Credential placeholders are intentionally preserved so secrets never appear in generated samples.
shield_lockCredentials protectedAdd secrets only in your secure server environment.
curl --request POST 'https://email.1spoc.com/api/transactional-email/send' \
--header 'Authorization: Bearer <TOKEN>' \
--header 'Content-Type: application/json' \
--data '{}'
const response = await fetch('https://email.1spoc.com/api/transactional-email/send', {
method: 'POST',
headers: {
"Authorization": "Bearer <TOKEN>",
"Content-Type": "application/json"
},
body: JSON.stringify({})
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
console.log(data);
const response = await fetch('https://email.1spoc.com/api/transactional-email/send', {
method: 'POST',
headers: {
"Authorization": "Bearer <TOKEN>",
"Content-Type": "application/json"
},
body: JSON.stringify({})
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
console.log(data);
import json
import requests
url = 'https://email.1spoc.com/api/transactional-email/send'
headers = {
"Authorization": "Bearer <TOKEN>",
"Content-Type": "application/json"
}
payload = json.loads(r'''{}''')
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
var client = HttpClient.newHttpClient();
String body = """
{}
""";
var request = HttpRequest.newBuilder(URI.create("https://email.1spoc.com/api/transactional-email/send"))
.header("Authorization", "Bearer <TOKEN>")
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(body))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
<?php
$curl = curl_init();
$payload = '{}';
curl_setopt_array($curl, [
CURLOPT_URL => 'https://email.1spoc.com/api/transactional-email/send',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ["Authorization: Bearer <TOKEN>","Content-Type: application/json"],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($curl);
if ($response === false) throw new Exception(curl_error($curl));
curl_close($curl);
echo $response;
using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = AuthenticationHeaderValue.Parse("Bearer <TOKEN>");
var json = """
{}
""";
using var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://email.1spoc.com/api/transactional-email/send", content);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
package main
import (
"fmt"
"io"
"net/http"
"bytes"
)
func main() {
request, err := http.NewRequest("POST", "https://email.1spoc.com/api/transactional-email/send", bytes.NewBufferString("{}"))
if err != nil { panic(err) }
request.Header.Set("Content-Type", "application/json")
request.Header.Set("Accept", "application/json")
request.Header.Set("Authorization", "Bearer <TOKEN>")
response, err := http.DefaultClient.Do(request)
if err != nil { panic(err) }
defer response.Body.Close()
data, err := io.ReadAll(response.Body)
if err != nil { panic(err) }
if response.StatusCode >= 400 { panic(fmt.Sprintf("HTTP %d: %s", response.StatusCode, data)) }
fmt.Println(string(data))
}
downloadOutput
Response
A successful request returns the documented response payload. Delivery and asynchronous events may arrive separately through configured webhooks.
{}
{
"type": "object",
"properties": {
"message": {
"type": "string",
"example": "Transactional email request accepted."
},
"requestId": {
"type": "string",
"format": "uuid",
"example": "550e8400-e29b-41d4-a716-446655440000"
}
}
}
ruleHTTP Responses
Status Codes
200Transactional email request accepted and queued.400Validation error: missing/invalid fields, invalid email addresses, unverified sender domain, or blacklisted recipient domain.401Unauthorized (missing or invalid API key, or no user).500Internal server error.