Skip to main content
PATCH
/
apps
/
{app_id}
/
subscriptions
/
{subscription_id}
cURL
curl --request PATCH \
  --url https://api.onesignal.com/apps/{app_id}/subscriptions/{subscription_id} \
  --header 'Content-Type: application/json' \
  --data '{}'
import Onesignal from '@onesignal/node-onesignal';

const configuration = Onesignal.createConfiguration({
restApiKey: 'YOUR_REST_API_KEY',
});
const apiInstance = new Onesignal.DefaultApi(configuration);

// string
const appId: string = "00000000-0000-0000-0000-000000000000";
// string
const subscriptionId: string = "7e4c5b9a-1f60-4d07-9b1a-2e8c8d2cae51";
// SubscriptionBody
const subscriptionBody: Onesignal.SubscriptionBody = {
subscription: {
id: "id_example",
type: "iOSPush",
token: "token_example",
enabled: true,
notification_types: 1,
session_time: 1,
session_count: 1,
sdk: "sdk_example",
device_model: "device_model_example",
device_os: "device_os_example",
rooted: true,
test_type: 1,
app_version: "app_version_example",
net_type: 1,
carrier: "carrier_example",
web_auth: "web_auth_example",
web_p256: "web_p256_example",
},
};

try {
const response = await apiInstance.updateSubscription(appId, subscriptionId, subscriptionBody);
console.log(response);
} catch (e) {
if (e instanceof Onesignal.ApiException) {
// `e.errorMessages` flattens any error-envelope shape to a `string[]`;
// the raw parsed body remains on `e.body`.
console.error("updateSubscription failed: HTTP " + e.code, e.errorMessages);
} else {
throw e;
}
}
import onesignal
from onesignal.api import default_api
from onesignal.models import *
from pprint import pprint

# See configuration.py for a list of all supported configuration parameters.
# Some of the OneSignal endpoints require ORGANIZATION_API_KEY token for authorization, while others require REST_API_KEY.
# We recommend adding both of them in the configuration page so that you will not need to figure it out yourself.
configuration = onesignal.Configuration(
rest_api_key = "YOUR_REST_API_KEY", # App REST API key required for most endpoints
organization_api_key = "YOUR_ORGANIZATION_API_KEY" # Organization key is only required for creating new apps and other top-level endpoints
)


# Enter a context with an instance of the API client
with onesignal.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = default_api.DefaultApi(api_client)
app_id = "00000000-0000-0000-0000-000000000000"
subscription_id = "7e4c5b9a-1f60-4d07-9b1a-2e8c8d2cae51"
subscription_body = SubscriptionBody(
subscription=Subscription(
id="id_example",
type="iOSPush",
token="token_example",
enabled=True,
notification_types=1,
session_time=1,
session_count=1,
sdk="sdk_example",
device_model="device_model_example",
device_os="device_os_example",
rooted=True,
test_type=1,
app_version="app_version_example",
net_type=1,
carrier="carrier_example",
web_auth="web_auth_example",
web_p256="web_p256_example",
),
)

try:
api_instance.update_subscription(app_id, subscription_id, subscription_body)
except onesignal.ApiException as e:
print("Exception when calling DefaultApi->update_subscription: %s\n" % e)
print("Status Code: %s" % e.status)
print("Response Body: %s" % e.body)
<?php
require_once(__DIR__ . '/vendor/autoload.php');


// Configure Bearer authorization: rest_api_key
$config = onesignal\client\Configuration::getDefaultConfiguration()
->setRestApiKeyToken('YOUR_REST_API_KEY')
->setOrganizationApiKeyToken('YOUR_ORGANIZATION_API_KEY');



$apiInstance = new onesignal\client\Api\DefaultApi(
// If you want use custom http client, pass your client which implements `GuzzleHttp\ClientInterface`.
// This is optional, `GuzzleHttp\Client` will be used as default.
new GuzzleHttp\Client(),
$config
);
$app_id = '00000000-0000-0000-0000-000000000000'; // string
$subscription_id = '7e4c5b9a-1f60-4d07-9b1a-2e8c8d2cae51'; // string
$subscription_body = new \onesignal\client\model\SubscriptionBody(); // \onesignal\client\model\SubscriptionBody

try {
$apiInstance->updateSubscription($app_id, $subscription_id, $subscription_body);
} catch (\onesignal\client\ApiException $e) {
echo 'Exception when calling DefaultApi->updateSubscription: ', $e->getMessage(), PHP_EOL;
echo 'Status Code: ', $e->getCode(), PHP_EOL;
// getErrorMessages() flattens any error-envelope shape to a string[];
// the raw body remains on getResponseBody().
echo 'Error Messages: ', implode(', ', $e->getErrorMessages()), PHP_EOL;
echo 'Response Body: ', $e->getResponseBody(), PHP_EOL;
} catch (\Exception $e) {
echo 'Exception when calling DefaultApi->updateSubscription: ', $e->getMessage(), PHP_EOL;
}
package main

import (
"context"
"fmt"
"os"

"github.com/OneSignal/onesignal-go-api/v5"
)

func main() {
appId := "00000000-0000-0000-0000-000000000000" // string |
subscriptionId := "7e4c5b9a-1f60-4d07-9b1a-2e8c8d2cae51" // string |
subscriptionBody := *onesignal.NewSubscriptionBody() // SubscriptionBody |

configuration := onesignal.NewConfiguration()
apiClient := onesignal.NewAPIClient(configuration)

restAuth := context.WithValue(context.Background(), onesignal.RestApiKey, "YOUR_REST_API_KEY") // App REST API key required for most endpoints

r, err := apiClient.DefaultApi.UpdateSubscription(restAuth, appId, subscriptionId).SubscriptionBody(subscriptionBody).Execute()

if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `DefaultApi.UpdateSubscription``: %v\n", err)
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
if apiErr, ok := err.(*onesignal.GenericOpenAPIError); ok {
// ErrorMessages() flattens any error-envelope shape to a []string;
// the raw body remains on Body().
fmt.Fprintf(os.Stderr, "Error Messages: %v\n", apiErr.ErrorMessages())
fmt.Fprintf(os.Stderr, "Response Body: %s\n", apiErr.Body())
}
}
}
require 'onesignal'
# setup authorization
OneSignal.configure do |config|
# Configure Bearer authorization: rest_api_key
config.rest_api_key = 'YOUR_REST_API_KEY'

end

api_instance = OneSignal::DefaultApi.new
app_id = '00000000-0000-0000-0000-000000000000' # String |
subscription_id = '7e4c5b9a-1f60-4d07-9b1a-2e8c8d2cae51' # String |
subscription_body = OneSignal::SubscriptionBody.new # SubscriptionBody |

begin

api_instance.update_subscription(app_id, subscription_id, subscription_body)
rescue OneSignal::ApiError => e
puts "Error when calling DefaultApi->update_subscription: #{e}"
puts "Status Code: #{e.code}"
# `e.error_messages` flattens any error-envelope shape to an Array<String>;
# the raw body remains on `e.response_body`.
puts "Error Messages: #{e.error_messages}"
puts "Response Body: #{e.response_body}"
end
// Import classes:
import com.onesignal.client.ApiClient;
import com.onesignal.client.ApiException;
import com.onesignal.client.Configuration;
import com.onesignal.client.auth.*;
import com.onesignal.client.model.*;
import com.onesignal.client.api.DefaultApi;

public class Example {
public static void main(String[] args) {
ApiClient defaultClient = Configuration.getDefaultApiClient();
defaultClient.setBasePath("https://api.onesignal.com");

// Configure HTTP bearer authorization: rest_api_key
HttpBearerAuth rest_api_key = (HttpBearerAuth) defaultClient.getAuthentication("rest_api_key");
rest_api_key.setBearerToken("YOUR_REST_API_KEY");

DefaultApi apiInstance = new DefaultApi(defaultClient);
String appId = "00000000-0000-0000-0000-000000000000"; // String |
String subscriptionId = "7e4c5b9a-1f60-4d07-9b1a-2e8c8d2cae51"; // String |
SubscriptionBody subscriptionBody = new SubscriptionBody(); // SubscriptionBody |
try {
apiInstance.updateSubscription(appId, subscriptionId, subscriptionBody);
} catch (ApiException e) {
System.err.println("Exception when calling DefaultApi#updateSubscription");
System.err.println("Status code: " + e.getCode());
// getErrorMessages() flattens any error-envelope shape to a List<String>;
// the raw body remains on getResponseBody().
System.err.println("Error messages: " + e.getErrorMessages());
System.err.println("Reason: " + e.getResponseBody());
System.err.println("Response headers: " + e.getResponseHeaders());
e.printStackTrace();
}
}
}
using System;
using System.Collections.Generic;
using System.Diagnostics;
using OneSignalApi.Api;
using OneSignalApi.Client;
using OneSignalApi.Model;

namespace Example
{
public class UpdateSubscriptionExample
{
public static void Main()
{
Configuration config = new Configuration();
config.BasePath = "https://api.onesignal.com";
// Configure Bearer token for authorization: rest_api_key
config.AccessToken = "YOUR_REST_API_KEY";

var apiInstance = new DefaultApi(config);
var appId = "00000000-0000-0000-0000-000000000000"; // string |
var subscriptionId = "7e4c5b9a-1f60-4d07-9b1a-2e8c8d2cae51"; // string |
var subscriptionBody = new SubscriptionBody(); // SubscriptionBody |

try
{
apiInstance.UpdateSubscription(appId, subscriptionId, subscriptionBody);
}
catch (ApiException e)
{
Debug.Print("Exception when calling DefaultApi.UpdateSubscription: " + e.Message );
Debug.Print("Status Code: "+ e.ErrorCode);
// e.ErrorMessages flattens any error-envelope shape to an IReadOnlyList<string>;
// the raw body remains on e.ErrorContent.
Debug.Print("Error Messages: " + string.Join(", ", e.ErrorMessages));
Debug.Print("Response Body: " + e.ErrorContent);
Debug.Print(e.StackTrace);
}
}
}
}
use onesignal_rust_api::apis::configuration::Configuration;
use onesignal_rust_api::apis::default_api;

use onesignal_rust_api::models;


#[tokio::main]
async fn main() {
let mut configuration = Configuration::new();
configuration.rest_api_key_token = Some("YOUR_REST_API_KEY".to_string());


// Realistic values are pulled from the spec's `example:` fields where present.
let app_id: &str = "00000000-0000-0000-0000-000000000000";
let subscription_id: &str = "7e4c5b9a-1f60-4d07-9b1a-2e8c8d2cae51";
let subscription_body: models::SubscriptionBody = todo!();

match default_api::update_subscription(&configuration, app_id, subscription_id, subscription_body).await {
Ok(_) => println!("update_subscription succeeded"),
Err(e @ onesignal_rust_api::apis::Error::ResponseError(_)) => {
// `e.error_messages()` flattens any error-envelope shape to a Vec<String>;
// the raw response remains on the ResponseError variant.
eprintln!("update_subscription failed: {:?}", e.error_messages());
}
Err(e) => eprintln!("update_subscription failed: {:?}", e),
}
}
{}
{
"errors": [
{
"code": "<string>",
"title": "<string>",
"meta": {}
}
]
}
{
"errors": [
{
"code": "Rate Limit Exceeded",
"title": "API rate limit exceeded"
}
]
}
{
"errors": [
"Service temporarily unavailable"
]
}

Overview

Use this API to update an existing Subscription’s properties by subscription_id. This endpoint is primarily used by the OneSignal SDK to manage subscription state. Most external use cases are better served by the Update Subscription by token API, which can use the Email Address or Phone Number as the token or the Update User API, which allows for updating user-level data.
For email opt-outs, it’s recommended to use the Unsubscribe Email (with token) API instead. This avoids the need to store or manage the subscription_id.

How to use this API

Required: subscription_id To update a subscription, you must know the subscription_id. This is a UUID generated by OneSignal and is immutable.
  • You can retrieve a subscription ID by querying the User object.
  • See the Subscriptions guide for an explanation of how subscription IDs are generated and used.
You cannot update the type of a Subscription. If the type is incorrect:
  1. Use Delete Subscription to remove the incorrect entry.
  2. Use Create Subscription by alias to recreate the Subscription with the correct type.

Path Parameters

app_id
string
required

Your OneSignal App ID in UUID v4 format. See Keys & IDs.

subscription_id
string
required

The unique Subscription ID in UUID v4 format generated by OneSignal. See Subscriptions.

Body

application/json
subscription
object

The subscription's properties.

Response

200

The Subscription updated successfully. This process is asynchronous and may take a few seconds to complete.