In-app
Create Placement
Add a slot in your app that shows in-app content inline
POST
/
api
/
v1
/
in-app
/
placements
Create Placement
curl --request POST \
--url https://api.sequenzy.com/api/v1/in-app/placements \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"key": "<string>",
"name": "<string>",
"description": "<string>",
"width": {},
"height": {}
}
'import requests
url = "https://api.sequenzy.com/api/v1/in-app/placements"
payload = {
"key": "<string>",
"name": "<string>",
"description": "<string>",
"width": {},
"height": {}
}
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({
key: '<string>',
name: '<string>',
description: '<string>',
width: {},
height: {}
})
};
fetch('https://api.sequenzy.com/api/v1/in-app/placements', 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.sequenzy.com/api/v1/in-app/placements",
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([
'key' => '<string>',
'name' => '<string>',
'description' => '<string>',
'width' => [
],
'height' => [
]
]),
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://api.sequenzy.com/api/v1/in-app/placements"
payload := strings.NewReader("{\n \"key\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"width\": {},\n \"height\": {}\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://api.sequenzy.com/api/v1/in-app/placements")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"key\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"width\": {},\n \"height\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/in-app/placements")
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 \"key\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"width\": {},\n \"height\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"placement": {
"key": "home_hero",
"name": "Home hero",
"description": "Top of the home screen",
"width": 360,
"height": 160,
"createdAt": "2026-11-07T10:00:00.000Z",
"updatedAt": "2026-11-07T10:00:00.000Z"
}
}
{
"error": "key: Use 1-64 lowercase letters, numbers, dots, dashes or underscores, starting with a letter or number"
}
{
"error": "Invalid API key"
}
{
"error": "API key is missing required scope: sequences:write"
}
{
"error": "A placement with key \"home_hero\" already exists."
}
Creates a placement: a named slot in your app or website, such as a home screen hero, that shows in-app content inside your own layout. Fill it from a sequence step with
type: "in_app", kind: "placement" and placement set to the key. A workspace can have up to 50 placements. Requires the sequences:write scope.
Request
string
required
What your app’s code passes to the SDK: 1 to 64 lowercase letters, numbers, dots, dashes or underscores, starting with a letter or number. It never changes after creation.
string
required
Name shown in the dashboard, up to 100 characters.
string
Where the slot sits in your app, up to 500 characters.
integer | null
Width hint in points (CSS pixels on the web), 1 to 4000. The editor previews content at this size; your app’s layout decides the real size.
integer | null
Height hint in points, 1 to 4000.
curl -X POST "https://api.sequenzy.com/api/v1/in-app/placements" \
--header "Authorization: Bearer $SEQUENZY_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"key": "home_hero",
"name": "Home hero",
"description": "Top of the home screen",
"width": 360,
"height": 160
}'
{
"success": true,
"placement": {
"key": "home_hero",
"name": "Home hero",
"description": "Top of the home screen",
"width": 360,
"height": 160,
"createdAt": "2026-11-07T10:00:00.000Z",
"updatedAt": "2026-11-07T10:00:00.000Z"
}
}
{
"error": "key: Use 1-64 lowercase letters, numbers, dots, dashes or underscores, starting with a letter or number"
}
{
"error": "Invalid API key"
}
{
"error": "API key is missing required scope: sequences:write"
}
{
"error": "A placement with key \"home_hero\" already exists."
}
⌘I
Create Placement
curl --request POST \
--url https://api.sequenzy.com/api/v1/in-app/placements \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"key": "<string>",
"name": "<string>",
"description": "<string>",
"width": {},
"height": {}
}
'import requests
url = "https://api.sequenzy.com/api/v1/in-app/placements"
payload = {
"key": "<string>",
"name": "<string>",
"description": "<string>",
"width": {},
"height": {}
}
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({
key: '<string>',
name: '<string>',
description: '<string>',
width: {},
height: {}
})
};
fetch('https://api.sequenzy.com/api/v1/in-app/placements', 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.sequenzy.com/api/v1/in-app/placements",
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([
'key' => '<string>',
'name' => '<string>',
'description' => '<string>',
'width' => [
],
'height' => [
]
]),
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://api.sequenzy.com/api/v1/in-app/placements"
payload := strings.NewReader("{\n \"key\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"width\": {},\n \"height\": {}\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://api.sequenzy.com/api/v1/in-app/placements")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"key\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"width\": {},\n \"height\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/in-app/placements")
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 \"key\": \"<string>\",\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"width\": {},\n \"height\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"placement": {
"key": "home_hero",
"name": "Home hero",
"description": "Top of the home screen",
"width": 360,
"height": 160,
"createdAt": "2026-11-07T10:00:00.000Z",
"updatedAt": "2026-11-07T10:00:00.000Z"
}
}
{
"error": "key: Use 1-64 lowercase letters, numbers, dots, dashes or underscores, starting with a letter or number"
}
{
"error": "Invalid API key"
}
{
"error": "API key is missing required scope: sequences:write"
}
{
"error": "A placement with key \"home_hero\" already exists."
}