Push
Save APNs Credentials
Connect iOS push with an APNs auth key
PUT
/
api
/
v1
/
push
/
settings
/
ios
Save APNs Credentials
curl --request PUT \
--url https://api.sequenzy.com/api/v1/push/settings/ios \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"keyId": "<string>",
"teamId": "<string>",
"bundleId": "<string>",
"privateKey": "<string>",
"environment": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/push/settings/ios"
payload = {
"keyId": "<string>",
"teamId": "<string>",
"bundleId": "<string>",
"privateKey": "<string>",
"environment": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
keyId: '<string>',
teamId: '<string>',
bundleId: '<string>',
privateKey: '<string>',
environment: '<string>'
})
};
fetch('https://api.sequenzy.com/api/v1/push/settings/ios', 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/push/settings/ios",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'keyId' => '<string>',
'teamId' => '<string>',
'bundleId' => '<string>',
'privateKey' => '<string>',
'environment' => '<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://api.sequenzy.com/api/v1/push/settings/ios"
payload := strings.NewReader("{\n \"keyId\": \"<string>\",\n \"teamId\": \"<string>\",\n \"bundleId\": \"<string>\",\n \"privateKey\": \"<string>\",\n \"environment\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.sequenzy.com/api/v1/push/settings/ios")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"keyId\": \"<string>\",\n \"teamId\": \"<string>\",\n \"bundleId\": \"<string>\",\n \"privateKey\": \"<string>\",\n \"environment\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/push/settings/ios")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"keyId\": \"<string>\",\n \"teamId\": \"<string>\",\n \"bundleId\": \"<string>\",\n \"privateKey\": \"<string>\",\n \"environment\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"push": {
"web": {
"enabled": true,
"vapidPublicKey": "BH3tXU0JSzok9ND7DyeQRcEy..."
},
"ios": {
"configured": true,
"keyId": "ABC123DEFG",
"teamId": "DEF123GHIJ",
"bundleId": "com.example.app",
"environment": "production",
"lastError": null,
"lastErrorAt": null
},
"android": {
"configured": false,
"projectId": null,
"clientEmail": null,
"lastError": null,
"lastErrorAt": null
},
"defaultIconUrl": "https://cdn.example.com/icon-192.png"
},
"message": "APNs credentials saved."
}
{
"error": "The key could not be read. Paste the full contents of the .p8 file."
}
{
"error": "Invalid API key"
}
{
"error": "API key is missing required scope: integrations:manage"
}
Save APNs Credentials
Saves the APNs auth key (.p8) used for iOS push. The key is validated, encrypted at rest and never returned. Saving new credentials clears the last credential error.DELETE /api/v1/push/settings/ios removes the credentials. iOS devices stop receiving push until you save a key again; registered devices are kept.
Both require the integrations:manage scope and edit access to the workspace.
Request
string
required
The 10-character APNs key ID.
string
required
Your 10-character Apple developer team ID.
string
required
Your app’s bundle ID, for example
com.example.app.string
required
The full contents of the
AuthKey_XXXXXXXXXX.p8 file.string
default:"production"
production for App Store and TestFlight builds, sandbox for Xcode
development builds.curl -X PUT "https://api.sequenzy.com/api/v1/push/settings/ios" \
--header "Authorization: Bearer $SEQUENZY_API_KEY" \
--header "Content-Type: application/json" \
--data '{"keyId":"ABC123DEFG","teamId":"DEF123GHIJ","bundleId":"com.example.app","privateKey":"-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"}'
Responses
{
"success": true,
"push": {
"web": {
"enabled": true,
"vapidPublicKey": "BH3tXU0JSzok9ND7DyeQRcEy..."
},
"ios": {
"configured": true,
"keyId": "ABC123DEFG",
"teamId": "DEF123GHIJ",
"bundleId": "com.example.app",
"environment": "production",
"lastError": null,
"lastErrorAt": null
},
"android": {
"configured": false,
"projectId": null,
"clientEmail": null,
"lastError": null,
"lastErrorAt": null
},
"defaultIconUrl": "https://cdn.example.com/icon-192.png"
},
"message": "APNs credentials saved."
}
{
"error": "The key could not be read. Paste the full contents of the .p8 file."
}
{
"error": "Invalid API key"
}
{
"error": "API key is missing required scope: integrations:manage"
}
⌘I
Save APNs Credentials
curl --request PUT \
--url https://api.sequenzy.com/api/v1/push/settings/ios \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"keyId": "<string>",
"teamId": "<string>",
"bundleId": "<string>",
"privateKey": "<string>",
"environment": "<string>"
}
'import requests
url = "https://api.sequenzy.com/api/v1/push/settings/ios"
payload = {
"keyId": "<string>",
"teamId": "<string>",
"bundleId": "<string>",
"privateKey": "<string>",
"environment": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
keyId: '<string>',
teamId: '<string>',
bundleId: '<string>',
privateKey: '<string>',
environment: '<string>'
})
};
fetch('https://api.sequenzy.com/api/v1/push/settings/ios', 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/push/settings/ios",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'keyId' => '<string>',
'teamId' => '<string>',
'bundleId' => '<string>',
'privateKey' => '<string>',
'environment' => '<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://api.sequenzy.com/api/v1/push/settings/ios"
payload := strings.NewReader("{\n \"keyId\": \"<string>\",\n \"teamId\": \"<string>\",\n \"bundleId\": \"<string>\",\n \"privateKey\": \"<string>\",\n \"environment\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.sequenzy.com/api/v1/push/settings/ios")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"keyId\": \"<string>\",\n \"teamId\": \"<string>\",\n \"bundleId\": \"<string>\",\n \"privateKey\": \"<string>\",\n \"environment\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sequenzy.com/api/v1/push/settings/ios")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"keyId\": \"<string>\",\n \"teamId\": \"<string>\",\n \"bundleId\": \"<string>\",\n \"privateKey\": \"<string>\",\n \"environment\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"push": {
"web": {
"enabled": true,
"vapidPublicKey": "BH3tXU0JSzok9ND7DyeQRcEy..."
},
"ios": {
"configured": true,
"keyId": "ABC123DEFG",
"teamId": "DEF123GHIJ",
"bundleId": "com.example.app",
"environment": "production",
"lastError": null,
"lastErrorAt": null
},
"android": {
"configured": false,
"projectId": null,
"clientEmail": null,
"lastError": null,
"lastErrorAt": null
},
"defaultIconUrl": "https://cdn.example.com/icon-192.png"
},
"message": "APNs credentials saved."
}
{
"error": "The key could not be read. Paste the full contents of the .p8 file."
}
{
"error": "Invalid API key"
}
{
"error": "API key is missing required scope: integrations:manage"
}