Request a Snapchat ad code from a creator
curl --request POST \
--url https://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"connectionId": "<string>",
"advertiserAccountId": "<string>",
"brandProfileId": "<string>",
"creatorId": "<string>",
"sourcePostId": "<string>",
"companyId": "<string>"
}
'import requests
url = "https://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests"
payload = {
"connectionId": "<string>",
"advertiserAccountId": "<string>",
"brandProfileId": "<string>",
"creatorId": "<string>",
"sourcePostId": "<string>",
"companyId": "<string>"
}
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({
connectionId: '<string>',
advertiserAccountId: '<string>',
brandProfileId: '<string>',
creatorId: '<string>',
sourcePostId: '<string>',
companyId: '<string>'
})
};
fetch('https://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests', 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://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests",
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([
'connectionId' => '<string>',
'advertiserAccountId' => '<string>',
'brandProfileId' => '<string>',
'creatorId' => '<string>',
'sourcePostId' => '<string>',
'companyId' => '<string>'
]),
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://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests"
payload := strings.NewReader("{\n \"connectionId\": \"<string>\",\n \"advertiserAccountId\": \"<string>\",\n \"brandProfileId\": \"<string>\",\n \"creatorId\": \"<string>\",\n \"sourcePostId\": \"<string>\",\n \"companyId\": \"<string>\"\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://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"connectionId\": \"<string>\",\n \"advertiserAccountId\": \"<string>\",\n \"brandProfileId\": \"<string>\",\n \"creatorId\": \"<string>\",\n \"sourcePostId\": \"<string>\",\n \"companyId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests")
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 \"connectionId\": \"<string>\",\n \"advertiserAccountId\": \"<string>\",\n \"brandProfileId\": \"<string>\",\n \"creatorId\": \"<string>\",\n \"sourcePostId\": \"<string>\",\n \"companyId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"error": {
"code": "invalid_request",
"message": "name is required",
"requestId": "req_..."
}
}{
"error": {
"code": "unauthorized",
"message": "Missing bearer access token",
"requestId": "req_..."
}
}{
"error": {
"code": "insufficient_scope",
"message": "Requires scope 'campaigns:write'",
"requestId": "req_..."
}
}{
"error": {
"code": "idempotency_conflict",
"message": "Idempotency-Key was reused with a different request body",
"requestId": "req_..."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded",
"requestId": "req_..."
}
}Request a Snapchat ad code from a creator
Sends the creator a real message asking for the Snapchat ad code of one exact source post, bound to the selected connection, advertiser account and Public Profile. Repeating the same request returns the existing one. Requires ads:write and Idempotency-Key.
POST
/
ads
/
snapchat
/
code-requests
Request a Snapchat ad code from a creator
curl --request POST \
--url https://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"connectionId": "<string>",
"advertiserAccountId": "<string>",
"brandProfileId": "<string>",
"creatorId": "<string>",
"sourcePostId": "<string>",
"companyId": "<string>"
}
'import requests
url = "https://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests"
payload = {
"connectionId": "<string>",
"advertiserAccountId": "<string>",
"brandProfileId": "<string>",
"creatorId": "<string>",
"sourcePostId": "<string>",
"companyId": "<string>"
}
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({
connectionId: '<string>',
advertiserAccountId: '<string>',
brandProfileId: '<string>',
creatorId: '<string>',
sourcePostId: '<string>',
companyId: '<string>'
})
};
fetch('https://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests', 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://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests",
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([
'connectionId' => '<string>',
'advertiserAccountId' => '<string>',
'brandProfileId' => '<string>',
'creatorId' => '<string>',
'sourcePostId' => '<string>',
'companyId' => '<string>'
]),
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://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests"
payload := strings.NewReader("{\n \"connectionId\": \"<string>\",\n \"advertiserAccountId\": \"<string>\",\n \"brandProfileId\": \"<string>\",\n \"creatorId\": \"<string>\",\n \"sourcePostId\": \"<string>\",\n \"companyId\": \"<string>\"\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://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"connectionId\": \"<string>\",\n \"advertiserAccountId\": \"<string>\",\n \"brandProfileId\": \"<string>\",\n \"creatorId\": \"<string>\",\n \"sourcePostId\": \"<string>\",\n \"companyId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/oauth/v1/ads/snapchat/code-requests")
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 \"connectionId\": \"<string>\",\n \"advertiserAccountId\": \"<string>\",\n \"brandProfileId\": \"<string>\",\n \"creatorId\": \"<string>\",\n \"sourcePostId\": \"<string>\",\n \"companyId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"error": {
"code": "invalid_request",
"message": "name is required",
"requestId": "req_..."
}
}{
"error": {
"code": "unauthorized",
"message": "Missing bearer access token",
"requestId": "req_..."
}
}{
"error": {
"code": "insufficient_scope",
"message": "Requires scope 'campaigns:write'",
"requestId": "req_..."
}
}{
"error": {
"code": "idempotency_conflict",
"message": "Idempotency-Key was reused with a different request body",
"requestId": "req_..."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded",
"requestId": "req_..."
}
}Authorizations
oauth2platformApiKey
OAuth 2.1 authorization code + PKCE (S256). Tokens are tenant-bound (company_id) and scoped. Discover endpoints via /.well-known/oauth-authorization-server.
Headers
Client-chosen key; replaying the same key + body returns the original response, a different body returns 409.
Body
application/json
Response
The request summary with its delivery state.