Create a postcard
curl --request POST \
--url https://sendmypaper.com/v1/postcards \
--header 'Content-Type: application/json' \
--data '
{
"size": "4x6",
"to": {
"name": "Sam Rivera",
"line1": "12 Oak St",
"city": "Austin",
"state": "TX",
"zip": "78701"
},
"from": {
"name": "Alex Kim",
"line1": "88 Pine Ave",
"city": "Denver",
"state": "CO",
"zip": "80202"
},
"content": {
"front_headline": "Happy birthday, Sam!",
"front_theme": "sunset",
"message": "Thirty looks great on you."
},
"customer_email": "alex@example.com"
}
'import requests
url = "https://sendmypaper.com/v1/postcards"
payload = {
"size": "4x6",
"to": {
"name": "Sam Rivera",
"line1": "12 Oak St",
"city": "Austin",
"state": "TX",
"zip": "78701"
},
"from": {
"name": "Alex Kim",
"line1": "88 Pine Ave",
"city": "Denver",
"state": "CO",
"zip": "80202"
},
"content": {
"front_headline": "Happy birthday, Sam!",
"front_theme": "sunset",
"message": "Thirty looks great on you."
},
"customer_email": "alex@example.com"
}
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({
size: '4x6',
to: {
name: 'Sam Rivera',
line1: '12 Oak St',
city: 'Austin',
state: 'TX',
zip: '78701'
},
from: {
name: 'Alex Kim',
line1: '88 Pine Ave',
city: 'Denver',
state: 'CO',
zip: '80202'
},
content: {
front_headline: 'Happy birthday, Sam!',
front_theme: 'sunset',
message: 'Thirty looks great on you.'
},
customer_email: 'alex@example.com'
})
};
fetch('https://sendmypaper.com/v1/postcards', 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/postcards",
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([
'size' => '4x6',
'to' => [
'name' => 'Sam Rivera',
'line1' => '12 Oak St',
'city' => 'Austin',
'state' => 'TX',
'zip' => '78701'
],
'from' => [
'name' => 'Alex Kim',
'line1' => '88 Pine Ave',
'city' => 'Denver',
'state' => 'CO',
'zip' => '80202'
],
'content' => [
'front_headline' => 'Happy birthday, Sam!',
'front_theme' => 'sunset',
'message' => 'Thirty looks great on you.'
],
'customer_email' => 'alex@example.com'
]),
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/postcards"
payload := strings.NewReader("{\n \"size\": \"4x6\",\n \"to\": {\n \"name\": \"Sam Rivera\",\n \"line1\": \"12 Oak St\",\n \"city\": \"Austin\",\n \"state\": \"TX\",\n \"zip\": \"78701\"\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 \"front_headline\": \"Happy birthday, Sam!\",\n \"front_theme\": \"sunset\",\n \"message\": \"Thirty looks great on you.\"\n },\n \"customer_email\": \"alex@example.com\"\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/postcards")
.header("Content-Type", "application/json")
.body("{\n \"size\": \"4x6\",\n \"to\": {\n \"name\": \"Sam Rivera\",\n \"line1\": \"12 Oak St\",\n \"city\": \"Austin\",\n \"state\": \"TX\",\n \"zip\": \"78701\"\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 \"front_headline\": \"Happy birthday, Sam!\",\n \"front_theme\": \"sunset\",\n \"message\": \"Thirty looks great on you.\"\n },\n \"customer_email\": \"alex@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sendmypaper.com/v1/postcards")
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 \"size\": \"4x6\",\n \"to\": {\n \"name\": \"Sam Rivera\",\n \"line1\": \"12 Oak St\",\n \"city\": \"Austin\",\n \"state\": \"TX\",\n \"zip\": \"78701\"\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 \"front_headline\": \"Happy birthday, Sam!\",\n \"front_theme\": \"sunset\",\n \"message\": \"Thirty looks great on you.\"\n },\n \"customer_email\": \"alex@example.com\"\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 postcard
Creates a 4×6 or 6×9 postcard order in awaiting_payment and returns a checkout_url. Send the person to it; the postcard is reviewed, printed and mailed after payment.
POST
/
postcards
Create a postcard
curl --request POST \
--url https://sendmypaper.com/v1/postcards \
--header 'Content-Type: application/json' \
--data '
{
"size": "4x6",
"to": {
"name": "Sam Rivera",
"line1": "12 Oak St",
"city": "Austin",
"state": "TX",
"zip": "78701"
},
"from": {
"name": "Alex Kim",
"line1": "88 Pine Ave",
"city": "Denver",
"state": "CO",
"zip": "80202"
},
"content": {
"front_headline": "Happy birthday, Sam!",
"front_theme": "sunset",
"message": "Thirty looks great on you."
},
"customer_email": "alex@example.com"
}
'import requests
url = "https://sendmypaper.com/v1/postcards"
payload = {
"size": "4x6",
"to": {
"name": "Sam Rivera",
"line1": "12 Oak St",
"city": "Austin",
"state": "TX",
"zip": "78701"
},
"from": {
"name": "Alex Kim",
"line1": "88 Pine Ave",
"city": "Denver",
"state": "CO",
"zip": "80202"
},
"content": {
"front_headline": "Happy birthday, Sam!",
"front_theme": "sunset",
"message": "Thirty looks great on you."
},
"customer_email": "alex@example.com"
}
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({
size: '4x6',
to: {
name: 'Sam Rivera',
line1: '12 Oak St',
city: 'Austin',
state: 'TX',
zip: '78701'
},
from: {
name: 'Alex Kim',
line1: '88 Pine Ave',
city: 'Denver',
state: 'CO',
zip: '80202'
},
content: {
front_headline: 'Happy birthday, Sam!',
front_theme: 'sunset',
message: 'Thirty looks great on you.'
},
customer_email: 'alex@example.com'
})
};
fetch('https://sendmypaper.com/v1/postcards', 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/postcards",
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([
'size' => '4x6',
'to' => [
'name' => 'Sam Rivera',
'line1' => '12 Oak St',
'city' => 'Austin',
'state' => 'TX',
'zip' => '78701'
],
'from' => [
'name' => 'Alex Kim',
'line1' => '88 Pine Ave',
'city' => 'Denver',
'state' => 'CO',
'zip' => '80202'
],
'content' => [
'front_headline' => 'Happy birthday, Sam!',
'front_theme' => 'sunset',
'message' => 'Thirty looks great on you.'
],
'customer_email' => 'alex@example.com'
]),
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/postcards"
payload := strings.NewReader("{\n \"size\": \"4x6\",\n \"to\": {\n \"name\": \"Sam Rivera\",\n \"line1\": \"12 Oak St\",\n \"city\": \"Austin\",\n \"state\": \"TX\",\n \"zip\": \"78701\"\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 \"front_headline\": \"Happy birthday, Sam!\",\n \"front_theme\": \"sunset\",\n \"message\": \"Thirty looks great on you.\"\n },\n \"customer_email\": \"alex@example.com\"\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/postcards")
.header("Content-Type", "application/json")
.body("{\n \"size\": \"4x6\",\n \"to\": {\n \"name\": \"Sam Rivera\",\n \"line1\": \"12 Oak St\",\n \"city\": \"Austin\",\n \"state\": \"TX\",\n \"zip\": \"78701\"\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 \"front_headline\": \"Happy birthday, Sam!\",\n \"front_theme\": \"sunset\",\n \"message\": \"Thirty looks great on you.\"\n },\n \"customer_email\": \"alex@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sendmypaper.com/v1/postcards")
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 \"size\": \"4x6\",\n \"to\": {\n \"name\": \"Sam Rivera\",\n \"line1\": \"12 Oak St\",\n \"city\": \"Austin\",\n \"state\": \"TX\",\n \"zip\": \"78701\"\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 \"front_headline\": \"Happy birthday, Sam!\",\n \"front_theme\": \"sunset\",\n \"message\": \"Thirty looks great on you.\"\n },\n \"customer_email\": \"alex@example.com\"\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
Show child attributes
Show child attributes
Return address, printed on the card. Required.
Show child attributes
Show child attributes
Provide front_image_url or front_headline.
Show child attributes
Show child attributes
Available options:
4x6, 6x9 Alternative to the Idempotency-Key header
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