Place a checkout-mode shop order
Creates an order through the canonical transactional path (idempotent, snapshotted, outbox-emitting), attributed to the house reseller team. Re-checks coverage against the submitted address; unauthenticated.
curl --request POST \
--url https://api.offergrid.io/public/shop/orders \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"offerId": "<string>",
"metadata": {
"enrollment": {
"enrollmentType": "switch",
"esid": "10443720000000000",
"requestedStartDate": "2026-07-15"
}
}
}
],
"serviceAddress": {
"street": "123 Main St",
"city": "Austin",
"state": "TX",
"zipCode": "78701",
"unit": "Unit 4B",
"country": "US"
},
"customerInfo": {
"email": "jane@example.com",
"phone": "555-123-4567",
"firstName": "Jane",
"lastName": "Doe",
"fullName": "Jane Doe"
},
"notes": "<string>",
"idempotencyKey": "a1b2c3d4-checkout-attempt",
"sessionId": "a1b2c3d4-shopper-session"
}
'import requests
url = "https://api.offergrid.io/public/shop/orders"
payload = {
"items": [
{
"offerId": "<string>",
"metadata": { "enrollment": {
"enrollmentType": "switch",
"esid": "10443720000000000",
"requestedStartDate": "2026-07-15"
} }
}
],
"serviceAddress": {
"street": "123 Main St",
"city": "Austin",
"state": "TX",
"zipCode": "78701",
"unit": "Unit 4B",
"country": "US"
},
"customerInfo": {
"email": "jane@example.com",
"phone": "555-123-4567",
"firstName": "Jane",
"lastName": "Doe",
"fullName": "Jane Doe"
},
"notes": "<string>",
"idempotencyKey": "a1b2c3d4-checkout-attempt",
"sessionId": "a1b2c3d4-shopper-session"
}
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({
items: [
{
offerId: '<string>',
metadata: {
enrollment: {
enrollmentType: 'switch',
esid: '10443720000000000',
requestedStartDate: '2026-07-15'
}
}
}
],
serviceAddress: {
street: '123 Main St',
city: 'Austin',
state: 'TX',
zipCode: '78701',
unit: 'Unit 4B',
country: 'US'
},
customerInfo: {
email: 'jane@example.com',
phone: '555-123-4567',
firstName: 'Jane',
lastName: 'Doe',
fullName: 'Jane Doe'
},
notes: '<string>',
idempotencyKey: 'a1b2c3d4-checkout-attempt',
sessionId: 'a1b2c3d4-shopper-session'
})
};
fetch('https://api.offergrid.io/public/shop/orders', 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.offergrid.io/public/shop/orders",
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([
'items' => [
[
'offerId' => '<string>',
'metadata' => [
'enrollment' => [
'enrollmentType' => 'switch',
'esid' => '10443720000000000',
'requestedStartDate' => '2026-07-15'
]
]
]
],
'serviceAddress' => [
'street' => '123 Main St',
'city' => 'Austin',
'state' => 'TX',
'zipCode' => '78701',
'unit' => 'Unit 4B',
'country' => 'US'
],
'customerInfo' => [
'email' => 'jane@example.com',
'phone' => '555-123-4567',
'firstName' => 'Jane',
'lastName' => 'Doe',
'fullName' => 'Jane Doe'
],
'notes' => '<string>',
'idempotencyKey' => 'a1b2c3d4-checkout-attempt',
'sessionId' => 'a1b2c3d4-shopper-session'
]),
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://api.offergrid.io/public/shop/orders"
payload := strings.NewReader("{\n \"items\": [\n {\n \"offerId\": \"<string>\",\n \"metadata\": {\n \"enrollment\": {\n \"enrollmentType\": \"switch\",\n \"esid\": \"10443720000000000\",\n \"requestedStartDate\": \"2026-07-15\"\n }\n }\n }\n ],\n \"serviceAddress\": {\n \"street\": \"123 Main St\",\n \"city\": \"Austin\",\n \"state\": \"TX\",\n \"zipCode\": \"78701\",\n \"unit\": \"Unit 4B\",\n \"country\": \"US\"\n },\n \"customerInfo\": {\n \"email\": \"jane@example.com\",\n \"phone\": \"555-123-4567\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"fullName\": \"Jane Doe\"\n },\n \"notes\": \"<string>\",\n \"idempotencyKey\": \"a1b2c3d4-checkout-attempt\",\n \"sessionId\": \"a1b2c3d4-shopper-session\"\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://api.offergrid.io/public/shop/orders")
.header("Content-Type", "application/json")
.body("{\n \"items\": [\n {\n \"offerId\": \"<string>\",\n \"metadata\": {\n \"enrollment\": {\n \"enrollmentType\": \"switch\",\n \"esid\": \"10443720000000000\",\n \"requestedStartDate\": \"2026-07-15\"\n }\n }\n }\n ],\n \"serviceAddress\": {\n \"street\": \"123 Main St\",\n \"city\": \"Austin\",\n \"state\": \"TX\",\n \"zipCode\": \"78701\",\n \"unit\": \"Unit 4B\",\n \"country\": \"US\"\n },\n \"customerInfo\": {\n \"email\": \"jane@example.com\",\n \"phone\": \"555-123-4567\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"fullName\": \"Jane Doe\"\n },\n \"notes\": \"<string>\",\n \"idempotencyKey\": \"a1b2c3d4-checkout-attempt\",\n \"sessionId\": \"a1b2c3d4-shopper-session\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.offergrid.io/public/shop/orders")
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 \"items\": [\n {\n \"offerId\": \"<string>\",\n \"metadata\": {\n \"enrollment\": {\n \"enrollmentType\": \"switch\",\n \"esid\": \"10443720000000000\",\n \"requestedStartDate\": \"2026-07-15\"\n }\n }\n }\n ],\n \"serviceAddress\": {\n \"street\": \"123 Main St\",\n \"city\": \"Austin\",\n \"state\": \"TX\",\n \"zipCode\": \"78701\",\n \"unit\": \"Unit 4B\",\n \"country\": \"US\"\n },\n \"customerInfo\": {\n \"email\": \"jane@example.com\",\n \"phone\": \"555-123-4567\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"fullName\": \"Jane Doe\"\n },\n \"notes\": \"<string>\",\n \"idempotencyKey\": \"a1b2c3d4-checkout-attempt\",\n \"sessionId\": \"a1b2c3d4-shopper-session\"\n}"
response = http.request(request)
puts response.read_body{
"statusCode": 404,
"message": "Offer not found",
"error": "Not Found"
}{
"statusCode": 404,
"message": "Offer not found",
"error": "Not Found"
}{
"statusCode": 404,
"message": "Offer not found",
"error": "Not Found"
}{
"statusCode": 404,
"message": "Offer not found",
"error": "Not Found"
}Body
Offers to order — checkout-mode offers only, one per category
Show child attributes
Show child attributes
Service address for installation
Show child attributes
Show child attributes
Shopper contact information
Show child attributes
Show child attributes
Additional notes from the shopper
Client-generated key for this checkout attempt. A repeat submission with the same key (network retry, double-click on Submit) returns the original order instead of creating a duplicate.
"a1b2c3d4-checkout-attempt"
Anonymous client-generated session id, so the checkout-mode click this order completes can be tied to the same funnel as its lead_gen counterpart.
"a1b2c3d4-shopper-session"
Response
Order created (or the original, on idempotent replay)
Was this page helpful?
curl --request POST \
--url https://api.offergrid.io/public/shop/orders \
--header 'Content-Type: application/json' \
--data '
{
"items": [
{
"offerId": "<string>",
"metadata": {
"enrollment": {
"enrollmentType": "switch",
"esid": "10443720000000000",
"requestedStartDate": "2026-07-15"
}
}
}
],
"serviceAddress": {
"street": "123 Main St",
"city": "Austin",
"state": "TX",
"zipCode": "78701",
"unit": "Unit 4B",
"country": "US"
},
"customerInfo": {
"email": "jane@example.com",
"phone": "555-123-4567",
"firstName": "Jane",
"lastName": "Doe",
"fullName": "Jane Doe"
},
"notes": "<string>",
"idempotencyKey": "a1b2c3d4-checkout-attempt",
"sessionId": "a1b2c3d4-shopper-session"
}
'import requests
url = "https://api.offergrid.io/public/shop/orders"
payload = {
"items": [
{
"offerId": "<string>",
"metadata": { "enrollment": {
"enrollmentType": "switch",
"esid": "10443720000000000",
"requestedStartDate": "2026-07-15"
} }
}
],
"serviceAddress": {
"street": "123 Main St",
"city": "Austin",
"state": "TX",
"zipCode": "78701",
"unit": "Unit 4B",
"country": "US"
},
"customerInfo": {
"email": "jane@example.com",
"phone": "555-123-4567",
"firstName": "Jane",
"lastName": "Doe",
"fullName": "Jane Doe"
},
"notes": "<string>",
"idempotencyKey": "a1b2c3d4-checkout-attempt",
"sessionId": "a1b2c3d4-shopper-session"
}
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({
items: [
{
offerId: '<string>',
metadata: {
enrollment: {
enrollmentType: 'switch',
esid: '10443720000000000',
requestedStartDate: '2026-07-15'
}
}
}
],
serviceAddress: {
street: '123 Main St',
city: 'Austin',
state: 'TX',
zipCode: '78701',
unit: 'Unit 4B',
country: 'US'
},
customerInfo: {
email: 'jane@example.com',
phone: '555-123-4567',
firstName: 'Jane',
lastName: 'Doe',
fullName: 'Jane Doe'
},
notes: '<string>',
idempotencyKey: 'a1b2c3d4-checkout-attempt',
sessionId: 'a1b2c3d4-shopper-session'
})
};
fetch('https://api.offergrid.io/public/shop/orders', 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.offergrid.io/public/shop/orders",
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([
'items' => [
[
'offerId' => '<string>',
'metadata' => [
'enrollment' => [
'enrollmentType' => 'switch',
'esid' => '10443720000000000',
'requestedStartDate' => '2026-07-15'
]
]
]
],
'serviceAddress' => [
'street' => '123 Main St',
'city' => 'Austin',
'state' => 'TX',
'zipCode' => '78701',
'unit' => 'Unit 4B',
'country' => 'US'
],
'customerInfo' => [
'email' => 'jane@example.com',
'phone' => '555-123-4567',
'firstName' => 'Jane',
'lastName' => 'Doe',
'fullName' => 'Jane Doe'
],
'notes' => '<string>',
'idempotencyKey' => 'a1b2c3d4-checkout-attempt',
'sessionId' => 'a1b2c3d4-shopper-session'
]),
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://api.offergrid.io/public/shop/orders"
payload := strings.NewReader("{\n \"items\": [\n {\n \"offerId\": \"<string>\",\n \"metadata\": {\n \"enrollment\": {\n \"enrollmentType\": \"switch\",\n \"esid\": \"10443720000000000\",\n \"requestedStartDate\": \"2026-07-15\"\n }\n }\n }\n ],\n \"serviceAddress\": {\n \"street\": \"123 Main St\",\n \"city\": \"Austin\",\n \"state\": \"TX\",\n \"zipCode\": \"78701\",\n \"unit\": \"Unit 4B\",\n \"country\": \"US\"\n },\n \"customerInfo\": {\n \"email\": \"jane@example.com\",\n \"phone\": \"555-123-4567\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"fullName\": \"Jane Doe\"\n },\n \"notes\": \"<string>\",\n \"idempotencyKey\": \"a1b2c3d4-checkout-attempt\",\n \"sessionId\": \"a1b2c3d4-shopper-session\"\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://api.offergrid.io/public/shop/orders")
.header("Content-Type", "application/json")
.body("{\n \"items\": [\n {\n \"offerId\": \"<string>\",\n \"metadata\": {\n \"enrollment\": {\n \"enrollmentType\": \"switch\",\n \"esid\": \"10443720000000000\",\n \"requestedStartDate\": \"2026-07-15\"\n }\n }\n }\n ],\n \"serviceAddress\": {\n \"street\": \"123 Main St\",\n \"city\": \"Austin\",\n \"state\": \"TX\",\n \"zipCode\": \"78701\",\n \"unit\": \"Unit 4B\",\n \"country\": \"US\"\n },\n \"customerInfo\": {\n \"email\": \"jane@example.com\",\n \"phone\": \"555-123-4567\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"fullName\": \"Jane Doe\"\n },\n \"notes\": \"<string>\",\n \"idempotencyKey\": \"a1b2c3d4-checkout-attempt\",\n \"sessionId\": \"a1b2c3d4-shopper-session\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.offergrid.io/public/shop/orders")
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 \"items\": [\n {\n \"offerId\": \"<string>\",\n \"metadata\": {\n \"enrollment\": {\n \"enrollmentType\": \"switch\",\n \"esid\": \"10443720000000000\",\n \"requestedStartDate\": \"2026-07-15\"\n }\n }\n }\n ],\n \"serviceAddress\": {\n \"street\": \"123 Main St\",\n \"city\": \"Austin\",\n \"state\": \"TX\",\n \"zipCode\": \"78701\",\n \"unit\": \"Unit 4B\",\n \"country\": \"US\"\n },\n \"customerInfo\": {\n \"email\": \"jane@example.com\",\n \"phone\": \"555-123-4567\",\n \"firstName\": \"Jane\",\n \"lastName\": \"Doe\",\n \"fullName\": \"Jane Doe\"\n },\n \"notes\": \"<string>\",\n \"idempotencyKey\": \"a1b2c3d4-checkout-attempt\",\n \"sessionId\": \"a1b2c3d4-shopper-session\"\n}"
response = http.request(request)
puts response.read_body{
"statusCode": 404,
"message": "Offer not found",
"error": "Not Found"
}{
"statusCode": 404,
"message": "Offer not found",
"error": "Not Found"
}{
"statusCode": 404,
"message": "Offer not found",
"error": "Not Found"
}{
"statusCode": 404,
"message": "Offer not found",
"error": "Not Found"
}