Create a letter
curl --request POST \
--url https://sendmypaper.com/v1/letters \
--header 'Content-Type: application/json' \
--data '
{
"to": {
"name": "Pat Lee",
"line1": "500 Main St",
"line2": "Apt 4",
"city": "Boston",
"state": "MA",
"zip": "02110"
},
"from": {
"name": "Alex Kim",
"line1": "88 Pine Ave",
"city": "Denver",
"state": "CO",
"zip": "80202"
},
"content": {
"body": "Dear Pat,\n\nThank you for fixing the roof so quickly.\n\nBest,\nAlex",
"font": "serif"
}
}
'import requests
url = "https://sendmypaper.com/v1/letters"
payload = {
"to": {
"name": "Pat Lee",
"line1": "500 Main St",
"line2": "Apt 4",
"city": "Boston",
"state": "MA",
"zip": "02110"
},
"from": {
"name": "Alex Kim",
"line1": "88 Pine Ave",
"city": "Denver",
"state": "CO",
"zip": "80202"
},
"content": {
"body": "Dear Pat,
Thank you for fixing the roof so quickly.
Best,
Alex",
"font": "serif"
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
to: {
name: 'Pat Lee',
line1: '500 Main St',
line2: 'Apt 4',
city: 'Boston',
state: 'MA',
zip: '02110'
},
from: {
name: 'Alex Kim',
line1: '88 Pine Ave',
city: 'Denver',
state: 'CO',
zip: '80202'
},
content: {
body: JSON.stringify('Dear Pat,\n\nThank you for fixing the roof so quickly.\n\nBest,\nAlex'),
font: 'serif'
}
})
};
fetch('https://sendmypaper.com/v1/letters', 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://sendmypaper.com/v1/letters",
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([
'to' => [
'name' => 'Pat Lee',
'line1' => '500 Main St',
'line2' => 'Apt 4',
'city' => 'Boston',
'state' => 'MA',
'zip' => '02110'
],
'from' => [
'name' => 'Alex Kim',
'line1' => '88 Pine Ave',
'city' => 'Denver',
'state' => 'CO',
'zip' => '80202'
],
'content' => [
'body' => 'Dear Pat,
Thank you for fixing the roof so quickly.
Best,
Alex',
'font' => 'serif'
]
]),
CURLOPT_HTTPHEADER => [
"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://sendmypaper.com/v1/letters"
payload := strings.NewReader("{\n \"to\": {\n \"name\": \"Pat Lee\",\n \"line1\": \"500 Main St\",\n \"line2\": \"Apt 4\",\n \"city\": \"Boston\",\n \"state\": \"MA\",\n \"zip\": \"02110\"\n },\n \"from\": {\n \"name\": \"Alex Kim\",\n \"line1\": \"88 Pine Ave\",\n \"city\": \"Denver\",\n \"state\": \"CO\",\n \"zip\": \"80202\"\n },\n \"content\": {\n \"body\": \"Dear Pat,\\n\\nThank you for fixing the roof so quickly.\\n\\nBest,\\nAlex\",\n \"font\": \"serif\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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://sendmypaper.com/v1/letters")
.header("Content-Type", "application/json")
.body("{\n \"to\": {\n \"name\": \"Pat Lee\",\n \"line1\": \"500 Main St\",\n \"line2\": \"Apt 4\",\n \"city\": \"Boston\",\n \"state\": \"MA\",\n \"zip\": \"02110\"\n },\n \"from\": {\n \"name\": \"Alex Kim\",\n \"line1\": \"88 Pine Ave\",\n \"city\": \"Denver\",\n \"state\": \"CO\",\n \"zip\": \"80202\"\n },\n \"content\": {\n \"body\": \"Dear Pat,\\n\\nThank you for fixing the roof so quickly.\\n\\nBest,\\nAlex\",\n \"font\": \"serif\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sendmypaper.com/v1/letters")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"to\": {\n \"name\": \"Pat Lee\",\n \"line1\": \"500 Main St\",\n \"line2\": \"Apt 4\",\n \"city\": \"Boston\",\n \"state\": \"MA\",\n \"zip\": \"02110\"\n },\n \"from\": {\n \"name\": \"Alex Kim\",\n \"line1\": \"88 Pine Ave\",\n \"city\": \"Denver\",\n \"state\": \"CO\",\n \"zip\": \"80202\"\n },\n \"content\": {\n \"body\": \"Dear Pat,\\n\\nThank you for fixing the roof so quickly.\\n\\nBest,\\nAlex\",\n \"font\": \"serif\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "ord_8k2m4qz7c1x9b3vd",
"object": "postcard",
"product": "postcard_4x6",
"status": "awaiting_payment",
"status_detail": "<string>",
"price": {
"amount_cents": 123,
"currency": "<string>",
"display": "<string>"
},
"to": {
"name": "<string>",
"line1": "<string>",
"city": "<string>",
"state": "CA",
"zip": "94105",
"company": "<string>",
"line2": "<string>"
},
"from": {
"name": "<string>",
"line1": "<string>",
"city": "<string>",
"state": "CA",
"zip": "94105",
"company": "<string>",
"line2": "<string>"
},
"content": {},
"checkout_url": "<string>",
"order_url": "<string>",
"preview_url": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"paid_at": "2023-11-07T05:31:56Z",
"mailed_at": "2023-11-07T05:31:56Z",
"events": [
{
"at": "<string>",
"status": "<string>",
"note": "<string>"
}
]
}{
"id": "ord_8k2m4qz7c1x9b3vd",
"object": "postcard",
"product": "postcard_4x6",
"status": "awaiting_payment",
"status_detail": "<string>",
"price": {
"amount_cents": 123,
"currency": "<string>",
"display": "<string>"
},
"to": {
"name": "<string>",
"line1": "<string>",
"city": "<string>",
"state": "CA",
"zip": "94105",
"company": "<string>",
"line2": "<string>"
},
"from": {
"name": "<string>",
"line1": "<string>",
"city": "<string>",
"state": "CA",
"zip": "94105",
"company": "<string>",
"line2": "<string>"
},
"content": {},
"checkout_url": "<string>",
"order_url": "<string>",
"preview_url": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"paid_at": "2023-11-07T05:31:56Z",
"mailed_at": "2023-11-07T05:31:56Z",
"events": [
{
"at": "<string>",
"status": "<string>",
"note": "<string>"
}
]
}{
"error": {
"type": "invalid_request",
"message": "<string>",
"fields": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}Create a letter
Creates a printed letter (up to ~3 pages, 8.5×11, #10 envelope) in awaiting_payment and returns a checkout_url.
POST
/
letters
Create a letter
curl --request POST \
--url https://sendmypaper.com/v1/letters \
--header 'Content-Type: application/json' \
--data '
{
"to": {
"name": "Pat Lee",
"line1": "500 Main St",
"line2": "Apt 4",
"city": "Boston",
"state": "MA",
"zip": "02110"
},
"from": {
"name": "Alex Kim",
"line1": "88 Pine Ave",
"city": "Denver",
"state": "CO",
"zip": "80202"
},
"content": {
"body": "Dear Pat,\n\nThank you for fixing the roof so quickly.\n\nBest,\nAlex",
"font": "serif"
}
}
'import requests
url = "https://sendmypaper.com/v1/letters"
payload = {
"to": {
"name": "Pat Lee",
"line1": "500 Main St",
"line2": "Apt 4",
"city": "Boston",
"state": "MA",
"zip": "02110"
},
"from": {
"name": "Alex Kim",
"line1": "88 Pine Ave",
"city": "Denver",
"state": "CO",
"zip": "80202"
},
"content": {
"body": "Dear Pat,
Thank you for fixing the roof so quickly.
Best,
Alex",
"font": "serif"
}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
to: {
name: 'Pat Lee',
line1: '500 Main St',
line2: 'Apt 4',
city: 'Boston',
state: 'MA',
zip: '02110'
},
from: {
name: 'Alex Kim',
line1: '88 Pine Ave',
city: 'Denver',
state: 'CO',
zip: '80202'
},
content: {
body: JSON.stringify('Dear Pat,\n\nThank you for fixing the roof so quickly.\n\nBest,\nAlex'),
font: 'serif'
}
})
};
fetch('https://sendmypaper.com/v1/letters', 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://sendmypaper.com/v1/letters",
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([
'to' => [
'name' => 'Pat Lee',
'line1' => '500 Main St',
'line2' => 'Apt 4',
'city' => 'Boston',
'state' => 'MA',
'zip' => '02110'
],
'from' => [
'name' => 'Alex Kim',
'line1' => '88 Pine Ave',
'city' => 'Denver',
'state' => 'CO',
'zip' => '80202'
],
'content' => [
'body' => 'Dear Pat,
Thank you for fixing the roof so quickly.
Best,
Alex',
'font' => 'serif'
]
]),
CURLOPT_HTTPHEADER => [
"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://sendmypaper.com/v1/letters"
payload := strings.NewReader("{\n \"to\": {\n \"name\": \"Pat Lee\",\n \"line1\": \"500 Main St\",\n \"line2\": \"Apt 4\",\n \"city\": \"Boston\",\n \"state\": \"MA\",\n \"zip\": \"02110\"\n },\n \"from\": {\n \"name\": \"Alex Kim\",\n \"line1\": \"88 Pine Ave\",\n \"city\": \"Denver\",\n \"state\": \"CO\",\n \"zip\": \"80202\"\n },\n \"content\": {\n \"body\": \"Dear Pat,\\n\\nThank you for fixing the roof so quickly.\\n\\nBest,\\nAlex\",\n \"font\": \"serif\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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://sendmypaper.com/v1/letters")
.header("Content-Type", "application/json")
.body("{\n \"to\": {\n \"name\": \"Pat Lee\",\n \"line1\": \"500 Main St\",\n \"line2\": \"Apt 4\",\n \"city\": \"Boston\",\n \"state\": \"MA\",\n \"zip\": \"02110\"\n },\n \"from\": {\n \"name\": \"Alex Kim\",\n \"line1\": \"88 Pine Ave\",\n \"city\": \"Denver\",\n \"state\": \"CO\",\n \"zip\": \"80202\"\n },\n \"content\": {\n \"body\": \"Dear Pat,\\n\\nThank you for fixing the roof so quickly.\\n\\nBest,\\nAlex\",\n \"font\": \"serif\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sendmypaper.com/v1/letters")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"to\": {\n \"name\": \"Pat Lee\",\n \"line1\": \"500 Main St\",\n \"line2\": \"Apt 4\",\n \"city\": \"Boston\",\n \"state\": \"MA\",\n \"zip\": \"02110\"\n },\n \"from\": {\n \"name\": \"Alex Kim\",\n \"line1\": \"88 Pine Ave\",\n \"city\": \"Denver\",\n \"state\": \"CO\",\n \"zip\": \"80202\"\n },\n \"content\": {\n \"body\": \"Dear Pat,\\n\\nThank you for fixing the roof so quickly.\\n\\nBest,\\nAlex\",\n \"font\": \"serif\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "ord_8k2m4qz7c1x9b3vd",
"object": "postcard",
"product": "postcard_4x6",
"status": "awaiting_payment",
"status_detail": "<string>",
"price": {
"amount_cents": 123,
"currency": "<string>",
"display": "<string>"
},
"to": {
"name": "<string>",
"line1": "<string>",
"city": "<string>",
"state": "CA",
"zip": "94105",
"company": "<string>",
"line2": "<string>"
},
"from": {
"name": "<string>",
"line1": "<string>",
"city": "<string>",
"state": "CA",
"zip": "94105",
"company": "<string>",
"line2": "<string>"
},
"content": {},
"checkout_url": "<string>",
"order_url": "<string>",
"preview_url": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"paid_at": "2023-11-07T05:31:56Z",
"mailed_at": "2023-11-07T05:31:56Z",
"events": [
{
"at": "<string>",
"status": "<string>",
"note": "<string>"
}
]
}{
"id": "ord_8k2m4qz7c1x9b3vd",
"object": "postcard",
"product": "postcard_4x6",
"status": "awaiting_payment",
"status_detail": "<string>",
"price": {
"amount_cents": 123,
"currency": "<string>",
"display": "<string>"
},
"to": {
"name": "<string>",
"line1": "<string>",
"city": "<string>",
"state": "CA",
"zip": "94105",
"company": "<string>",
"line2": "<string>"
},
"from": {
"name": "<string>",
"line1": "<string>",
"city": "<string>",
"state": "CA",
"zip": "94105",
"company": "<string>",
"line2": "<string>"
},
"content": {},
"checkout_url": "<string>",
"order_url": "<string>",
"preview_url": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"paid_at": "2023-11-07T05:31:56Z",
"mailed_at": "2023-11-07T05:31:56Z",
"events": [
{
"at": "<string>",
"status": "<string>",
"note": "<string>"
}
]
}{
"error": {
"type": "invalid_request",
"message": "<string>",
"fields": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}Headers
Any unique string. Retrying with the same key returns the original order instead of creating a duplicate.
Maximum string length:
120Body
application/json
Response
Idempotency-Key already used: the original order is returned
Example:
"ord_8k2m4qz7c1x9b3vd"
Available options:
postcard, letter Available options:
postcard_4x6, postcard_6x9, letter Available options:
awaiting_payment, paid, printing, mailed, cancelled, refunded Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Where the person pays. Null once paid or closed. Never expires.
Human-readable status page
Exact print preview
Show child attributes
Show child attributes