import Onesignal from '@onesignal/node-onesignal';
const configuration = Onesignal.createConfiguration({
restApiKey: 'YOUR_REST_API_KEY',
});
const apiInstance = new Onesignal.DefaultApi(configuration);
// string | Your OneSignal App ID in UUID v4 format.
const appId: string = "YOUR_APP_ID";
// CustomEventsRequest
const customEventsRequest: Onesignal.CustomEventsRequest = {
events: [
{
name: "YOUR_NAME",
},
],
};
try {
const response = await apiInstance.createCustomEvents(appId, customEventsRequest);
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("createCustomEvents 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 = "YOUR_APP_ID" # Your OneSignal App ID in UUID v4 format.
custom_events_request = CustomEventsRequest(
events=[
CustomEvent(
name="YOUR_NAME",
),
],
)
try:
# Create custom events
api_response = api_instance.create_custom_events(app_id, custom_events_request)
pprint(api_response)
except onesignal.ApiException as e:
print("Exception when calling DefaultApi->create_custom_events: %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 = 'YOUR_APP_ID'; // string | Your OneSignal App ID in UUID v4 format.
$custom_events_request = new \onesignal\client\model\CustomEventsRequest(['events' => [new \onesignal\client\model\CustomEvent(['name' => 'YOUR_NAME'])]]); // \onesignal\client\model\CustomEventsRequest
try {
$result = $apiInstance->createCustomEvents($app_id, $custom_events_request);
print_r($result);
} catch (\onesignal\client\ApiException $e) {
echo 'Exception when calling DefaultApi->createCustomEvents: ', $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->createCustomEvents: ', $e->getMessage(), PHP_EOL;
}
package main
import (
"context"
"fmt"
"os"
"github.com/OneSignal/onesignal-go-api/v5"
)
func main() {
appId := "YOUR_APP_ID" // string | Your OneSignal App ID in UUID v4 format.
customEventsRequest := *onesignal.NewCustomEventsRequest([]onesignal.CustomEvent{*onesignal.NewCustomEvent("YOUR_NAME")}) // CustomEventsRequest |
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
resp, r, err := apiClient.DefaultApi.CreateCustomEvents(restAuth, appId).CustomEventsRequest(customEventsRequest).Execute()
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `DefaultApi.CreateCustomEvents``: %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())
}
}
// response from `CreateCustomEvents`: map[string]interface{}
fmt.Fprintf(os.Stdout, "Response from `DefaultApi.CreateCustomEvents`: %v\n", resp)
}
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 = 'YOUR_APP_ID' # String | Your OneSignal App ID in UUID v4 format.
custom_events_request = OneSignal::CustomEventsRequest.new({events: [OneSignal::CustomEvent.new({name: 'YOUR_NAME'})]}) # CustomEventsRequest |
begin
# Create custom events
result = api_instance.create_custom_events(app_id, custom_events_request)
p result
rescue OneSignal::ApiError => e
puts "Error when calling DefaultApi->create_custom_events: #{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 java.util.Arrays;
import java.util.List;
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 = "YOUR_APP_ID"; // String | Your OneSignal App ID in UUID v4 format.
CustomEventsRequest customEventsRequest = new CustomEventsRequest().events(Arrays.asList(new CustomEvent().name("YOUR_NAME"))); // CustomEventsRequest |
try {
Object result = apiInstance.createCustomEvents(appId, customEventsRequest);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling DefaultApi#createCustomEvents");
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 CreateCustomEventsExample
{
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 = "YOUR_APP_ID"; // string | Your OneSignal App ID in UUID v4 format.
var customEventsRequest = new CustomEventsRequest(events: new List<CustomEvent> { new CustomEvent(name: "YOUR_NAME") }); // CustomEventsRequest |
try
{
// Create custom events
Object result = apiInstance.CreateCustomEvents(appId, customEventsRequest);
Debug.WriteLine(result);
}
catch (ApiException e)
{
Debug.Print("Exception when calling DefaultApi.CreateCustomEvents: " + 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 = "YOUR_APP_ID";
let custom_events_request: models::CustomEventsRequest = models::CustomEventsRequest::new(vec![models::CustomEvent::new("YOUR_NAME".to_string())]);
match default_api::create_custom_events(&configuration, app_id, custom_events_request).await {
Ok(resp) => println!("{:?}", resp),
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!("create_custom_events failed: {:?}", e.error_messages());
}
Err(e) => eprintln!("create_custom_events failed: {:?}", e),
}
}
{ "errors": [ { "event_user_id": "user_1234", "event_id": null, "error": { "code": "not found", "title": "failed to find a onesignal_id for user_id user_1234" } } ]}
Create custom events
The Custom Events API allows you to record user events. Custom events can represent any action users take in your application, such as completing a purchase, viewing content, or achieving milestones.
import Onesignal from '@onesignal/node-onesignal';
const configuration = Onesignal.createConfiguration({
restApiKey: 'YOUR_REST_API_KEY',
});
const apiInstance = new Onesignal.DefaultApi(configuration);
// string | Your OneSignal App ID in UUID v4 format.
const appId: string = "YOUR_APP_ID";
// CustomEventsRequest
const customEventsRequest: Onesignal.CustomEventsRequest = {
events: [
{
name: "YOUR_NAME",
},
],
};
try {
const response = await apiInstance.createCustomEvents(appId, customEventsRequest);
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("createCustomEvents 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 = "YOUR_APP_ID" # Your OneSignal App ID in UUID v4 format.
custom_events_request = CustomEventsRequest(
events=[
CustomEvent(
name="YOUR_NAME",
),
],
)
try:
# Create custom events
api_response = api_instance.create_custom_events(app_id, custom_events_request)
pprint(api_response)
except onesignal.ApiException as e:
print("Exception when calling DefaultApi->create_custom_events: %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 = 'YOUR_APP_ID'; // string | Your OneSignal App ID in UUID v4 format.
$custom_events_request = new \onesignal\client\model\CustomEventsRequest(['events' => [new \onesignal\client\model\CustomEvent(['name' => 'YOUR_NAME'])]]); // \onesignal\client\model\CustomEventsRequest
try {
$result = $apiInstance->createCustomEvents($app_id, $custom_events_request);
print_r($result);
} catch (\onesignal\client\ApiException $e) {
echo 'Exception when calling DefaultApi->createCustomEvents: ', $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->createCustomEvents: ', $e->getMessage(), PHP_EOL;
}
package main
import (
"context"
"fmt"
"os"
"github.com/OneSignal/onesignal-go-api/v5"
)
func main() {
appId := "YOUR_APP_ID" // string | Your OneSignal App ID in UUID v4 format.
customEventsRequest := *onesignal.NewCustomEventsRequest([]onesignal.CustomEvent{*onesignal.NewCustomEvent("YOUR_NAME")}) // CustomEventsRequest |
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
resp, r, err := apiClient.DefaultApi.CreateCustomEvents(restAuth, appId).CustomEventsRequest(customEventsRequest).Execute()
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `DefaultApi.CreateCustomEvents``: %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())
}
}
// response from `CreateCustomEvents`: map[string]interface{}
fmt.Fprintf(os.Stdout, "Response from `DefaultApi.CreateCustomEvents`: %v\n", resp)
}
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 = 'YOUR_APP_ID' # String | Your OneSignal App ID in UUID v4 format.
custom_events_request = OneSignal::CustomEventsRequest.new({events: [OneSignal::CustomEvent.new({name: 'YOUR_NAME'})]}) # CustomEventsRequest |
begin
# Create custom events
result = api_instance.create_custom_events(app_id, custom_events_request)
p result
rescue OneSignal::ApiError => e
puts "Error when calling DefaultApi->create_custom_events: #{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 java.util.Arrays;
import java.util.List;
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 = "YOUR_APP_ID"; // String | Your OneSignal App ID in UUID v4 format.
CustomEventsRequest customEventsRequest = new CustomEventsRequest().events(Arrays.asList(new CustomEvent().name("YOUR_NAME"))); // CustomEventsRequest |
try {
Object result = apiInstance.createCustomEvents(appId, customEventsRequest);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling DefaultApi#createCustomEvents");
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 CreateCustomEventsExample
{
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 = "YOUR_APP_ID"; // string | Your OneSignal App ID in UUID v4 format.
var customEventsRequest = new CustomEventsRequest(events: new List<CustomEvent> { new CustomEvent(name: "YOUR_NAME") }); // CustomEventsRequest |
try
{
// Create custom events
Object result = apiInstance.CreateCustomEvents(appId, customEventsRequest);
Debug.WriteLine(result);
}
catch (ApiException e)
{
Debug.Print("Exception when calling DefaultApi.CreateCustomEvents: " + 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 = "YOUR_APP_ID";
let custom_events_request: models::CustomEventsRequest = models::CustomEventsRequest::new(vec![models::CustomEvent::new("YOUR_NAME".to_string())]);
match default_api::create_custom_events(&configuration, app_id, custom_events_request).await {
Ok(resp) => println!("{:?}", resp),
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!("create_custom_events failed: {:?}", e.error_messages());
}
Err(e) => eprintln!("create_custom_events failed: {:?}", e),
}
}
{ "errors": [ { "event_user_id": "user_1234", "event_id": null, "error": { "code": "not found", "title": "failed to find a onesignal_id for user_id user_1234" } } ]}
The Custom Events API allows you to track user events. Custom events can represent any action users take in your application, such as completing a purchase, viewing content, or achieving milestones. See Custom events for more information.
If individual events can’t be processed, an errors key will be returned in the response (with HTTP status 202) containing information about each failing event. The most common event-specific error is a failure to find a user associated with the External ID or OneSignal ID in the event.If you’d like to retry sending events in the case of a failure, you only need to re-send the events for which errors were returned — events that don’t have an error associated with them are still processed. However, if a 5xx HTTP response is returned, you must retry the entire batch of events.In either case, if you are implementing retry, make sure to also pass an idempotency_key.
Each app can send up to 1,000 unique Custom Event names. Events sent under a name your app already uses are always accepted, so reaching the limit never interrupts the events you’re already sending.Once an app reaches 1,000 names, events sent under a new name are rejected. OneSignal rejects the individual event, not the request, so other events in the same batch are processed normally. The API returns HTTP 202 with an errors array, and each rejected event carries the error code too many event names.A rejected event is not stored, is not billed, and cannot trigger a Journey, personalize a message, or be used in a Segment. It does appear in Data > Events & conversions, marked as failed with the reason “This app has reached its limit of unique event names”, so you can see which names were rejected.To make room, delete a Custom Event name you no longer use. Deleting a name frees its slot and permanently deletes the events stored under it.
The Custom Events page warns you once your app passes 900 unique event names, before any event is rejected.
Retrying an event rejected with too many event names fails again until you delete a name. Exclude this error code from automatic retries, and see Custom events for how to free a slot.
If you implement retry behavior for your custom event delivery, please provide the idempotency_key field. Each unique event should get its own unique UUID, and when retrying delivery for events, the same UUID must be provided. Duplicate events with the same idempotency_key will be ignored on a best-effort basis within a 4-hour period. This allows you to avoid erroneously triggering Journeys multiple times or incurring charges for storing unnecessary duplicate events.
Array of event objects to be recorded. Maximum size for each event is 2024 bytes. Maximum size of request is 1 MB.
Show child attributes
Response
Accepted. Events that could not be processed are listed in errors. Other events in the same request were processed. An empty errors array, or a response with no body, means every event was accepted. An individual event fails when its user identifier does not match a OneSignal user (not found), when name is empty (empty event name), when name is longer than 512 bytes (event name too long), or when the app is at its limit of 1,000 unique event names (too many event names).
Errors for specific events in the payload. If this is returned, only the specified events have failed. Other events in the same payload were successfully processed.
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OneSignal","description":"OneSignal is a platform for sending push notifications, emails, in-app messages, and SMS campaigns via a single API, Journey Builder, and a dashboard.","colors":{"primary":"#3A3DB3","light":"#E54B4D","dark":"#3A3DB3"},"logo":{"light":"https://mintcdn.com/onesignal/yJcueeDCO7UpHnnY/logo/OneSignal-Logo.svg?fit=max\u0026auto=format\u0026n=yJcueeDCO7UpHnnY\u0026q=85\u0026s=1fcfb6fef6d820fd9d99c74850711107","dark":"https://mintcdn.com/onesignal/s4WC_KzLxf8ornqq/logo/OneSignal-Logo-White.svg?fit=max\u0026auto=format\u0026n=s4WC_KzLxf8ornqq\u0026q=85\u0026s=2573a53b5aea961e18c82b3af8f31925"},"favicon":"https://mintcdn.com/onesignal/SGduBFHpiRdg5l6h/favicon.ico?fit=max\u0026auto=format\u0026n=SGduBFHpiRdg5l6h\u0026q=85\u0026s=c0a99fadc0553c658a83741c5611cef4","api":{"examples":{"languages":["curl","typescript","python","php","go","ruby","java","csharp","rust"],"autogenerate":true}},"navbar":{"links":[{"href":"mailto:support@onesignal.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.onesignal.com"}},"footer":{"socials":{"github":"https://github.com/OneSignal","linkedin":"https://linkedin.com/company/onesignal","youtube":"https://www.youtube.com/@onesignalofficial/playlists"}},"seo":{"metatags":{"apple-mobile-web-app-title":"OneSignal Docs"}},"fonts":{"family":"Nunito Sans"},"styling":{"eyebrows":"breadcrumbs","latex":true},"integrations":{"ga4":{"measurementId":"G-2DGWL0VYP5"},"posthog":{"apiKey":"phc_vZpvE0f5eyzcOt30FHer34yddVmNdo9kmlMVRBzLMtn","apiHost":"https://eu.i.posthog.com","sessionRecording":true}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"languages":[{"language":"en","href":"docs/en/home"},{"language":"cn","href":"docs/cn/home"},{"language":"ko","href":"docs/ko/home"},{"language":"ja","href":"docs/ja/home"},{"language":"tr","href":"docs/tr/home"},{"language":"pt-BR","href":"docs/pt-BR/home"},{"language":"es","href":"docs/es/home"},{"language":"fr","href":"docs/fr/home"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"onesignal","hasAudioNarration":false,"actualSubdomain":"onesignal","customDomains":["documentation.onesignal.com"],"gitSource":{"type":"github","owner":"onesignal","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adfd85ac4d90543576ae0f0","collectionId":"56bbe015-84a0-4904-90a4-4a1240ec2f68","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adfd85ac4d90543576ae0f0"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6adfd85ac4d90543576ae0f0","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"en","tag":"User Guides","count":201},{"language":"es","tag":"Guías del Usuario","count":178},{"language":"fr","tag":"Guides utilisateur","count":178},{"language":"ja","tag":"ユーザーガイド","count":178},{"language":"ko","tag":"사용자 가이드","count":178},{"language":"pt-BR","tag":"Guia do Usuário","count":178},{"language":"tr","tag":"Kullanıcı Kılavuzları","count":178},{"language":"cn","tag":"用户指南","count":176},{"language":"en","tag":"Message channels","count":90},{"language":"es","tag":"Canales de mensajería","count":84},{"language":"fr","tag":"Canaux de messagerie","count":84},{"language":"ja","tag":"メッセージングチャネル","count":84},{"language":"ko","tag":"메시지 채널","count":84},{"language":"pt-BR","tag":"Canais de mensagem","count":84},{"language":"tr","tag":"Mesaj kanalları","count":84},{"language":"cn","tag":"消息渠道","count":83},{"language":"default","tag":"API Reference","count":68},{"language":"default","tag":"API reference","count":64},{"language":"en","tag":"Analytics \u0026 Integrations","count":53},{"language":"es","tag":"Analítica \u0026 Integraciones","count":52},{"language":"fr","tag":"Analyses et intégrations","count":52},{"language":"ja","tag":"分析 \u0026 統合","count":52},{"language":"ko","tag":"분석 \u0026 통합","count":52},{"language":"pt-BR","tag":"Análises \u0026 Integrações","count":52},{"language":"tr","tag":"Analitik ve Entegrasyonlar","count":52},{"language":"cn","tag":"分析和集成","count":51},{"language":"cn","tag":"开发者指南","count":48},{"language":"es","tag":"Guías del desarrollador","count":48},{"language":"fr","tag":"Guides développeur","count":48},{"language":"ja","tag":"開発者ガイド","count":48},{"language":"ko","tag":"개발자 가이드","count":48},{"language":"tr","tag":"Geliştirici Kılavuzları","count":48},{"language":"pt-BR","tag":"Guia de desenvolvedor","count":47},{"language":"en","tag":"Developer Guides","count":46},{"language":"en","tag":"Integrations","count":37},{"language":"es","tag":"Integraciones","count":37},{"language":"fr","tag":"Intégrations","count":37},{"language":"ja","tag":"統合","count":37},{"language":"ko","tag":"통합","count":37},{"language":"pt-BR","tag":"Integrações","count":37},{"language":"tr","tag":"Entegrasyonlar","count":37},{"language":"cn","tag":"集成","count":36},{"language":"en","tag":"Tutorials","count":35},{"language":"cn","tag":"推送通知","count":31},{"language":"cn","tag":"OneSignal 作为目的地","count":31},{"language":"en","tag":"Push","count":31},{"language":"en","tag":"OneSignal as destination","count":31},{"language":"es","tag":"Push notificaciones","count":31},{"language":"es","tag":"OneSignal como destino","count":31},{"language":"fr","tag":"Push","count":31},{"language":"fr","tag":"OneSignal comme destination","count":31},{"language":"ja","tag":"プッシュ通知","count":31},{"language":"ja","tag":"OneSignal as 宛先","count":31},{"language":"ko","tag":"푸시","count":31},{"language":"ko","tag":"OneSignal을 데이터 목적지로 사용","count":31},{"language":"pt-BR","tag":"Push notificações","count":31},{"language":"pt-BR","tag":"OneSignal como destino","count":31},{"language":"tr","tag":"Anlık bildirimler","count":31},{"language":"tr","tag":"OneSignal hedef","count":31},{"language":"cn","tag":"移动SDK","count":25},{"language":"en","tag":"Mobile SDKs","count":25},{"language":"es","tag":"SDKs móviles","count":25},{"language":"fr","tag":"SDK mobiles","count":25},{"language":"ja","tag":"モバイルSDK","count":25},{"language":"ko","tag":"모바일 SDKs","count":25},{"language":"pt-BR","tag":"SDKs móveis","count":25},{"language":"tr","tag":"Mobil SDK'lar","count":25},{"language":"cn","tag":"教程","count":24},{"language":"es","tag":"Tutoriales","count":24},{"language":"fr","tag":"Tutoriels","count":24},{"language":"ja","tag":"チュートリアル","count":24},{"language":"ko","tag":"튜토리얼","count":24},{"language":"pt-BR","tag":"Tutoriais","count":24},{"language":"tr","tag":"Eğitimler","count":24},{"language":"en","tag":"Email","count":19},{"language":"cn","tag":"移动SDK设置","count":18},{"language":"es","tag":"Configuración del SDK móvil","count":18},{"language":"fr","tag":"Configuration SDK mobile","count":18},{"language":"ja","tag":"モバイルSDKセットアップ","count":18},{"language":"ko","tag":"모바일 SDK 설정","count":18},{"language":"pt-BR","tag":"Configuração do SDK móvel","count":18},{"language":"tr","tag":"Mobil SDK kurulumu","count":18},{"language":"default","tag":"Messages","count":9},{"language":"default","tag":"Users","count":9},{"language":"default","tag":"Organization","count":9},{"language":"default","tag":"Journeys","count":8},{"language":"default","tag":"Deprecated","count":6},{"language":"default","tag":"Templates","count":6},{"language":"default","tag":"Subscriptions","count":6},{"language":"default","tag":"Segments","count":5}]},"assistantConfig":{"enableStarterQuestions":false,"deflection":{"enabled":true,"email":"support@onesignal.com","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[],"isAtlas":false,"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"reference/create-custom-events","slug":"/reference/create-custom-events","pageMetadata":{"title":"Create custom events","openapi":"POST /apps/{app_id}/custom_events","description":"The Custom Events API allows you to record user events. Custom events can represent any action users take in your application, such as completing a purchase, viewing content, or achieving milestones.","href":"/reference/create-custom-events"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"The Custom Events API allows you to record user events. Custom events can represent any action users take in your application, such as completing a purchase, viewing content, or achieving milestones.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,hr:`hr`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`The Custom Events API allows you to track user events. Custom events can represent any action users take in your application, such as completing a purchase, viewing content, or achieving milestones. See `,_jsx(_components.a,{href:`/docs/en/custom-events`,children:`Custom events`}),` for more information.`]}),`\n`,_jsx(Heading,{level:`3`,id:`use-cases`,children:`Use Cases`}),`\n`,_jsx(_components.p,{children:`Custom events can be used to:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Enter users into `,_jsx(_components.a,{href:`/docs/en/journeys-settings`,children:`Journeys`})]}),`\n`,_jsxs(_components.li,{children:[`Trigger Journey `,_jsx(_components.a,{href:`/docs/en/journeys-actions`,children:`Wait Until`}),` nodes`]}),`\n`,_jsxs(_components.li,{children:[`Build `,_jsx(_components.a,{href:`/docs/en/segmentation`,children:`segments`})]}),`\n`,_jsxs(_components.li,{children:[`Personalize messages with `,_jsx(_components.a,{href:`/docs/en/personalization-custom-event`,children:`event properties`})]}),`\n`,_jsxs(_components.li,{children:[`Measure conversions with `,_jsx(_components.a,{href:`/docs/en/conversion-metrics`,children:`Conversion Metrics`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`error-handling`,children:`Error handling`}),`\n`,_jsxs(_components.p,{children:[`If individual events can’t be processed, an `,_jsx(_components.code,{children:`errors`}),` key will be returned in the response (with HTTP status 202) containing information about each failing event. The most common event-specific error is a failure to find a user associated with the External ID or OneSignal ID in the event.`]}),`\n`,_jsx(_components.p,{children:`If you’d like to retry sending events in the case of a failure, you only need to re-send the events for which errors were returned — events that don’t have an error associated with them are still processed. However, if a 5xx HTTP response is returned, you must retry the entire batch of events.`}),`\n`,_jsxs(_components.p,{children:[`In either case, if you are implementing retry, make sure to also pass an `,_jsx(_components.a,{href:`/reference/idempotent-notification-requests`,children:_jsx(_components.code,{children:`idempotency_key`})}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`event-name-errors`,children:`Event name errors`}),`\n`,_jsx(_components.p,{children:`OneSignal validates every event name at ingestion. These are the error codes it returns.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Error code`}),_jsx(_components.th,{children:`Cause`}),_jsx(_components.th,{children:`What fails`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`missing event name`})}),_jsxs(_components.td,{children:[`The event has no `,_jsx(_components.code,{children:`name`}),` field.`]}),_jsxs(_components.td,{children:[`The whole request, with HTTP `,_jsx(_components.code,{children:`400`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`empty event name`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`name`}),` is an empty string.`]}),_jsxs(_components.td,{children:[`The individual event, with HTTP `,_jsx(_components.code,{children:`202`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`event name too long`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`name`}),` is longer than 512 bytes.`]}),_jsxs(_components.td,{children:[`The individual event, with HTTP `,_jsx(_components.code,{children:`202`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`too many event names`})}),_jsx(_components.td,{children:`The app is at its limit of 1,000 unique event names.`}),_jsxs(_components.td,{children:[`The individual event, with HTTP `,_jsx(_components.code,{children:`202`}),`.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`A rejected event appears in the `,_jsx(_components.code,{children:`errors`}),` array alongside the identifiers you sent:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`12`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"errors\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event_user_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"user_1234\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"too many event names\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"app has reached its limit of 1000 unique event names\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`unique-event-name-limit`,children:`Unique event name limit`}),`\n`,_jsxs(_components.p,{children:[`Each app can send up to `,_jsx(_components.strong,{children:`1,000 unique Custom Event names`}),`. Events sent under a name your app already uses are always accepted, so reaching the limit never interrupts the events you’re already sending.`]}),`\n`,_jsxs(_components.p,{children:[`Once an app reaches 1,000 names, events sent under a `,_jsx(_components.em,{children:`new`}),` name are rejected. OneSignal rejects the individual event, not the request, so other events in the same batch are processed normally. The API returns HTTP `,_jsx(_components.code,{children:`202`}),` with an `,_jsx(_components.code,{children:`errors`}),` array, and each rejected event carries the error code `,_jsx(_components.code,{children:`too many event names`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`A rejected event is not stored, is not billed, and cannot trigger a Journey, personalize a message, or be used in a Segment. It does appear in `,_jsx(_components.strong,{children:`Data > Events \u0026 conversions`}),`, marked as failed with the reason “This app has reached its limit of unique event names”, so you can see which names were rejected.`]}),`\n`,_jsx(_components.p,{children:`To make room, delete a Custom Event name you no longer use. Deleting a name frees its slot and permanently deletes the events stored under it.`}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`The Custom Events page warns you once your app passes 900 unique event names, before any event is rejected.`})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Retrying an event rejected with `,_jsx(_components.code,{children:`too many event names`}),` fails again until you delete a name. Exclude this error code from automatic retries, and see `,_jsx(_components.a,{href:`/docs/en/custom-events#event-name-limits`,children:`Custom events`}),` for how to free a slot.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`duplicate-events`,children:`Duplicate events`}),`\n`,_jsxs(_components.p,{children:[`If you implement retry behavior for your custom event delivery, please provide the `,_jsx(_components.a,{href:`/reference/idempotent-notification-requests`,children:_jsx(_components.code,{children:`idempotency_key`})}),` field. Each unique event should get its own unique UUID, and when retrying delivery for events, the same UUID must be provided. Duplicate events with the same `,_jsx(_components.code,{children:`idempotency_key`}),` will be ignored on a best-effort basis within a 4-hour period. This allows you to avoid erroneously triggering Journeys multiple times or incurring charges for storing unnecessary duplicate events.`]}),`\n`,_jsx(_components.hr,{})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create custom events","openapi":"POST /apps/{app_id}/custom_events","description":"The Custom Events API allows you to record user events. Custom events can represent any action users take in your application, such as completing a purchase, viewing content, or achieving milestones.","href":"/reference/create-custom-events"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[{"title":"Use Cases","slug":"use-cases","depth":3,"children":[]},{"title":"Error handling","slug":"error-handling","depth":3,"children":[]},{"title":"Event name errors","slug":"event-name-errors","depth":3,"children":[]},{"title":"Unique event name limit","slug":"unique-event-name-limit","depth":3,"children":[]},{"title":"Duplicate events","slug":"duplicate-events","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/onesignal/e069c1b9f3157e14/hotjar-koala.js","/_mintlify/custom/onesignal/3e5d03885ab32f49/intercom.js","/_mintlify/custom/onesignal/dbb7af4794d1b586/munchkin-marketo.js"],"openApiReferenceData":{"operation":{"summary":"Create Custom Events","description":"The Custom Events API allows you to record user events. Custom events can represent any action users take in your application, such as completing a purchase, viewing content, or achieving milestones.","operationId":"create-custom-events","x-codeSamples":[{"lang":"typescript","label":"Node.js SDK","source":"import Onesignal from '@onesignal/node-onesignal';\n\nconst configuration = Onesignal.createConfiguration({\n restApiKey: 'YOUR_REST_API_KEY',\n});\nconst apiInstance = new Onesignal.DefaultApi(configuration);\n\n// string | Your OneSignal App ID in UUID v4 format.\nconst appId: string = \"YOUR_APP_ID\";\n// CustomEventsRequest\nconst customEventsRequest: Onesignal.CustomEventsRequest = {\n events: [\n {\n name: \"YOUR_NAME\",\n },\n ],\n };\n\ntry {\n const response = await apiInstance.createCustomEvents(appId, customEventsRequest);\n console.log(response);\n} catch (e) {\n if (e instanceof Onesignal.ApiException) {\n // `e.errorMessages` flattens any error-envelope shape to a `string[]`;\n // the raw parsed body remains on `e.body`.\n console.error(\"createCustomEvents failed: HTTP \" + e.code, e.errorMessages);\n } else {\n throw e;\n }\n}"},{"lang":"python","label":"Python SDK","source":"import onesignal\nfrom onesignal.api import default_api\nfrom onesignal.models import *\nfrom pprint import pprint\n\n# See configuration.py for a list of all supported configuration parameters.\n# Some of the OneSignal endpoints require ORGANIZATION_API_KEY token for authorization, while others require REST_API_KEY.\n# We recommend adding both of them in the configuration page so that you will not need to figure it out yourself.\nconfiguration = onesignal.Configuration(\n rest_api_key = \"YOUR_REST_API_KEY\", # App REST API key required for most endpoints\n organization_api_key = \"YOUR_ORGANIZATION_API_KEY\" # Organization key is only required for creating new apps and other top-level endpoints\n)\n\n\n# Enter a context with an instance of the API client\nwith onesignal.ApiClient(configuration) as api_client:\n # Create an instance of the API class\n api_instance = default_api.DefaultApi(api_client)\n app_id = \"YOUR_APP_ID\" # Your OneSignal App ID in UUID v4 format. \n custom_events_request = CustomEventsRequest(\n events=[\n CustomEvent(\n name=\"YOUR_NAME\",\n ),\n ],\n ) \n\n try:\n # Create custom events\n api_response = api_instance.create_custom_events(app_id, custom_events_request)\n pprint(api_response)\n except onesignal.ApiException as e:\n print(\"Exception when calling DefaultApi->create_custom_events: %s\\n\" % e)\n print(\"Status Code: %s\" % e.status)\n print(\"Response Body: %s\" % e.body)"},{"lang":"php","label":"PHP SDK","source":"\u003c?php\nrequire_once(__DIR__ . '/vendor/autoload.php');\n\n\n// Configure Bearer authorization: rest_api_key\n$config = onesignal\\client\\Configuration::getDefaultConfiguration()\n ->setRestApiKeyToken('YOUR_REST_API_KEY')\n ->setOrganizationApiKeyToken('YOUR_ORGANIZATION_API_KEY');\n\n\n\n$apiInstance = new onesignal\\client\\Api\\DefaultApi(\n // If you want use custom http client, pass your client which implements `GuzzleHttp\\ClientInterface`.\n // This is optional, `GuzzleHttp\\Client` will be used as default.\n new GuzzleHttp\\Client(),\n $config\n);\n$app_id = 'YOUR_APP_ID'; // string | Your OneSignal App ID in UUID v4 format.\n$custom_events_request = new \\onesignal\\client\\model\\CustomEventsRequest(['events' => [new \\onesignal\\client\\model\\CustomEvent(['name' => 'YOUR_NAME'])]]); // \\onesignal\\client\\model\\CustomEventsRequest\n\ntry {\n $result = $apiInstance->createCustomEvents($app_id, $custom_events_request);\n print_r($result);\n} catch (\\onesignal\\client\\ApiException $e) {\n echo 'Exception when calling DefaultApi->createCustomEvents: ', $e->getMessage(), PHP_EOL;\n echo 'Status Code: ', $e->getCode(), PHP_EOL;\n // getErrorMessages() flattens any error-envelope shape to a string[];\n // the raw body remains on getResponseBody().\n echo 'Error Messages: ', implode(', ', $e->getErrorMessages()), PHP_EOL;\n echo 'Response Body: ', $e->getResponseBody(), PHP_EOL;\n} catch (\\Exception $e) {\n echo 'Exception when calling DefaultApi->createCustomEvents: ', $e->getMessage(), PHP_EOL;\n}"},{"lang":"go","label":"Go SDK","source":"package main\n\nimport (\n \"context\"\n \"fmt\"\n \"os\"\n\n \"github.com/OneSignal/onesignal-go-api/v5\"\n)\n\nfunc main() {\n appId := \"YOUR_APP_ID\" // string | Your OneSignal App ID in UUID v4 format.\n customEventsRequest := *onesignal.NewCustomEventsRequest([]onesignal.CustomEvent{*onesignal.NewCustomEvent(\"YOUR_NAME\")}) // CustomEventsRequest | \n\n configuration := onesignal.NewConfiguration()\n apiClient := onesignal.NewAPIClient(configuration)\n\n restAuth := context.WithValue(context.Background(), onesignal.RestApiKey, \"YOUR_REST_API_KEY\") // App REST API key required for most endpoints\n\n resp, r, err := apiClient.DefaultApi.CreateCustomEvents(restAuth, appId).CustomEventsRequest(customEventsRequest).Execute()\n\n if err != nil {\n fmt.Fprintf(os.Stderr, \"Error when calling `DefaultApi.CreateCustomEvents``: %v\\n\", err)\n fmt.Fprintf(os.Stderr, \"Full HTTP response: %v\\n\", r)\n if apiErr, ok := err.(*onesignal.GenericOpenAPIError); ok {\n // ErrorMessages() flattens any error-envelope shape to a []string;\n // the raw body remains on Body().\n fmt.Fprintf(os.Stderr, \"Error Messages: %v\\n\", apiErr.ErrorMessages())\n fmt.Fprintf(os.Stderr, \"Response Body: %s\\n\", apiErr.Body())\n }\n }\n // response from `CreateCustomEvents`: map[string]interface{}\n fmt.Fprintf(os.Stdout, \"Response from `DefaultApi.CreateCustomEvents`: %v\\n\", resp)\n}"},{"lang":"ruby","label":"Ruby SDK","source":"require 'onesignal'\n# setup authorization\nOneSignal.configure do |config|\n # Configure Bearer authorization: rest_api_key\n config.rest_api_key = 'YOUR_REST_API_KEY'\n\nend\n\napi_instance = OneSignal::DefaultApi.new\napp_id = 'YOUR_APP_ID' # String | Your OneSignal App ID in UUID v4 format.\ncustom_events_request = OneSignal::CustomEventsRequest.new({events: [OneSignal::CustomEvent.new({name: 'YOUR_NAME'})]}) # CustomEventsRequest | \n\nbegin\n # Create custom events\n result = api_instance.create_custom_events(app_id, custom_events_request)\n p result\nrescue OneSignal::ApiError => e\n puts \"Error when calling DefaultApi->create_custom_events: #{e}\"\n puts \"Status Code: #{e.code}\"\n # `e.error_messages` flattens any error-envelope shape to an Array\u003cString>;\n # the raw body remains on `e.response_body`.\n puts \"Error Messages: #{e.error_messages}\"\n puts \"Response Body: #{e.response_body}\"\nend"},{"lang":"java","label":"Java SDK","source":"// Import classes:\nimport java.util.Arrays;\nimport java.util.List;\nimport com.onesignal.client.ApiClient;\nimport com.onesignal.client.ApiException;\nimport com.onesignal.client.Configuration;\nimport com.onesignal.client.auth.*;\nimport com.onesignal.client.model.*;\nimport com.onesignal.client.api.DefaultApi;\n\npublic class Example {\n public static void main(String[] args) {\n ApiClient defaultClient = Configuration.getDefaultApiClient();\n defaultClient.setBasePath(\"https://api.onesignal.com\");\n \n // Configure HTTP bearer authorization: rest_api_key\n HttpBearerAuth rest_api_key = (HttpBearerAuth) defaultClient.getAuthentication(\"rest_api_key\");\n rest_api_key.setBearerToken(\"YOUR_REST_API_KEY\");\n\n DefaultApi apiInstance = new DefaultApi(defaultClient);\n String appId = \"YOUR_APP_ID\"; // String | Your OneSignal App ID in UUID v4 format.\n CustomEventsRequest customEventsRequest = new CustomEventsRequest().events(Arrays.asList(new CustomEvent().name(\"YOUR_NAME\"))); // CustomEventsRequest | \n try {\n Object result = apiInstance.createCustomEvents(appId, customEventsRequest);\n System.out.println(result);\n } catch (ApiException e) {\n System.err.println(\"Exception when calling DefaultApi#createCustomEvents\");\n System.err.println(\"Status code: \" + e.getCode());\n // getErrorMessages() flattens any error-envelope shape to a List\u003cString>;\n // the raw body remains on getResponseBody().\n System.err.println(\"Error messages: \" + e.getErrorMessages());\n System.err.println(\"Reason: \" + e.getResponseBody());\n System.err.println(\"Response headers: \" + e.getResponseHeaders());\n e.printStackTrace();\n }\n }\n}"},{"lang":"csharp","label":"C# SDK","source":"using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing OneSignalApi.Api;\nusing OneSignalApi.Client;\nusing OneSignalApi.Model;\n\nnamespace Example\n{\n public class CreateCustomEventsExample\n {\n public static void Main()\n {\n Configuration config = new Configuration();\n config.BasePath = \"https://api.onesignal.com\";\n // Configure Bearer token for authorization: rest_api_key\n config.AccessToken = \"YOUR_REST_API_KEY\";\n\n var apiInstance = new DefaultApi(config);\n var appId = \"YOUR_APP_ID\"; // string | Your OneSignal App ID in UUID v4 format.\n var customEventsRequest = new CustomEventsRequest(events: new List\u003cCustomEvent> { new CustomEvent(name: \"YOUR_NAME\") }); // CustomEventsRequest | \n\n try\n {\n // Create custom events\n Object result = apiInstance.CreateCustomEvents(appId, customEventsRequest);\n Debug.WriteLine(result);\n }\n catch (ApiException e)\n {\n Debug.Print(\"Exception when calling DefaultApi.CreateCustomEvents: \" + e.Message );\n Debug.Print(\"Status Code: \"+ e.ErrorCode);\n // e.ErrorMessages flattens any error-envelope shape to an IReadOnlyList\u003cstring>;\n // the raw body remains on e.ErrorContent.\n Debug.Print(\"Error Messages: \" + string.Join(\", \", e.ErrorMessages));\n Debug.Print(\"Response Body: \" + e.ErrorContent);\n Debug.Print(e.StackTrace);\n }\n }\n }\n}"},{"lang":"rust","label":"Rust SDK","source":"use onesignal_rust_api::apis::configuration::Configuration;\nuse onesignal_rust_api::apis::default_api;\n\nuse onesignal_rust_api::models;\n\n\n#[tokio::main]\nasync fn main() {\n let mut configuration = Configuration::new();\n configuration.rest_api_key_token = Some(\"YOUR_REST_API_KEY\".to_string());\n\n\n // Realistic values are pulled from the spec's `example:` fields where present.\n let app_id: \u0026str = \"YOUR_APP_ID\";\n let custom_events_request: models::CustomEventsRequest = models::CustomEventsRequest::new(vec![models::CustomEvent::new(\"YOUR_NAME\".to_string())]);\n\n match default_api::create_custom_events(\u0026configuration, app_id, custom_events_request).await {\n Ok(resp) => println!(\"{:?}\", resp),\n Err(e @ onesignal_rust_api::apis::Error::ResponseError(_)) => {\n // `e.error_messages()` flattens any error-envelope shape to a Vec\u003cString>;\n // the raw response remains on the ResponseError variant.\n eprintln!(\"create_custom_events failed: {:?}\", e.error_messages());\n }\n Err(e) => eprintln!(\"create_custom_events failed: {:?}\", e),\n }\n}"}],"parameters":["723da5e0-b122-4121-b48b-eaf67b534a0a","226da2dc-dd9c-42ee-9491-687604c8f3d0"],"requestBody":"602121ec-178a-496f-a6e4-4c66c415b4f3","responses":{"202":"03284ed0-0ac7-4d57-a851-c83f759a5a61","400":"8c331733-48fc-48fd-8555-55fbfb2d6b2b","401":"6dca6436-8096-4a48-9f00-afcfcf8707ae","429":"0141bccc-a04e-4de8-b40d-7f4324f21ed6","503":"d5c5b6b3-509e-4667-8261-4fc40853d5ce"},"deprecated":false,"method":"post","type":"path","servers":["cf753503-cc1a-4f14-8e18-590f517b52c4"],"security":["c673d826-9e50-44e7-be1a-14cb91ce6281"],"path":"/apps/{app_id}/custom_events","baseUrlOptions":["https://api.onesignal.com"],"title":"Create Custom Events","codeSamples":[{"label":"Node.js SDK","lang":"typescript","source":"import Onesignal from '@onesignal/node-onesignal';\n\nconst configuration = Onesignal.createConfiguration({\n restApiKey: 'YOUR_REST_API_KEY',\n});\nconst apiInstance = new Onesignal.DefaultApi(configuration);\n\n// string | Your OneSignal App ID in UUID v4 format.\nconst appId: string = \"YOUR_APP_ID\";\n// CustomEventsRequest\nconst customEventsRequest: Onesignal.CustomEventsRequest = {\n events: [\n {\n name: \"YOUR_NAME\",\n },\n ],\n };\n\ntry {\n const response = await apiInstance.createCustomEvents(appId, customEventsRequest);\n console.log(response);\n} catch (e) {\n if (e instanceof Onesignal.ApiException) {\n // `e.errorMessages` flattens any error-envelope shape to a `string[]`;\n // the raw parsed body remains on `e.body`.\n console.error(\"createCustomEvents failed: HTTP \" + e.code, e.errorMessages);\n } else {\n throw e;\n }\n}"},{"label":"Python SDK","lang":"python","source":"import onesignal\nfrom onesignal.api import default_api\nfrom onesignal.models import *\nfrom pprint import pprint\n\n# See configuration.py for a list of all supported configuration parameters.\n# Some of the OneSignal endpoints require ORGANIZATION_API_KEY token for authorization, while others require REST_API_KEY.\n# We recommend adding both of them in the configuration page so that you will not need to figure it out yourself.\nconfiguration = onesignal.Configuration(\n rest_api_key = \"YOUR_REST_API_KEY\", # App REST API key required for most endpoints\n organization_api_key = \"YOUR_ORGANIZATION_API_KEY\" # Organization key is only required for creating new apps and other top-level endpoints\n)\n\n\n# Enter a context with an instance of the API client\nwith onesignal.ApiClient(configuration) as api_client:\n # Create an instance of the API class\n api_instance = default_api.DefaultApi(api_client)\n app_id = \"YOUR_APP_ID\" # Your OneSignal App ID in UUID v4 format. \n custom_events_request = CustomEventsRequest(\n events=[\n CustomEvent(\n name=\"YOUR_NAME\",\n ),\n ],\n ) \n\n try:\n # Create custom events\n api_response = api_instance.create_custom_events(app_id, custom_events_request)\n pprint(api_response)\n except onesignal.ApiException as e:\n print(\"Exception when calling DefaultApi->create_custom_events: %s\\n\" % e)\n print(\"Status Code: %s\" % e.status)\n print(\"Response Body: %s\" % e.body)"},{"label":"PHP SDK","lang":"php","source":"\u003c?php\nrequire_once(__DIR__ . '/vendor/autoload.php');\n\n\n// Configure Bearer authorization: rest_api_key\n$config = onesignal\\client\\Configuration::getDefaultConfiguration()\n ->setRestApiKeyToken('YOUR_REST_API_KEY')\n ->setOrganizationApiKeyToken('YOUR_ORGANIZATION_API_KEY');\n\n\n\n$apiInstance = new onesignal\\client\\Api\\DefaultApi(\n // If you want use custom http client, pass your client which implements `GuzzleHttp\\ClientInterface`.\n // This is optional, `GuzzleHttp\\Client` will be used as default.\n new GuzzleHttp\\Client(),\n $config\n);\n$app_id = 'YOUR_APP_ID'; // string | Your OneSignal App ID in UUID v4 format.\n$custom_events_request = new \\onesignal\\client\\model\\CustomEventsRequest(['events' => [new \\onesignal\\client\\model\\CustomEvent(['name' => 'YOUR_NAME'])]]); // \\onesignal\\client\\model\\CustomEventsRequest\n\ntry {\n $result = $apiInstance->createCustomEvents($app_id, $custom_events_request);\n print_r($result);\n} catch (\\onesignal\\client\\ApiException $e) {\n echo 'Exception when calling DefaultApi->createCustomEvents: ', $e->getMessage(), PHP_EOL;\n echo 'Status Code: ', $e->getCode(), PHP_EOL;\n // getErrorMessages() flattens any error-envelope shape to a string[];\n // the raw body remains on getResponseBody().\n echo 'Error Messages: ', implode(', ', $e->getErrorMessages()), PHP_EOL;\n echo 'Response Body: ', $e->getResponseBody(), PHP_EOL;\n} catch (\\Exception $e) {\n echo 'Exception when calling DefaultApi->createCustomEvents: ', $e->getMessage(), PHP_EOL;\n}"},{"label":"Go SDK","lang":"go","source":"package main\n\nimport (\n \"context\"\n \"fmt\"\n \"os\"\n\n \"github.com/OneSignal/onesignal-go-api/v5\"\n)\n\nfunc main() {\n appId := \"YOUR_APP_ID\" // string | Your OneSignal App ID in UUID v4 format.\n customEventsRequest := *onesignal.NewCustomEventsRequest([]onesignal.CustomEvent{*onesignal.NewCustomEvent(\"YOUR_NAME\")}) // CustomEventsRequest | \n\n configuration := onesignal.NewConfiguration()\n apiClient := onesignal.NewAPIClient(configuration)\n\n restAuth := context.WithValue(context.Background(), onesignal.RestApiKey, \"YOUR_REST_API_KEY\") // App REST API key required for most endpoints\n\n resp, r, err := apiClient.DefaultApi.CreateCustomEvents(restAuth, appId).CustomEventsRequest(customEventsRequest).Execute()\n\n if err != nil {\n fmt.Fprintf(os.Stderr, \"Error when calling `DefaultApi.CreateCustomEvents``: %v\\n\", err)\n fmt.Fprintf(os.Stderr, \"Full HTTP response: %v\\n\", r)\n if apiErr, ok := err.(*onesignal.GenericOpenAPIError); ok {\n // ErrorMessages() flattens any error-envelope shape to a []string;\n // the raw body remains on Body().\n fmt.Fprintf(os.Stderr, \"Error Messages: %v\\n\", apiErr.ErrorMessages())\n fmt.Fprintf(os.Stderr, \"Response Body: %s\\n\", apiErr.Body())\n }\n }\n // response from `CreateCustomEvents`: map[string]interface{}\n fmt.Fprintf(os.Stdout, \"Response from `DefaultApi.CreateCustomEvents`: %v\\n\", resp)\n}"},{"label":"Ruby SDK","lang":"ruby","source":"require 'onesignal'\n# setup authorization\nOneSignal.configure do |config|\n # Configure Bearer authorization: rest_api_key\n config.rest_api_key = 'YOUR_REST_API_KEY'\n\nend\n\napi_instance = OneSignal::DefaultApi.new\napp_id = 'YOUR_APP_ID' # String | Your OneSignal App ID in UUID v4 format.\ncustom_events_request = OneSignal::CustomEventsRequest.new({events: [OneSignal::CustomEvent.new({name: 'YOUR_NAME'})]}) # CustomEventsRequest | \n\nbegin\n # Create custom events\n result = api_instance.create_custom_events(app_id, custom_events_request)\n p result\nrescue OneSignal::ApiError => e\n puts \"Error when calling DefaultApi->create_custom_events: #{e}\"\n puts \"Status Code: #{e.code}\"\n # `e.error_messages` flattens any error-envelope shape to an Array\u003cString>;\n # the raw body remains on `e.response_body`.\n puts \"Error Messages: #{e.error_messages}\"\n puts \"Response Body: #{e.response_body}\"\nend"},{"label":"Java SDK","lang":"java","source":"// Import classes:\nimport java.util.Arrays;\nimport java.util.List;\nimport com.onesignal.client.ApiClient;\nimport com.onesignal.client.ApiException;\nimport com.onesignal.client.Configuration;\nimport com.onesignal.client.auth.*;\nimport com.onesignal.client.model.*;\nimport com.onesignal.client.api.DefaultApi;\n\npublic class Example {\n public static void main(String[] args) {\n ApiClient defaultClient = Configuration.getDefaultApiClient();\n defaultClient.setBasePath(\"https://api.onesignal.com\");\n \n // Configure HTTP bearer authorization: rest_api_key\n HttpBearerAuth rest_api_key = (HttpBearerAuth) defaultClient.getAuthentication(\"rest_api_key\");\n rest_api_key.setBearerToken(\"YOUR_REST_API_KEY\");\n\n DefaultApi apiInstance = new DefaultApi(defaultClient);\n String appId = \"YOUR_APP_ID\"; // String | Your OneSignal App ID in UUID v4 format.\n CustomEventsRequest customEventsRequest = new CustomEventsRequest().events(Arrays.asList(new CustomEvent().name(\"YOUR_NAME\"))); // CustomEventsRequest | \n try {\n Object result = apiInstance.createCustomEvents(appId, customEventsRequest);\n System.out.println(result);\n } catch (ApiException e) {\n System.err.println(\"Exception when calling DefaultApi#createCustomEvents\");\n System.err.println(\"Status code: \" + e.getCode());\n // getErrorMessages() flattens any error-envelope shape to a List\u003cString>;\n // the raw body remains on getResponseBody().\n System.err.println(\"Error messages: \" + e.getErrorMessages());\n System.err.println(\"Reason: \" + e.getResponseBody());\n System.err.println(\"Response headers: \" + e.getResponseHeaders());\n e.printStackTrace();\n }\n }\n}"},{"label":"C# SDK","lang":"csharp","source":"using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing OneSignalApi.Api;\nusing OneSignalApi.Client;\nusing OneSignalApi.Model;\n\nnamespace Example\n{\n public class CreateCustomEventsExample\n {\n public static void Main()\n {\n Configuration config = new Configuration();\n config.BasePath = \"https://api.onesignal.com\";\n // Configure Bearer token for authorization: rest_api_key\n config.AccessToken = \"YOUR_REST_API_KEY\";\n\n var apiInstance = new DefaultApi(config);\n var appId = \"YOUR_APP_ID\"; // string | Your OneSignal App ID in UUID v4 format.\n var customEventsRequest = new CustomEventsRequest(events: new List\u003cCustomEvent> { new CustomEvent(name: \"YOUR_NAME\") }); // CustomEventsRequest | \n\n try\n {\n // Create custom events\n Object result = apiInstance.CreateCustomEvents(appId, customEventsRequest);\n Debug.WriteLine(result);\n }\n catch (ApiException e)\n {\n Debug.Print(\"Exception when calling DefaultApi.CreateCustomEvents: \" + e.Message );\n Debug.Print(\"Status Code: \"+ e.ErrorCode);\n // e.ErrorMessages flattens any error-envelope shape to an IReadOnlyList\u003cstring>;\n // the raw body remains on e.ErrorContent.\n Debug.Print(\"Error Messages: \" + string.Join(\", \", e.ErrorMessages));\n Debug.Print(\"Response Body: \" + e.ErrorContent);\n Debug.Print(e.StackTrace);\n }\n }\n }\n}"},{"label":"Rust SDK","lang":"rust","source":"use onesignal_rust_api::apis::configuration::Configuration;\nuse onesignal_rust_api::apis::default_api;\n\nuse onesignal_rust_api::models;\n\n\n#[tokio::main]\nasync fn main() {\n let mut configuration = Configuration::new();\n configuration.rest_api_key_token = Some(\"YOUR_REST_API_KEY\".to_string());\n\n\n // Realistic values are pulled from the spec's `example:` fields where present.\n let app_id: \u0026str = \"YOUR_APP_ID\";\n let custom_events_request: models::CustomEventsRequest = models::CustomEventsRequest::new(vec![models::CustomEvent::new(\"YOUR_NAME\".to_string())]);\n\n match default_api::create_custom_events(\u0026configuration, app_id, custom_events_request).await {\n Ok(resp) => println!(\"{:?}\", resp),\n Err(e @ onesignal_rust_api::apis::Error::ResponseError(_)) => {\n // `e.error_messages()` flattens any error-envelope shape to a Vec\u003cString>;\n // the raw response remains on the ResponseError variant.\n eprintln!(\"create_custom_events failed: {:?}\", e.error_messages());\n }\n Err(e) => eprintln!(\"create_custom_events failed: {:?}\", e),\n }\n}"}],"requestExampleLanguages":["bash","typescript","python","php","go","ruby","java","csharp","rust"],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"723da5e0-b122-4121-b48b-eaf67b534a0a":{"name":"app_id","in":"path","description":"Your OneSignal App ID in UUID v4 format. See [Keys \u0026 IDs](/docs/en/keys-and-ids).","schema":{"type":"string","isRequired":true,"description":"Your OneSignal App ID in UUID v4 format. See [Keys \u0026 IDs](/docs/en/keys-and-ids).","uniqueKey":"","typeLabel":"string"},"required":true},"226da2dc-dd9c-42ee-9491-687604c8f3d0":{"name":"Authorization","in":"header","description":"Your app API key with prefix `Key `. See [Keys \u0026 IDs](/docs/en/keys-and-ids).","required":true,"schema":{"type":"string","default":"Key YOUR_APP_API_KEY","isRequired":true,"description":"Your app API key with prefix `Key `. See [Keys \u0026 IDs](/docs/en/keys-and-ids).","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["events"],"properties":{"events":{"type":"array","description":"Array of event objects to be recorded. Maximum size for each event is `2024` bytes. Maximum size of request is `1` MB.","items":{"properties":{"name":{"type":"string","description":"The identifier or name of the event. Maximum 512 bytes. Names are measured in bytes, so a name made of multi-byte characters reaches the limit sooner than its character count suggests.","isRequired":true,"uniqueKey":"events.items.[INDEX].name","typeLabel":"string"},"external_id":{"type":"string","description":"The external ID of the user targeted for the event. Either the user's External ID or OneSignal ID is required.","uniqueKey":"events.items.[INDEX].external_id","typeLabel":"string"},"onesignal_id":{"type":"string","description":"The OneSignal ID of the user targeted for the event. Either the user's External ID or OneSignal ID is required.","uniqueKey":"events.items.[INDEX].onesignal_id","typeLabel":"string"},"timestamp":{"type":"string","description":"Time the event occurred as an [ISO8601 formatted string](https://www.timestamp-converter.com/). Defaults to the current time if not provided. If the timestamp provided is in the future, it will be reset to the current time.","uniqueKey":"events.items.[INDEX].timestamp","typeLabel":"string"},"idempotency_key":{"type":"string","description":"A unique UUID for avoiding duplicate custom event processing. Repeated events with the same idempotency_key will not be processed.","uniqueKey":"events.items.[INDEX].idempotency_key","typeLabel":"string"},"properties":{"type":"object","description":"Properties or data related to the event, like {\"geography\": \"USA\"}","uniqueKey":"events.items.[INDEX].properties","typeLabel":"object"}},"required":["name"],"type":"object","uniqueKey":"events.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"events","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"events":[{"name":"\u003cstring>","external_id":"\u003cstring>","onesignal_id":"\u003cstring>","timestamp":"\u003cstring>","idempotency_key":"\u003cstring>","properties":{}}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"03284ed0-0ac7-4d57-a851-c83f759a5a61":{"description":"Accepted. Events that could not be processed are listed in `errors`. Other events in the same request were processed. An empty `errors` array, or a response with no body, means every event was accepted. An individual event fails when its user identifier does not match a OneSignal user (`not found`), when `name` is empty (`empty event name`), when `name` is longer than 512 bytes (`event name too long`), or when the app is at its limit of 1,000 unique event names (`too many event names`).","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","description":"Errors for specific events in the payload. If this is returned, only the specified events have failed. Other events in the same payload were successfully processed.","items":{"type":"object","properties":{"event_user_id":{"type":"string","description":"The user identifier sent on the event that failed (`external_id` or `onesignal_id`).","example":"abc123","uniqueKey":"errors.items.[INDEX].event_user_id","typeLabel":"string"},"event_id":{"oneOf":[{"type":"string","description":"The `event_id` value sent with the event. `null` when the event did not include one.","uniqueKey":"errors.items.[INDEX].event_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The `event_id` value sent with the event. `null` when the event did not include one.","uniqueKey":"errors.items.[INDEX].event_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors.items.[INDEX].event_id","typeLabel":"string | null"},"error":{"type":"object","description":"Information about the error that caused the event to not be processed.","properties":{"code":{"type":"string","description":"A short error code. Event-level codes include `not found`, `empty event name`, `event name too long`, and `too many event names`.","example":"not found","uniqueKey":"errors.items.[INDEX].error.code","typeLabel":"string"},"title":{"type":"string","description":"Human-readable information about what caused the error.","example":"failed to find a onesignal_id for user_id abc123","uniqueKey":"errors.items.[INDEX].error.title","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX].error","typeLabel":"object"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Unknown user":{"title":"Unknown user","value":{"errors":[{"event_user_id":"user_1234","event_id":null,"error":{"code":"not found","title":"failed to find a onesignal_id for user_id user_1234"}}]}},"Too many event names":{"title":"Too many event names","value":{"errors":[{"event_user_id":"user_1234","event_id":null,"error":{"code":"too many event names","title":"app has reached its limit of 1000 unique event names"}}]}}},"exampleType":"examples"}},"exampleType":"examples"},"8c331733-48fc-48fd-8555-55fbfb2d6b2b":{"description":"Bad request. The whole request was rejected, including when an event has no `name` field or the JSON is malformed. The response body shape is currently an empty object placeholder. Treat any 400 as a fatal request error.","content":{"application/json":{"examples":{"Result":{"title":"Result","value":{}}},"schema":{"type":"object","properties":{},"uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"6dca6436-8096-4a48-9f00-afcfcf8707ae":{"description":"Unauthorized. The `Authorization` header is missing or invalid. This response uses `text/plain` with an empty body (not the standard `BasicErrorResponse` envelope). Treat any 401 from this endpoint as an auth failure regardless of body.","content":{"text/plain":{"examples":{"Result":{"title":"Result","value":""}},"exampleType":"examples"}},"exampleType":"examples"},"0141bccc-a04e-4de8-b40d-7f4324f21ed6":{"description":"Rate limit exceeded. Wait the number of seconds in the `Retry-After` header before retrying.","headers":{"Retry-After":{"description":"Number of seconds to wait before retrying the request. Always emitted on 429 responses.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"string","uniqueKey":"errors.items.[INDEX]","typeLabel":"string"},"description":"One or more human-readable error messages.","uniqueKey":"errors","typeLabel":"string[]"},"success":{"type":"boolean","description":"Present (and `false`) on some endpoints (notifications, templates, segments). Not emitted by every endpoint.","uniqueKey":"success","typeLabel":"boolean"},"reference":{"type":"array","items":{"type":"string","uniqueKey":"reference.items.[INDEX]","typeLabel":"string"},"description":"Documentation URL fragments related to the error. Only emitted by the API-key auth error helpers.","uniqueKey":"reference","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"errors":["API rate limit exceeded"]},"examples":{"Example":{"title":"Example","value":{"errors":["API rate limit exceeded"]}}},"exampleType":"examples"}},"exampleType":"examples"},"d5c5b6b3-509e-4667-8261-4fc40853d5ce":{"description":"Service temporarily unavailable. Retry after a short backoff. The body may be empty or non-JSON in some failure modes.","headers":{"Retry-After":{"description":"Number of seconds to wait before retrying the request. This header is optional and may be absent when a proxy or load balancer generates the 503.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"string","uniqueKey":"errors.items.[INDEX]","typeLabel":"string"},"description":"One or more human-readable error messages.","uniqueKey":"errors","typeLabel":"string[]"},"success":{"type":"boolean","description":"Present (and `false`) on some endpoints (notifications, templates, segments). Not emitted by every endpoint.","uniqueKey":"success","typeLabel":"boolean"},"reference":{"type":"array","items":{"type":"string","uniqueKey":"reference.items.[INDEX]","typeLabel":"string"},"description":"Documentation URL fragments related to the error. Only emitted by the API-key auth error helpers.","uniqueKey":"reference","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"errors":["Service temporarily unavailable"]},"examples":{"Example":{"title":"Example","value":{"errors":["Service temporarily unavailable"]}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"c673d826-9e50-44e7-be1a-14cb91ce6281":{}},"servers":{"cf753503-cc1a-4f14-8e18-590f517b52c4":{"url":"https://api.onesignal.com"}}},"originalFileLocation":"openapi.json"},"subdomain":"onesignal","siteName":"OneSignal","title":"Create custom events - OneSignal","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/reference/create-custom-events","matchLevel":0},"cn":{"href":"/reference/create-custom-events","matchLevel":0},"ko":{"href":"/reference/create-custom-events","matchLevel":0},"ja":{"href":"/reference/create-custom-events","matchLevel":0},"tr":{"href":"/reference/create-custom-events","matchLevel":0},"pt-BR":{"href":"/reference/create-custom-events","matchLevel":0},"es":{"href":"/reference/create-custom-events","matchLevel":0},"fr":{"href":"/reference/create-custom-events","matchLevel":0}}},"lastModified":"2026-09-25T22:28:40.640Z","originalFileLocation":"reference/create-custom-events.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"The Custom Events API allows you to record user events. Custom events can represent any action users take in your application, such as completing a purchase, viewing content, or achieving milestones.\">\u003cmeta data-mint-head name=\"application-name\" content=\"OneSignal\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create custom events - OneSignal\">\u003cmeta data-mint-head property=\"og:description\" content=\"The Custom Events API allows you to record user events. Custom events can represent any action users take in your application, such as completing a purchase, viewing content, or achieving milestones.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OneSignal\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://documentation.onesignal.com/reference/create-custom-events\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://onesignal.mintlify.app/_mintlify/api/og/v2?division=Custom+Events\u0026amp;title=Create+custom+events\u0026amp;description=The+Custom+Events+API+allows+you+to+record+user+events.+Custom+events+can+represent+any+action+users+take+in+your+application%2C+such+as+completing+a+purchase%2C+vi\u0026amp;theme=8d648f04f85028b307bd669b\u0026amp;signature=7c44c5fe6a23cbc6df745af29a70f2303cde3f63767ebabc2234db99d7a73966\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Create custom events - OneSignal\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"The Custom Events API allows you to record user events. Custom events can represent any action users take in your application, such as completing a purchase, viewing content, or achieving milestones.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://onesignal.mintlify.app/_mintlify/api/og/v2?division=Custom+Events\u0026amp;title=Create+custom+events\u0026amp;description=The+Custom+Events+API+allows+you+to+record+user+events.+Custom+events+can+represent+any+action+users+take+in+your+application%2C+such+as+completing+a+purchase%2C+vi\u0026amp;theme=8d648f04f85028b307bd669b\u0026amp;signature=7c44c5fe6a23cbc6df745af29a70f2303cde3f63767ebabc2234db99d7a73966\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/onesignal/eCiRydtW5fLfLRWp/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OneSignal Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3A3DB3\">\u003clink data-mint-head rel=\"canonical\" href=\"https://documentation.onesignal.com/reference/create-custom-events\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/reference/create-custom-events.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://documentation.onesignal.com/#organization\",\"name\":\"OneSignal\",\"url\":\"https://documentation.onesignal.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/onesignal/yJcueeDCO7UpHnnY/logo/OneSignal-Logo.svg?fit=max\u0026auto=format\u0026n=yJcueeDCO7UpHnnY\u0026q=85\u0026s=1fcfb6fef6d820fd9d99c74850711107\"}},{\"@type\":\"WebSite\",\"@id\":\"https://documentation.onesignal.com#website\",\"name\":\"OneSignal\",\"url\":\"https://documentation.onesignal.com\",\"publisher\":{\"@id\":\"https://documentation.onesignal.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://documentation.onesignal.com/reference/create-custom-events#webpage\",\"url\":\"https://documentation.onesignal.com/reference/create-custom-events\",\"name\":\"Create custom events\",\"description\":\"The Custom Events API allows you to record user events. Custom events can represent any action users take in your application, such as completing a purchase, viewing content, or achieving milestones.\",\"dateModified\":\"2026-09-25T22:28:40.640Z\",\"isPartOf\":{\"@id\":\"https://documentation.onesignal.com#website\"},\"breadcrumb\":{\"@id\":\"https://documentation.onesignal.com/reference/create-custom-events#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://documentation.onesignal.com/reference/create-custom-events#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API reference\",\"item\":\"https://documentation.onesignal.com/reference/create-message\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create custom events\",\"item\":\"https://documentation.onesignal.com/reference/create-custom-events\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://documentation.onesignal.com/reference/create-custom-events#apireference\",\"headline\":\"Create custom events\",\"name\":\"Create custom events\",\"description\":\"The Custom Events API allows you to record user events. Custom events can represent any action users take in your application, such as completing a purchase, viewing content, or achieving milestones.\",\"url\":\"https://documentation.onesignal.com/reference/create-custom-events\",\"mainEntityOfPage\":{\"@id\":\"https://documentation.onesignal.com/reference/create-custom-events#webpage\"},\"dateModified\":\"2026-09-25T22:28:40.640Z\",\"publisher\":{\"@id\":\"https://documentation.onesignal.com/#organization\"},\"isPartOf\":{\"@id\":\"https://documentation.onesignal.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OneSignal\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"OneSignal","nav":{"global":null,"languages":[{"language":"en","tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/docs/en/home"}]},{"tab":"User Guides","pages":[{"title":"User Guides","href":"/docs/en/quickstart-guide"}]},{"tab":"Developer Guides","pages":[{"title":"Developer Guides","href":"/docs/en/developers"}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/docs/en/tutorials"}]},{"tab":"API Reference","groups":[{"group":"Using the REST APIs","pages":[{"title":"REST API overview","href":"/reference/rest-api-overview"},{"title":"Rate limits and error handling","href":"/reference/rate-limits"},{"title":"Idempotent API requests","href":"/reference/idempotent-notification-requests"},{"title":"Server SDK reference","href":"/docs/en/server-sdk-reference"}]},{"group":"API reference","pages":[{"group":"Messages","pages":[{"title":"Sending messages with the OneSignal API","href":"/reference/create-message"},{"title":"Push notification","openapi":"POST /notifications?c=push","href":"/reference/push-notification"},{"title":"Email","openapi":"POST /notifications?c=email","href":"/reference/email"},{"title":"SMS","openapi":"POST /notifications?c=sms","href":"/reference/sms"},{"title":"View message","openapi":"GET /notifications/{message_id}?app_id={app_id}","href":"/reference/view-message"},{"title":"View messages","openapi":"GET /notifications?app_id={app_id}\u0026limit={limit}\u0026offset={offset}\u0026kind={kind}\u0026template_id={template_id}\u0026time_offset={time_offset}","href":"/reference/view-messages"},{"title":"Cancel message","openapi":"DELETE /notifications/{message_id}?app_id={app_id}","href":"/reference/cancel-message"},{"title":"Message history","openapi":"POST /notifications/{message_id}/history","href":"/reference/message-history"},{"title":"Estimated recipients","openapi":"POST /notifications/count-unsaved","href":"/reference/count-unsaved"}]},{"group":"Live Activities","pages":[{"title":"Start Live Activity","openapi":"POST /apps/{app_id}/activities/activity/{activity_type}","href":"/reference/start-live-activity"},{"title":"Update Live Activity","openapi":"POST /apps/{app_id}/live_activities/{activity_id}/notifications","description":"Update the content of a running iOS Live Activity or end it with the OneSignal REST API. Covers required body fields, update priority, and dismissal timing.","href":"/reference/update-live-activity-api"}]},{"group":"Custom Events","pages":[{"title":"Create custom events","openapi":"POST /apps/{app_id}/custom_events","href":"/reference/create-custom-events"}]},{"group":"Users","pages":[{"title":"Create user","openapi":"POST /apps/{app_id}/users","description":"Create a new user or modify the subscriptions associated with an existing User.","href":"/reference/create-user"},{"title":"View user","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/view-user"},{"title":"Update user","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/update-user"},{"title":"Delete user","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/delete-user"},{"title":"View user identity","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/fetch-aliases"},{"title":"View user identity (by subscription)","openapi":"GET /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/fetch-identity-by-subscription"},{"title":"Create or update alias","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/create-alias"},{"title":"Create alias (by subscription)","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/create-alias-by-subscription"},{"title":"Delete alias","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity/{alias_label_to_delete}","href":"/reference/delete-alias"}]},{"group":"Subscriptions","pages":[{"title":"Create Subscription by alias","openapi":"POST /apps/{app_id}/users/by/{alias_label}/{alias_id}/subscriptions","href":"/reference/create-subscription"},{"title":"Update Subscription by ID","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/update-subscription"},{"title":"Update Subscription by token","openapi":"PATCH /apps/{app_id}/subscriptions_by_token/{token_type}/{token}","href":"/reference/update-subscription-by-token"},{"title":"Delete Subscription","openapi":"DELETE /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/delete-subscription"},{"title":"Transfer Subscription","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/owner","href":"/reference/transfer-subscription"},{"title":"Unsubscribe email with token","openapi":"POST /apps/{app_id}/notifications/{notification_id}/unsubscribe?token={token}","href":"/reference/unsubscribe-with-token"}]},{"group":"Templates","pages":[{"title":"Create template","openapi":"POST /templates","href":"/reference/create-template"},{"title":"Update template","openapi":"PATCH /templates/{template_id}?app_id={app_id}","href":"/reference/update-template"},{"title":"View templates","openapi":"GET /templates?app_id={app_id}\u0026limit={limit}\u0026offset={offset}","href":"/reference/view-templates"},{"title":"View template","openapi":"GET /templates/{template_id}?app_id={app_id}","href":"/reference/view-template"},{"title":"Delete template","openapi":"DELETE /templates/{template_id}?app_id={app_id}","href":"/reference/delete-template"},{"title":"Copy template to another app","openapi":"POST /templates/{template_id}/copy_to_app?app_id={app_id}","href":"/reference/copy-template-to-another-app"}]},{"group":"Segments","pages":[{"title":"View segments","openapi":"GET /apps/{app_id}/segments","href":"/reference/view-segments"},{"title":"View segment","openapi":"GET /apps/{app_id}/segments/{segment_id}","href":"/reference/view-segment"},{"title":"Create segment","openapi":"POST /apps/{app_id}/segments","href":"/reference/create-segments"},{"title":"Update segment","openapi":"PATCH /apps/{app_id}/segments/{segment_id}","href":"/reference/update-segment"},{"title":"Delete segment","openapi":"DELETE /apps/{app_id}/segments/{segment_id}","href":"/reference/delete-segments"}]},{"group":"Journeys","pages":[{"title":"View journeys","tag":"BETA","openapi":"GET /apps/{app_id}/journeys","href":"/reference/view-journeys"},{"title":"View journey","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}","href":"/reference/view-journey"},{"title":"View journey stats","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}/stats","href":"/reference/view-journey-stats"},{"title":"Create journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys","href":"/reference/create-journey"},{"title":"Duplicate journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys/{id}/duplicate","href":"/reference/duplicate-journey"},{"title":"Update journey","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}","href":"/reference/update-journey"},{"title":"Update journey node","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}/nodes/{node_id}","href":"/reference/update-journey-node"},{"title":"Delete journey","tag":"BETA","openapi":"DELETE /apps/{app_id}/journeys/{id}","href":"/reference/delete-journey"}]},{"group":"Organization","pages":[{"title":"List audit logs","openapi":"GET /organizations/{organization_id}/audit_logs","href":"/reference/list-audit-logs"},{"title":"View apps","openapi":"GET /apps","href":"/reference/view-apps"},{"title":"View an app","openapi":"GET /apps/{app_id}","href":"/reference/view-an-app"},{"title":"Create an app","openapi":"POST /apps","href":"/reference/create-an-app"},{"title":"Update an app","openapi":"PUT /apps/{app_id}","href":"/reference/update-an-app"},{"title":"View API keys","openapi":"GET /apps/{app_id}/auth/tokens","href":"/reference/view-api-keys"},{"title":"Create API key","openapi":"POST /apps/{app_id}/auth/tokens","href":"/reference/create-api-key"},{"title":"Delete API key","openapi":"DELETE /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/delete-api-key"},{"title":"Update API key","openapi":"PATCH /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/update-api-key"},{"title":"Rotate API key","openapi":"POST /apps/{app_id}/auth/tokens/{token_id}/rotate","href":"/reference/rotate-api-key"}]},{"group":"Analytics","pages":[{"title":"Export subscriptions CSV","openapi":"POST /players/csv_export","href":"/reference/csv-export"},{"title":"Export audience activity CSV","openapi":"POST /notifications/{message_id}/export_events","href":"/reference/export-csv-of-events"},{"title":"View outcomes","openapi":"GET /apps/{app_id}/outcomes?outcome_names={outcome_names}\u0026outcome_time_range={outcome_time_range}\u0026outcome_platforms={outcome_platforms}\u0026outcome_attribution={outcome_attribution}","href":"/reference/view-outcomes"},{"title":"Email reputation statistics","openapi":"GET /apps/{app_id}/email_analytics/delivery_metrics","href":"/reference/delivery-metrics"},{"title":"Email provider metrics","openapi":"GET /apps/{app_id}/email_analytics/provider_metrics","href":"/reference/provider-metrics"},{"title":"Email provider metrics timeseries","openapi":"GET /apps/{app_id}/email_analytics/provider_metrics_timeseries","href":"/reference/provider-metrics-timeseries"}]},{"group":"Deprecated","pages":[{"title":"View players","deprecated":true,"href":"/reference/view-devices"},{"title":"View player","deprecated":true,"href":"/reference/view-device"},{"title":"Add a player","deprecated":true,"href":"/reference/add-a-device"},{"title":"Edit player","deprecated":true,"href":"/reference/edit-device"},{"title":"Edit tags with external user id","deprecated":true,"href":"/reference/edit-tags-with-external-user-id"},{"title":"Delete player record","deprecated":true,"href":"/reference/delete-user-record"}]}]}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/changelog"}]},{"tab":"Customer Success Hub","pages":[{"title":"Customer Success Hub","href":"/docs/en/customer-success-hub"}]}],"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://onesignal.com/blog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/OneSignal"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@onesignalofficial/playlists"}]}},{"language":"cn","tabs":[{"tab":"主页","pages":[{"title":"主页","href":"/docs/cn/home"}]},{"tab":"用户指南","pages":[{"title":"用户指南","href":"/docs/cn/quickstart-guide"}]},{"tab":"开发者指南","pages":[{"title":"开发者指南","href":"/docs/cn/developers"}]},{"tab":"教程","pages":[{"title":"教程","href":"/docs/cn/tutorials"}]},{"tab":"API Reference","groups":[{"group":"Using REST APIs","pages":[{"title":"REST API overview","href":"/reference/rest-api-overview"},{"title":"Rate limits and error handling","href":"/reference/rate-limits"}]},{"group":"API Reference","pages":[{"group":"Messages","pages":[{"title":"Sending messages with the OneSignal API","href":"/reference/create-message"},{"title":"Idempotent API requests","href":"/reference/idempotent-notification-requests"},{"title":"Push notification","openapi":"POST /notifications?c=push","href":"/reference/push-notification"},{"title":"Email","openapi":"POST /notifications?c=email","href":"/reference/email"},{"title":"SMS","openapi":"POST /notifications?c=sms","href":"/reference/sms"},{"title":"View message","openapi":"GET /notifications/{message_id}?app_id={app_id}","href":"/reference/view-message"},{"title":"View messages","openapi":"GET /notifications?app_id={app_id}\u0026limit={limit}\u0026offset={offset}\u0026kind={kind}\u0026template_id={template_id}\u0026time_offset={time_offset}","href":"/reference/view-messages"},{"title":"Cancel message","openapi":"DELETE /notifications/{message_id}?app_id={app_id}","href":"/reference/cancel-message"},{"title":"Message history","openapi":"POST /notifications/{message_id}/history","href":"/reference/message-history"},{"title":"Estimated recipients","openapi":"POST /notifications/count-unsaved","href":"/reference/count-unsaved"}]},{"group":"Live Activities","pages":[{"title":"Start Live Activity","openapi":"POST /apps/{app_id}/activities/activity/{activity_type}","href":"/reference/start-live-activity"},{"title":"Update Live Activity","openapi":"POST /apps/{app_id}/live_activities/{activity_id}/notifications","description":"Update the content of a running iOS Live Activity or end it with the OneSignal REST API. Covers required body fields, update priority, and dismissal timing.","href":"/reference/update-live-activity-api"}]},{"group":"Custom Events","pages":[{"title":"Create custom events","openapi":"POST /apps/{app_id}/custom_events","href":"/reference/create-custom-events"}]},{"group":"Users","pages":[{"title":"Create user","openapi":"POST /apps/{app_id}/users","description":"Create a new user or modify the subscriptions associated with an existing User.","href":"/reference/create-user"},{"title":"View user","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/view-user"},{"title":"Update user","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/update-user"},{"title":"Delete user","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/delete-user"},{"title":"View user identity","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/fetch-aliases"},{"title":"View user identity (by subscription)","openapi":"GET /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/fetch-identity-by-subscription"},{"title":"Create or update alias","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/create-alias"},{"title":"Create alias (by subscription)","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/create-alias-by-subscription"},{"title":"Delete alias","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity/{alias_label_to_delete}","href":"/reference/delete-alias"}]},{"group":"Subscriptions","pages":[{"title":"Create Subscription by alias","openapi":"POST /apps/{app_id}/users/by/{alias_label}/{alias_id}/subscriptions","href":"/reference/create-subscription"},{"title":"Update Subscription by ID","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/update-subscription"},{"title":"Update Subscription by token","openapi":"PATCH /apps/{app_id}/subscriptions_by_token/{token_type}/{token}","href":"/reference/update-subscription-by-token"},{"title":"Delete Subscription","openapi":"DELETE /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/delete-subscription"},{"title":"Transfer Subscription","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/owner","href":"/reference/transfer-subscription"},{"title":"Unsubscribe email with token","openapi":"POST /apps/{app_id}/notifications/{notification_id}/unsubscribe?token={token}","href":"/reference/unsubscribe-with-token"}]},{"group":"Templates","pages":[{"title":"Create template","openapi":"POST /templates","href":"/reference/create-template"},{"title":"Update template","openapi":"PATCH /templates/{template_id}?app_id={app_id}","href":"/reference/update-template"},{"title":"View templates","openapi":"GET /templates?app_id={app_id}\u0026limit={limit}\u0026offset={offset}","href":"/reference/view-templates"},{"title":"View template","openapi":"GET /templates/{template_id}?app_id={app_id}","href":"/reference/view-template"},{"title":"Delete template","openapi":"DELETE /templates/{template_id}?app_id={app_id}","href":"/reference/delete-template"},{"title":"Copy template to another app","openapi":"POST /templates/{template_id}/copy_to_app?app_id={app_id}","href":"/reference/copy-template-to-another-app"}]},{"group":"Segments","pages":[{"title":"View segments","openapi":"GET /apps/{app_id}/segments","href":"/reference/view-segments"},{"title":"View segment","openapi":"GET /apps/{app_id}/segments/{segment_id}","href":"/reference/view-segment"},{"title":"Create segment","openapi":"POST /apps/{app_id}/segments","href":"/reference/create-segments"},{"title":"Update segment","openapi":"PATCH /apps/{app_id}/segments/{segment_id}","href":"/reference/update-segment"},{"title":"Delete segment","openapi":"DELETE /apps/{app_id}/segments/{segment_id}","href":"/reference/delete-segments"}]},{"group":"Journeys","pages":[{"title":"View journeys","tag":"BETA","openapi":"GET /apps/{app_id}/journeys","href":"/reference/view-journeys"},{"title":"View journey","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}","href":"/reference/view-journey"},{"title":"View journey stats","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}/stats","href":"/reference/view-journey-stats"},{"title":"Create journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys","href":"/reference/create-journey"},{"title":"Duplicate journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys/{id}/duplicate","href":"/reference/duplicate-journey"},{"title":"Update journey","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}","href":"/reference/update-journey"},{"title":"Update journey node","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}/nodes/{node_id}","href":"/reference/update-journey-node"},{"title":"Delete journey","tag":"BETA","openapi":"DELETE /apps/{app_id}/journeys/{id}","href":"/reference/delete-journey"}]},{"group":"Configuration","pages":[{"title":"View apps","openapi":"GET /apps","href":"/reference/view-apps"},{"title":"View an app","openapi":"GET /apps/{app_id}","href":"/reference/view-an-app"},{"title":"Create an app","openapi":"POST /apps","href":"/reference/create-an-app"},{"title":"Update an app","openapi":"PUT /apps/{app_id}","href":"/reference/update-an-app"},{"title":"View API keys","openapi":"GET /apps/{app_id}/auth/tokens","href":"/reference/view-api-keys"},{"title":"Create API key","openapi":"POST /apps/{app_id}/auth/tokens","href":"/reference/create-api-key"},{"title":"Delete API key","openapi":"DELETE /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/delete-api-key"},{"title":"Update API key","openapi":"PATCH /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/update-api-key"},{"title":"Rotate API key","openapi":"POST /apps/{app_id}/auth/tokens/{token_id}/rotate","href":"/reference/rotate-api-key"}]},{"group":"Analytics","pages":[{"title":"Export subscriptions CSV","openapi":"POST /players/csv_export","href":"/reference/csv-export"},{"title":"Export audience activity CSV","openapi":"POST /notifications/{message_id}/export_events","href":"/reference/export-csv-of-events"},{"title":"View outcomes","openapi":"GET /apps/{app_id}/outcomes?outcome_names={outcome_names}\u0026outcome_time_range={outcome_time_range}\u0026outcome_platforms={outcome_platforms}\u0026outcome_attribution={outcome_attribution}","href":"/reference/view-outcomes"}]},{"group":"Deprecated","pages":[{"title":"View players","deprecated":true,"href":"/reference/view-devices"},{"title":"View player","deprecated":true,"href":"/reference/view-device"},{"title":"Add a player","deprecated":true,"href":"/reference/add-a-device"},{"title":"Edit player","deprecated":true,"href":"/reference/edit-device"},{"title":"Edit tags with external user id","deprecated":true,"href":"/reference/edit-tags-with-external-user-id"},{"title":"Delete player record","deprecated":true,"href":"/reference/delete-user-record"}]}]},{"group":"SDKs","pages":[{"title":"服务器 SDK 参考","href":"/docs/cn/server-sdk-reference"}]}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/changelog"}]}],"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://onesignal.com/blog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/OneSignal"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@onesignalofficial/playlists"}]}},{"language":"ko","tabs":[{"tab":"홈","pages":[{"title":"홈","href":"/docs/ko/home"}]},{"tab":"사용자 가이드","pages":[{"title":"사용자 가이드","href":"/docs/ko/quickstart-guide"}]},{"tab":"개발자 가이드","pages":[{"title":"개발자 가이드","href":"/docs/ko/developers"}]},{"tab":"튜토리얼","pages":[{"title":"튜토리얼","href":"/docs/ko/tutorials"}]},{"tab":"API Reference","groups":[{"group":"Using the REST APIs","pages":[{"title":"REST API overview","href":"/reference/rest-api-overview"},{"title":"Rate limits and error handling","href":"/reference/rate-limits"}]},{"group":"API reference","pages":[{"group":"Messages","pages":[{"title":"Sending messages with the OneSignal API","href":"/reference/create-message"},{"title":"Idempotent API requests","href":"/reference/idempotent-notification-requests"},{"title":"Push notification","openapi":"POST /notifications?c=push","href":"/reference/push-notification"},{"title":"Email","openapi":"POST /notifications?c=email","href":"/reference/email"},{"title":"SMS","openapi":"POST /notifications?c=sms","href":"/reference/sms"},{"title":"View message","openapi":"GET /notifications/{message_id}?app_id={app_id}","href":"/reference/view-message"},{"title":"View messages","openapi":"GET /notifications?app_id={app_id}\u0026limit={limit}\u0026offset={offset}\u0026kind={kind}\u0026template_id={template_id}\u0026time_offset={time_offset}","href":"/reference/view-messages"},{"title":"Cancel message","openapi":"DELETE /notifications/{message_id}?app_id={app_id}","href":"/reference/cancel-message"},{"title":"Message history","openapi":"POST /notifications/{message_id}/history","href":"/reference/message-history"},{"title":"Estimated recipients","openapi":"POST /notifications/count-unsaved","href":"/reference/count-unsaved"}]},{"group":"Live Activities","pages":[{"title":"Start Live Activity","openapi":"POST /apps/{app_id}/activities/activity/{activity_type}","href":"/reference/start-live-activity"},{"title":"Update Live Activity","openapi":"POST /apps/{app_id}/live_activities/{activity_id}/notifications","description":"Update the content of a running iOS Live Activity or end it with the OneSignal REST API. Covers required body fields, update priority, and dismissal timing.","href":"/reference/update-live-activity-api"}]},{"group":"Custom Events","pages":[{"title":"Create custom events","openapi":"POST /apps/{app_id}/custom_events","href":"/reference/create-custom-events"}]},{"group":"Users","pages":[{"title":"Create user","openapi":"POST /apps/{app_id}/users","description":"Create a new user or modify the subscriptions associated with an existing User.","href":"/reference/create-user"},{"title":"View user","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/view-user"},{"title":"Update user","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/update-user"},{"title":"Delete user","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/delete-user"},{"title":"View user identity","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/fetch-aliases"},{"title":"View user identity (by subscription)","openapi":"GET /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/fetch-identity-by-subscription"},{"title":"Create or update alias","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/create-alias"},{"title":"Create alias (by subscription)","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/create-alias-by-subscription"},{"title":"Delete alias","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity/{alias_label_to_delete}","href":"/reference/delete-alias"}]},{"group":"Subscriptions","pages":[{"title":"Create Subscription by alias","openapi":"POST /apps/{app_id}/users/by/{alias_label}/{alias_id}/subscriptions","href":"/reference/create-subscription"},{"title":"Update Subscription by ID","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/update-subscription"},{"title":"Update Subscription by token","openapi":"PATCH /apps/{app_id}/subscriptions_by_token/{token_type}/{token}","href":"/reference/update-subscription-by-token"},{"title":"Delete Subscription","openapi":"DELETE /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/delete-subscription"},{"title":"Transfer Subscription","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/owner","href":"/reference/transfer-subscription"},{"title":"Unsubscribe email with token","openapi":"POST /apps/{app_id}/notifications/{notification_id}/unsubscribe?token={token}","href":"/reference/unsubscribe-with-token"}]},{"group":"Templates","pages":[{"title":"Create template","openapi":"POST /templates","href":"/reference/create-template"},{"title":"Update template","openapi":"PATCH /templates/{template_id}?app_id={app_id}","href":"/reference/update-template"},{"title":"View templates","openapi":"GET /templates?app_id={app_id}\u0026limit={limit}\u0026offset={offset}","href":"/reference/view-templates"},{"title":"View template","openapi":"GET /templates/{template_id}?app_id={app_id}","href":"/reference/view-template"},{"title":"Delete template","openapi":"DELETE /templates/{template_id}?app_id={app_id}","href":"/reference/delete-template"},{"title":"Copy template to another app","openapi":"POST /templates/{template_id}/copy_to_app?app_id={app_id}","href":"/reference/copy-template-to-another-app"}]},{"group":"Segments","pages":[{"title":"View segments","openapi":"GET /apps/{app_id}/segments","href":"/reference/view-segments"},{"title":"View segment","openapi":"GET /apps/{app_id}/segments/{segment_id}","href":"/reference/view-segment"},{"title":"Create segment","openapi":"POST /apps/{app_id}/segments","href":"/reference/create-segments"},{"title":"Update segment","openapi":"PATCH /apps/{app_id}/segments/{segment_id}","href":"/reference/update-segment"},{"title":"Delete segment","openapi":"DELETE /apps/{app_id}/segments/{segment_id}","href":"/reference/delete-segments"}]},{"group":"Journeys","pages":[{"title":"View journeys","tag":"BETA","openapi":"GET /apps/{app_id}/journeys","href":"/reference/view-journeys"},{"title":"View journey","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}","href":"/reference/view-journey"},{"title":"View journey stats","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}/stats","href":"/reference/view-journey-stats"},{"title":"Create journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys","href":"/reference/create-journey"},{"title":"Duplicate journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys/{id}/duplicate","href":"/reference/duplicate-journey"},{"title":"Update journey","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}","href":"/reference/update-journey"},{"title":"Update journey node","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}/nodes/{node_id}","href":"/reference/update-journey-node"},{"title":"Delete journey","tag":"BETA","openapi":"DELETE /apps/{app_id}/journeys/{id}","href":"/reference/delete-journey"}]},{"group":"Configuration","pages":[{"title":"View apps","openapi":"GET /apps","href":"/reference/view-apps"},{"title":"View an app","openapi":"GET /apps/{app_id}","href":"/reference/view-an-app"},{"title":"Create an app","openapi":"POST /apps","href":"/reference/create-an-app"},{"title":"Update an app","openapi":"PUT /apps/{app_id}","href":"/reference/update-an-app"},{"title":"View API keys","openapi":"GET /apps/{app_id}/auth/tokens","href":"/reference/view-api-keys"},{"title":"Create API key","openapi":"POST /apps/{app_id}/auth/tokens","href":"/reference/create-api-key"},{"title":"Delete API key","openapi":"DELETE /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/delete-api-key"},{"title":"Update API key","openapi":"PATCH /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/update-api-key"},{"title":"Rotate API key","openapi":"POST /apps/{app_id}/auth/tokens/{token_id}/rotate","href":"/reference/rotate-api-key"}]},{"group":"Analytics","pages":[{"title":"Export subscriptions CSV","openapi":"POST /players/csv_export","href":"/reference/csv-export"},{"title":"Export audience activity CSV","openapi":"POST /notifications/{message_id}/export_events","href":"/reference/export-csv-of-events"},{"title":"View outcomes","openapi":"GET /apps/{app_id}/outcomes?outcome_names={outcome_names}\u0026outcome_time_range={outcome_time_range}\u0026outcome_platforms={outcome_platforms}\u0026outcome_attribution={outcome_attribution}","href":"/reference/view-outcomes"}]},{"group":"Deprecated","pages":[{"title":"View players","deprecated":true,"href":"/reference/view-devices"},{"title":"View player","deprecated":true,"href":"/reference/view-device"},{"title":"Add a player","deprecated":true,"href":"/reference/add-a-device"},{"title":"Edit player","deprecated":true,"href":"/reference/edit-device"},{"title":"Edit tags with external user id","deprecated":true,"href":"/reference/edit-tags-with-external-user-id"},{"title":"Delete player record","deprecated":true,"href":"/reference/delete-user-record"}]}]},{"group":"SDKs","pages":[{"title":"Server SDK 참조","href":"/docs/ko/server-sdk-reference"}]}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/changelog"}]}],"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://onesignal.com/blog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/OneSignal"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@onesignalofficial/playlists"}]}},{"language":"ja","tabs":[{"tab":"ホームページ","pages":[{"title":"ホームページ","href":"/docs/ja/home"}]},{"tab":"ユーザーガイド","pages":[{"title":"ユーザーガイド","href":"/docs/ja/quickstart-guide"}]},{"tab":"開発者ガイド","pages":[{"title":"開発者ガイド","href":"/docs/ja/developers"}]},{"tab":"チュートリアル","pages":[{"title":"チュートリアル","href":"/docs/ja/tutorials"}]},{"tab":"API Reference","groups":[{"group":"Using the REST APIs","pages":[{"title":"REST API overview","href":"/reference/rest-api-overview"},{"title":"Rate limits and error handling","href":"/reference/rate-limits"}]},{"group":"API reference","pages":[{"group":"Messages","pages":[{"title":"Sending messages with the OneSignal API","href":"/reference/create-message"},{"title":"Idempotent API requests","href":"/reference/idempotent-notification-requests"},{"title":"Push notification","openapi":"POST /notifications?c=push","href":"/reference/push-notification"},{"title":"Email","openapi":"POST /notifications?c=email","href":"/reference/email"},{"title":"SMS","openapi":"POST /notifications?c=sms","href":"/reference/sms"},{"title":"View message","openapi":"GET /notifications/{message_id}?app_id={app_id}","href":"/reference/view-message"},{"title":"View messages","openapi":"GET /notifications?app_id={app_id}\u0026limit={limit}\u0026offset={offset}\u0026kind={kind}\u0026template_id={template_id}\u0026time_offset={time_offset}","href":"/reference/view-messages"},{"title":"Cancel message","openapi":"DELETE /notifications/{message_id}?app_id={app_id}","href":"/reference/cancel-message"},{"title":"Message history","openapi":"POST /notifications/{message_id}/history","href":"/reference/message-history"},{"title":"Estimated recipients","openapi":"POST /notifications/count-unsaved","href":"/reference/count-unsaved"}]},{"group":"Live Activities","pages":[{"title":"Start Live Activity","openapi":"POST /apps/{app_id}/activities/activity/{activity_type}","href":"/reference/start-live-activity"},{"title":"Update Live Activity","openapi":"POST /apps/{app_id}/live_activities/{activity_id}/notifications","description":"Update the content of a running iOS Live Activity or end it with the OneSignal REST API. Covers required body fields, update priority, and dismissal timing.","href":"/reference/update-live-activity-api"}]},{"group":"Custom Events","pages":[{"title":"Create custom events","openapi":"POST /apps/{app_id}/custom_events","href":"/reference/create-custom-events"}]},{"group":"Users","pages":[{"title":"Create user","openapi":"POST /apps/{app_id}/users","description":"Create a new user or modify the subscriptions associated with an existing User.","href":"/reference/create-user"},{"title":"View user","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/view-user"},{"title":"Update user","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/update-user"},{"title":"Delete user","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/delete-user"},{"title":"View user identity","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/fetch-aliases"},{"title":"View user identity (by subscription)","openapi":"GET /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/fetch-identity-by-subscription"},{"title":"Create or update alias","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/create-alias"},{"title":"Create alias (by subscription)","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/create-alias-by-subscription"},{"title":"Delete alias","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity/{alias_label_to_delete}","href":"/reference/delete-alias"}]},{"group":"Subscriptions","pages":[{"title":"Create Subscription by alias","openapi":"POST /apps/{app_id}/users/by/{alias_label}/{alias_id}/subscriptions","href":"/reference/create-subscription"},{"title":"Update Subscription by ID","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/update-subscription"},{"title":"Update Subscription by token","openapi":"PATCH /apps/{app_id}/subscriptions_by_token/{token_type}/{token}","href":"/reference/update-subscription-by-token"},{"title":"Delete Subscription","openapi":"DELETE /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/delete-subscription"},{"title":"Transfer Subscription","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/owner","href":"/reference/transfer-subscription"},{"title":"Unsubscribe email with token","openapi":"POST /apps/{app_id}/notifications/{notification_id}/unsubscribe?token={token}","href":"/reference/unsubscribe-with-token"}]},{"group":"Templates","pages":[{"title":"Create template","openapi":"POST /templates","href":"/reference/create-template"},{"title":"Update template","openapi":"PATCH /templates/{template_id}?app_id={app_id}","href":"/reference/update-template"},{"title":"View templates","openapi":"GET /templates?app_id={app_id}\u0026limit={limit}\u0026offset={offset}","href":"/reference/view-templates"},{"title":"View template","openapi":"GET /templates/{template_id}?app_id={app_id}","href":"/reference/view-template"},{"title":"Delete template","openapi":"DELETE /templates/{template_id}?app_id={app_id}","href":"/reference/delete-template"},{"title":"Copy template to another app","openapi":"POST /templates/{template_id}/copy_to_app?app_id={app_id}","href":"/reference/copy-template-to-another-app"}]},{"group":"Segments","pages":[{"title":"View segments","openapi":"GET /apps/{app_id}/segments","href":"/reference/view-segments"},{"title":"View segment","openapi":"GET /apps/{app_id}/segments/{segment_id}","href":"/reference/view-segment"},{"title":"Create segment","openapi":"POST /apps/{app_id}/segments","href":"/reference/create-segments"},{"title":"Update segment","openapi":"PATCH /apps/{app_id}/segments/{segment_id}","href":"/reference/update-segment"},{"title":"Delete segment","openapi":"DELETE /apps/{app_id}/segments/{segment_id}","href":"/reference/delete-segments"}]},{"group":"Journeys","pages":[{"title":"View journeys","tag":"BETA","openapi":"GET /apps/{app_id}/journeys","href":"/reference/view-journeys"},{"title":"View journey","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}","href":"/reference/view-journey"},{"title":"View journey stats","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}/stats","href":"/reference/view-journey-stats"},{"title":"Create journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys","href":"/reference/create-journey"},{"title":"Duplicate journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys/{id}/duplicate","href":"/reference/duplicate-journey"},{"title":"Update journey","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}","href":"/reference/update-journey"},{"title":"Update journey node","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}/nodes/{node_id}","href":"/reference/update-journey-node"},{"title":"Delete journey","tag":"BETA","openapi":"DELETE /apps/{app_id}/journeys/{id}","href":"/reference/delete-journey"}]},{"group":"Configuration","pages":[{"title":"View apps","openapi":"GET /apps","href":"/reference/view-apps"},{"title":"View an app","openapi":"GET /apps/{app_id}","href":"/reference/view-an-app"},{"title":"Create an app","openapi":"POST /apps","href":"/reference/create-an-app"},{"title":"Update an app","openapi":"PUT /apps/{app_id}","href":"/reference/update-an-app"},{"title":"View API keys","openapi":"GET /apps/{app_id}/auth/tokens","href":"/reference/view-api-keys"},{"title":"Create API key","openapi":"POST /apps/{app_id}/auth/tokens","href":"/reference/create-api-key"},{"title":"Delete API key","openapi":"DELETE /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/delete-api-key"},{"title":"Update API key","openapi":"PATCH /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/update-api-key"},{"title":"Rotate API key","openapi":"POST /apps/{app_id}/auth/tokens/{token_id}/rotate","href":"/reference/rotate-api-key"}]},{"group":"Analytics","pages":[{"title":"Export subscriptions CSV","openapi":"POST /players/csv_export","href":"/reference/csv-export"},{"title":"Export audience activity CSV","openapi":"POST /notifications/{message_id}/export_events","href":"/reference/export-csv-of-events"},{"title":"View outcomes","openapi":"GET /apps/{app_id}/outcomes?outcome_names={outcome_names}\u0026outcome_time_range={outcome_time_range}\u0026outcome_platforms={outcome_platforms}\u0026outcome_attribution={outcome_attribution}","href":"/reference/view-outcomes"}]},{"group":"Deprecated","pages":[{"title":"View players","deprecated":true,"href":"/reference/view-devices"},{"title":"View player","deprecated":true,"href":"/reference/view-device"},{"title":"Add a player","deprecated":true,"href":"/reference/add-a-device"},{"title":"Edit player","deprecated":true,"href":"/reference/edit-device"},{"title":"Edit tags with external user id","deprecated":true,"href":"/reference/edit-tags-with-external-user-id"},{"title":"Delete player record","deprecated":true,"href":"/reference/delete-user-record"}]}]},{"group":"SDKs","pages":[{"title":"Server SDK reference","href":"/docs/en/server-sdk-reference"}]}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/changelog"}]}],"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://onesignal.com/blog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/OneSignal"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@onesignalofficial/playlists"}]}},{"language":"tr","tabs":[{"tab":"Ana Sayfa","pages":[{"title":"Ana Sayfa","href":"/docs/tr/home"}]},{"tab":"Kullanıcı Kılavuzları","pages":[{"title":"Kullanıcı Kılavuzları","href":"/docs/tr/quickstart-guide"}]},{"tab":"Geliştirici Kılavuzları","pages":[{"title":"Geliştirici Kılavuzları","href":"/docs/tr/developers"}]},{"tab":"Eğitimler","pages":[{"title":"Eğitimler","href":"/docs/tr/tutorials"}]},{"tab":"API Reference","groups":[{"group":"Using the REST APIs","pages":[{"title":"REST API overview","href":"/reference/rest-api-overview"},{"title":"Rate limits and error handling","href":"/reference/rate-limits"}]},{"group":"API reference","pages":[{"group":"Messages","pages":[{"title":"Sending messages with the OneSignal API","href":"/reference/create-message"},{"title":"Idempotent API requests","href":"/reference/idempotent-notification-requests"},{"title":"Push notification","openapi":"POST /notifications?c=push","href":"/reference/push-notification"},{"title":"Email","openapi":"POST /notifications?c=email","href":"/reference/email"},{"title":"SMS","openapi":"POST /notifications?c=sms","href":"/reference/sms"},{"title":"View message","openapi":"GET /notifications/{message_id}?app_id={app_id}","href":"/reference/view-message"},{"title":"View messages","openapi":"GET /notifications?app_id={app_id}\u0026limit={limit}\u0026offset={offset}\u0026kind={kind}\u0026template_id={template_id}\u0026time_offset={time_offset}","href":"/reference/view-messages"},{"title":"Cancel message","openapi":"DELETE /notifications/{message_id}?app_id={app_id}","href":"/reference/cancel-message"},{"title":"Message history","openapi":"POST /notifications/{message_id}/history","href":"/reference/message-history"},{"title":"Estimated recipients","openapi":"POST /notifications/count-unsaved","href":"/reference/count-unsaved"}]},{"group":"Live Activities","pages":[{"title":"Start Live Activity","openapi":"POST /apps/{app_id}/activities/activity/{activity_type}","href":"/reference/start-live-activity"},{"title":"Update Live Activity","openapi":"POST /apps/{app_id}/live_activities/{activity_id}/notifications","description":"Update the content of a running iOS Live Activity or end it with the OneSignal REST API. Covers required body fields, update priority, and dismissal timing.","href":"/reference/update-live-activity-api"}]},{"group":"Custom Events","pages":[{"title":"Create custom events","openapi":"POST /apps/{app_id}/custom_events","href":"/reference/create-custom-events"}]},{"group":"Users","pages":[{"title":"Create user","openapi":"POST /apps/{app_id}/users","description":"Create a new user or modify the subscriptions associated with an existing User.","href":"/reference/create-user"},{"title":"View user","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/view-user"},{"title":"Update user","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/update-user"},{"title":"Delete user","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/delete-user"},{"title":"View user identity","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/fetch-aliases"},{"title":"View user identity (by subscription)","openapi":"GET /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/fetch-identity-by-subscription"},{"title":"Create or update alias","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/create-alias"},{"title":"Create alias (by subscription)","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/create-alias-by-subscription"},{"title":"Delete alias","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity/{alias_label_to_delete}","href":"/reference/delete-alias"}]},{"group":"Subscriptions","pages":[{"title":"Create Subscription by alias","openapi":"POST /apps/{app_id}/users/by/{alias_label}/{alias_id}/subscriptions","href":"/reference/create-subscription"},{"title":"Update Subscription by ID","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/update-subscription"},{"title":"Update Subscription by token","openapi":"PATCH /apps/{app_id}/subscriptions_by_token/{token_type}/{token}","href":"/reference/update-subscription-by-token"},{"title":"Delete Subscription","openapi":"DELETE /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/delete-subscription"},{"title":"Transfer Subscription","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/owner","href":"/reference/transfer-subscription"},{"title":"Unsubscribe email with token","openapi":"POST /apps/{app_id}/notifications/{notification_id}/unsubscribe?token={token}","href":"/reference/unsubscribe-with-token"}]},{"group":"Templates","pages":[{"title":"Create template","openapi":"POST /templates","href":"/reference/create-template"},{"title":"Update template","openapi":"PATCH /templates/{template_id}?app_id={app_id}","href":"/reference/update-template"},{"title":"View templates","openapi":"GET /templates?app_id={app_id}\u0026limit={limit}\u0026offset={offset}","href":"/reference/view-templates"},{"title":"View template","openapi":"GET /templates/{template_id}?app_id={app_id}","href":"/reference/view-template"},{"title":"Delete template","openapi":"DELETE /templates/{template_id}?app_id={app_id}","href":"/reference/delete-template"},{"title":"Copy template to another app","openapi":"POST /templates/{template_id}/copy_to_app?app_id={app_id}","href":"/reference/copy-template-to-another-app"}]},{"group":"Segments","pages":[{"title":"View segments","openapi":"GET /apps/{app_id}/segments","href":"/reference/view-segments"},{"title":"View segment","openapi":"GET /apps/{app_id}/segments/{segment_id}","href":"/reference/view-segment"},{"title":"Create segment","openapi":"POST /apps/{app_id}/segments","href":"/reference/create-segments"},{"title":"Update segment","openapi":"PATCH /apps/{app_id}/segments/{segment_id}","href":"/reference/update-segment"},{"title":"Delete segment","openapi":"DELETE /apps/{app_id}/segments/{segment_id}","href":"/reference/delete-segments"}]},{"group":"Journeys","pages":[{"title":"View journeys","tag":"BETA","openapi":"GET /apps/{app_id}/journeys","href":"/reference/view-journeys"},{"title":"View journey","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}","href":"/reference/view-journey"},{"title":"View journey stats","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}/stats","href":"/reference/view-journey-stats"},{"title":"Create journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys","href":"/reference/create-journey"},{"title":"Duplicate journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys/{id}/duplicate","href":"/reference/duplicate-journey"},{"title":"Update journey","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}","href":"/reference/update-journey"},{"title":"Update journey node","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}/nodes/{node_id}","href":"/reference/update-journey-node"},{"title":"Delete journey","tag":"BETA","openapi":"DELETE /apps/{app_id}/journeys/{id}","href":"/reference/delete-journey"}]},{"group":"Configuration","pages":[{"title":"View apps","openapi":"GET /apps","href":"/reference/view-apps"},{"title":"View an app","openapi":"GET /apps/{app_id}","href":"/reference/view-an-app"},{"title":"Create an app","openapi":"POST /apps","href":"/reference/create-an-app"},{"title":"Update an app","openapi":"PUT /apps/{app_id}","href":"/reference/update-an-app"},{"title":"View API keys","openapi":"GET /apps/{app_id}/auth/tokens","href":"/reference/view-api-keys"},{"title":"Create API key","openapi":"POST /apps/{app_id}/auth/tokens","href":"/reference/create-api-key"},{"title":"Delete API key","openapi":"DELETE /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/delete-api-key"},{"title":"Update API key","openapi":"PATCH /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/update-api-key"},{"title":"Rotate API key","openapi":"POST /apps/{app_id}/auth/tokens/{token_id}/rotate","href":"/reference/rotate-api-key"}]},{"group":"Analytics","pages":[{"title":"Export subscriptions CSV","openapi":"POST /players/csv_export","href":"/reference/csv-export"},{"title":"Export audience activity CSV","openapi":"POST /notifications/{message_id}/export_events","href":"/reference/export-csv-of-events"},{"title":"View outcomes","openapi":"GET /apps/{app_id}/outcomes?outcome_names={outcome_names}\u0026outcome_time_range={outcome_time_range}\u0026outcome_platforms={outcome_platforms}\u0026outcome_attribution={outcome_attribution}","href":"/reference/view-outcomes"}]},{"group":"Deprecated","pages":[{"title":"View players","deprecated":true,"href":"/reference/view-devices"},{"title":"View player","deprecated":true,"href":"/reference/view-device"},{"title":"Add a player","deprecated":true,"href":"/reference/add-a-device"},{"title":"Edit player","deprecated":true,"href":"/reference/edit-device"},{"title":"Edit tags with external user id","deprecated":true,"href":"/reference/edit-tags-with-external-user-id"},{"title":"Delete player record","deprecated":true,"href":"/reference/delete-user-record"}]}]},{"group":"SDKs","pages":[{"title":"Server SDK reference","href":"/docs/en/server-sdk-reference"}]}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/changelog"}]}],"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://onesignal.com/blog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/OneSignal"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@onesignalofficial/playlists"}]}},{"language":"pt-BR","tabs":[{"tab":"Início","pages":[{"title":"Início","href":"/docs/pt-BR/home"}]},{"tab":"Guia do Usuário","pages":[{"title":"Guia do Usuário","href":"/docs/pt-BR/quickstart-guide"}]},{"tab":"Guia de desenvolvedor","pages":[{"title":"Guia de desenvolvedor","href":"/docs/pt-BR/developers"}]},{"tab":"Tutoriais","pages":[{"title":"Tutoriais","href":"/docs/pt-BR/tutorials"}]},{"tab":"API Reference","groups":[{"group":"Using the REST APIs","pages":[{"title":"REST API overview","href":"/reference/rest-api-overview"},{"title":"Rate limits and error handling","href":"/reference/rate-limits"}]},{"group":"API reference","pages":[{"group":"Messages","pages":[{"title":"Sending messages with the OneSignal API","href":"/reference/create-message"},{"title":"Idempotent API requests","href":"/reference/idempotent-notification-requests"},{"title":"Push notification","openapi":"POST /notifications?c=push","href":"/reference/push-notification"},{"title":"Email","openapi":"POST /notifications?c=email","href":"/reference/email"},{"title":"SMS","openapi":"POST /notifications?c=sms","href":"/reference/sms"},{"title":"View message","openapi":"GET /notifications/{message_id}?app_id={app_id}","href":"/reference/view-message"},{"title":"View messages","openapi":"GET /notifications?app_id={app_id}\u0026limit={limit}\u0026offset={offset}\u0026kind={kind}\u0026template_id={template_id}\u0026time_offset={time_offset}","href":"/reference/view-messages"},{"title":"Cancel message","openapi":"DELETE /notifications/{message_id}?app_id={app_id}","href":"/reference/cancel-message"},{"title":"Message history","openapi":"POST /notifications/{message_id}/history","href":"/reference/message-history"},{"title":"Estimated recipients","openapi":"POST /notifications/count-unsaved","href":"/reference/count-unsaved"}]},{"group":"Live Activities","pages":[{"title":"Start Live Activity","openapi":"POST /apps/{app_id}/activities/activity/{activity_type}","href":"/reference/start-live-activity"},{"title":"Update Live Activity","openapi":"POST /apps/{app_id}/live_activities/{activity_id}/notifications","description":"Update the content of a running iOS Live Activity or end it with the OneSignal REST API. Covers required body fields, update priority, and dismissal timing.","href":"/reference/update-live-activity-api"}]},{"group":"Custom Events","pages":[{"title":"Create custom events","openapi":"POST /apps/{app_id}/custom_events","href":"/reference/create-custom-events"}]},{"group":"Users","pages":[{"title":"Create user","openapi":"POST /apps/{app_id}/users","description":"Create a new user or modify the subscriptions associated with an existing User.","href":"/reference/create-user"},{"title":"View user","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/view-user"},{"title":"Update user","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/update-user"},{"title":"Delete user","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/delete-user"},{"title":"View user identity","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/fetch-aliases"},{"title":"View user identity (by subscription)","openapi":"GET /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/fetch-identity-by-subscription"},{"title":"Create or update alias","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/create-alias"},{"title":"Create alias (by subscription)","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/create-alias-by-subscription"},{"title":"Delete alias","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity/{alias_label_to_delete}","href":"/reference/delete-alias"}]},{"group":"Subscriptions","pages":[{"title":"Create Subscription by alias","openapi":"POST /apps/{app_id}/users/by/{alias_label}/{alias_id}/subscriptions","href":"/reference/create-subscription"},{"title":"Update Subscription by ID","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/update-subscription"},{"title":"Update Subscription by token","openapi":"PATCH /apps/{app_id}/subscriptions_by_token/{token_type}/{token}","href":"/reference/update-subscription-by-token"},{"title":"Delete Subscription","openapi":"DELETE /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/delete-subscription"},{"title":"Transfer Subscription","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/owner","href":"/reference/transfer-subscription"},{"title":"Unsubscribe email with token","openapi":"POST /apps/{app_id}/notifications/{notification_id}/unsubscribe?token={token}","href":"/reference/unsubscribe-with-token"}]},{"group":"Templates","pages":[{"title":"Create template","openapi":"POST /templates","href":"/reference/create-template"},{"title":"Update template","openapi":"PATCH /templates/{template_id}?app_id={app_id}","href":"/reference/update-template"},{"title":"View templates","openapi":"GET /templates?app_id={app_id}\u0026limit={limit}\u0026offset={offset}","href":"/reference/view-templates"},{"title":"View template","openapi":"GET /templates/{template_id}?app_id={app_id}","href":"/reference/view-template"},{"title":"Delete template","openapi":"DELETE /templates/{template_id}?app_id={app_id}","href":"/reference/delete-template"},{"title":"Copy template to another app","openapi":"POST /templates/{template_id}/copy_to_app?app_id={app_id}","href":"/reference/copy-template-to-another-app"}]},{"group":"Segments","pages":[{"title":"View segments","openapi":"GET /apps/{app_id}/segments","href":"/reference/view-segments"},{"title":"View segment","openapi":"GET /apps/{app_id}/segments/{segment_id}","href":"/reference/view-segment"},{"title":"Create segment","openapi":"POST /apps/{app_id}/segments","href":"/reference/create-segments"},{"title":"Update segment","openapi":"PATCH /apps/{app_id}/segments/{segment_id}","href":"/reference/update-segment"},{"title":"Delete segment","openapi":"DELETE /apps/{app_id}/segments/{segment_id}","href":"/reference/delete-segments"}]},{"group":"Journeys","pages":[{"title":"View journeys","tag":"BETA","openapi":"GET /apps/{app_id}/journeys","href":"/reference/view-journeys"},{"title":"View journey","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}","href":"/reference/view-journey"},{"title":"View journey stats","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}/stats","href":"/reference/view-journey-stats"},{"title":"Create journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys","href":"/reference/create-journey"},{"title":"Duplicate journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys/{id}/duplicate","href":"/reference/duplicate-journey"},{"title":"Update journey","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}","href":"/reference/update-journey"},{"title":"Update journey node","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}/nodes/{node_id}","href":"/reference/update-journey-node"},{"title":"Delete journey","tag":"BETA","openapi":"DELETE /apps/{app_id}/journeys/{id}","href":"/reference/delete-journey"}]},{"group":"Configuration","pages":[{"title":"View apps","openapi":"GET /apps","href":"/reference/view-apps"},{"title":"View an app","openapi":"GET /apps/{app_id}","href":"/reference/view-an-app"},{"title":"Create an app","openapi":"POST /apps","href":"/reference/create-an-app"},{"title":"Update an app","openapi":"PUT /apps/{app_id}","href":"/reference/update-an-app"},{"title":"View API keys","openapi":"GET /apps/{app_id}/auth/tokens","href":"/reference/view-api-keys"},{"title":"Create API key","openapi":"POST /apps/{app_id}/auth/tokens","href":"/reference/create-api-key"},{"title":"Delete API key","openapi":"DELETE /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/delete-api-key"},{"title":"Update API key","openapi":"PATCH /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/update-api-key"},{"title":"Rotate API key","openapi":"POST /apps/{app_id}/auth/tokens/{token_id}/rotate","href":"/reference/rotate-api-key"}]},{"group":"Analytics","pages":[{"title":"Export subscriptions CSV","openapi":"POST /players/csv_export","href":"/reference/csv-export"},{"title":"Export audience activity CSV","openapi":"POST /notifications/{message_id}/export_events","href":"/reference/export-csv-of-events"},{"title":"View outcomes","openapi":"GET /apps/{app_id}/outcomes?outcome_names={outcome_names}\u0026outcome_time_range={outcome_time_range}\u0026outcome_platforms={outcome_platforms}\u0026outcome_attribution={outcome_attribution}","href":"/reference/view-outcomes"}]},{"group":"Deprecated","pages":[{"title":"View players","deprecated":true,"href":"/reference/view-devices"},{"title":"View player","deprecated":true,"href":"/reference/view-device"},{"title":"Add a player","deprecated":true,"href":"/reference/add-a-device"},{"title":"Edit player","deprecated":true,"href":"/reference/edit-device"},{"title":"Edit tags with external user id","deprecated":true,"href":"/reference/edit-tags-with-external-user-id"},{"title":"Delete player record","deprecated":true,"href":"/reference/delete-user-record"}]}]},{"group":"SDKs","pages":[{"title":"Referência do SDK do Servidor","href":"/docs/pt-BR/server-sdk-reference"}]}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/changelog"}]}],"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://onesignal.com/blog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/OneSignal"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@onesignalofficial/playlists"}]}},{"language":"es","tabs":[{"tab":"Inicio","pages":[{"title":"Inicio","href":"/docs/es/home"}]},{"tab":"Guías del Usuario","pages":[{"title":"Guías del Usuario","href":"/docs/es/quickstart-guide"}]},{"tab":"Guías del desarrollador","pages":[{"title":"Guías del desarrollador","href":"/docs/es/developers"}]},{"tab":"Tutoriales","pages":[{"title":"Tutoriales","href":"/docs/es/tutorials"}]},{"tab":"API Reference","groups":[{"group":"Using the REST APIs","pages":[{"title":"REST API overview","href":"/reference/rest-api-overview"},{"title":"Rate limits and error handling","href":"/reference/rate-limits"}]},{"group":"API reference","pages":[{"group":"Messages","pages":[{"title":"Sending messages with the OneSignal API","href":"/reference/create-message"},{"title":"Idempotent API requests","href":"/reference/idempotent-notification-requests"},{"title":"Push notification","openapi":"POST /notifications?c=push","href":"/reference/push-notification"},{"title":"Email","openapi":"POST /notifications?c=email","href":"/reference/email"},{"title":"SMS","openapi":"POST /notifications?c=sms","href":"/reference/sms"},{"title":"View message","openapi":"GET /notifications/{message_id}?app_id={app_id}","href":"/reference/view-message"},{"title":"View messages","openapi":"GET /notifications?app_id={app_id}\u0026limit={limit}\u0026offset={offset}\u0026kind={kind}\u0026template_id={template_id}\u0026time_offset={time_offset}","href":"/reference/view-messages"},{"title":"Cancel message","openapi":"DELETE /notifications/{message_id}?app_id={app_id}","href":"/reference/cancel-message"},{"title":"Message history","openapi":"POST /notifications/{message_id}/history","href":"/reference/message-history"},{"title":"Estimated recipients","openapi":"POST /notifications/count-unsaved","href":"/reference/count-unsaved"}]},{"group":"Live Activities","pages":[{"title":"Start Live Activity","openapi":"POST /apps/{app_id}/activities/activity/{activity_type}","href":"/reference/start-live-activity"},{"title":"Update Live Activity","openapi":"POST /apps/{app_id}/live_activities/{activity_id}/notifications","description":"Update the content of a running iOS Live Activity or end it with the OneSignal REST API. Covers required body fields, update priority, and dismissal timing.","href":"/reference/update-live-activity-api"}]},{"group":"Custom Events","pages":[{"title":"Create custom events","openapi":"POST /apps/{app_id}/custom_events","href":"/reference/create-custom-events"}]},{"group":"Users","pages":[{"title":"Create user","openapi":"POST /apps/{app_id}/users","description":"Create a new user or modify the subscriptions associated with an existing User.","href":"/reference/create-user"},{"title":"View user","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/view-user"},{"title":"Update user","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/update-user"},{"title":"Delete user","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/delete-user"},{"title":"View user identity","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/fetch-aliases"},{"title":"View user identity (by subscription)","openapi":"GET /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/fetch-identity-by-subscription"},{"title":"Create or update alias","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/create-alias"},{"title":"Create alias (by subscription)","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/create-alias-by-subscription"},{"title":"Delete alias","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity/{alias_label_to_delete}","href":"/reference/delete-alias"}]},{"group":"Subscriptions","pages":[{"title":"Create Subscription by alias","openapi":"POST /apps/{app_id}/users/by/{alias_label}/{alias_id}/subscriptions","href":"/reference/create-subscription"},{"title":"Update Subscription by ID","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/update-subscription"},{"title":"Update Subscription by token","openapi":"PATCH /apps/{app_id}/subscriptions_by_token/{token_type}/{token}","href":"/reference/update-subscription-by-token"},{"title":"Delete Subscription","openapi":"DELETE /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/delete-subscription"},{"title":"Transfer Subscription","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/owner","href":"/reference/transfer-subscription"},{"title":"Unsubscribe email with token","openapi":"POST /apps/{app_id}/notifications/{notification_id}/unsubscribe?token={token}","href":"/reference/unsubscribe-with-token"}]},{"group":"Templates","pages":[{"title":"Create template","openapi":"POST /templates","href":"/reference/create-template"},{"title":"Update template","openapi":"PATCH /templates/{template_id}?app_id={app_id}","href":"/reference/update-template"},{"title":"View templates","openapi":"GET /templates?app_id={app_id}\u0026limit={limit}\u0026offset={offset}","href":"/reference/view-templates"},{"title":"View template","openapi":"GET /templates/{template_id}?app_id={app_id}","href":"/reference/view-template"},{"title":"Delete template","openapi":"DELETE /templates/{template_id}?app_id={app_id}","href":"/reference/delete-template"},{"title":"Copy template to another app","openapi":"POST /templates/{template_id}/copy_to_app?app_id={app_id}","href":"/reference/copy-template-to-another-app"}]},{"group":"Segments","pages":[{"title":"View segments","openapi":"GET /apps/{app_id}/segments","href":"/reference/view-segments"},{"title":"View segment","openapi":"GET /apps/{app_id}/segments/{segment_id}","href":"/reference/view-segment"},{"title":"Create segment","openapi":"POST /apps/{app_id}/segments","href":"/reference/create-segments"},{"title":"Update segment","openapi":"PATCH /apps/{app_id}/segments/{segment_id}","href":"/reference/update-segment"},{"title":"Delete segment","openapi":"DELETE /apps/{app_id}/segments/{segment_id}","href":"/reference/delete-segments"}]},{"group":"Journeys","pages":[{"title":"View journeys","tag":"BETA","openapi":"GET /apps/{app_id}/journeys","href":"/reference/view-journeys"},{"title":"View journey","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}","href":"/reference/view-journey"},{"title":"View journey stats","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}/stats","href":"/reference/view-journey-stats"},{"title":"Create journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys","href":"/reference/create-journey"},{"title":"Duplicate journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys/{id}/duplicate","href":"/reference/duplicate-journey"},{"title":"Update journey","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}","href":"/reference/update-journey"},{"title":"Update journey node","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}/nodes/{node_id}","href":"/reference/update-journey-node"},{"title":"Delete journey","tag":"BETA","openapi":"DELETE /apps/{app_id}/journeys/{id}","href":"/reference/delete-journey"}]},{"group":"Configuration","pages":[{"title":"View apps","openapi":"GET /apps","href":"/reference/view-apps"},{"title":"View an app","openapi":"GET /apps/{app_id}","href":"/reference/view-an-app"},{"title":"Create an app","openapi":"POST /apps","href":"/reference/create-an-app"},{"title":"Update an app","openapi":"PUT /apps/{app_id}","href":"/reference/update-an-app"},{"title":"View API keys","openapi":"GET /apps/{app_id}/auth/tokens","href":"/reference/view-api-keys"},{"title":"Create API key","openapi":"POST /apps/{app_id}/auth/tokens","href":"/reference/create-api-key"},{"title":"Delete API key","openapi":"DELETE /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/delete-api-key"},{"title":"Update API key","openapi":"PATCH /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/update-api-key"},{"title":"Rotate API key","openapi":"POST /apps/{app_id}/auth/tokens/{token_id}/rotate","href":"/reference/rotate-api-key"}]},{"group":"Analytics","pages":[{"title":"Export subscriptions CSV","openapi":"POST /players/csv_export","href":"/reference/csv-export"},{"title":"Export audience activity CSV","openapi":"POST /notifications/{message_id}/export_events","href":"/reference/export-csv-of-events"},{"title":"View outcomes","openapi":"GET /apps/{app_id}/outcomes?outcome_names={outcome_names}\u0026outcome_time_range={outcome_time_range}\u0026outcome_platforms={outcome_platforms}\u0026outcome_attribution={outcome_attribution}","href":"/reference/view-outcomes"}]},{"group":"Deprecated","pages":[{"title":"View players","deprecated":true,"href":"/reference/view-devices"},{"title":"View player","deprecated":true,"href":"/reference/view-device"},{"title":"Add a player","deprecated":true,"href":"/reference/add-a-device"},{"title":"Edit player","deprecated":true,"href":"/reference/edit-device"},{"title":"Edit tags with external user id","deprecated":true,"href":"/reference/edit-tags-with-external-user-id"},{"title":"Delete player record","deprecated":true,"href":"/reference/delete-user-record"}]}]},{"group":"SDKs","pages":[{"title":"Server SDK reference","href":"/docs/en/server-sdk-reference"}]}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/changelog"}]}],"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://onesignal.com/blog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/OneSignal"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@onesignalofficial/playlists"}]}},{"language":"fr","tabs":[{"tab":"Accueil","pages":[{"title":"Accueil","href":"/docs/fr/home"}]},{"tab":"Guides utilisateur","pages":[{"title":"Guides utilisateur","href":"/docs/fr/quickstart-guide"}]},{"tab":"Guides développeur","pages":[{"title":"Guides développeur","href":"/docs/fr/developers"}]},{"tab":"Tutoriels","pages":[{"title":"Tutoriels","href":"/docs/fr/tutorials"}]},{"tab":"API Reference","groups":[{"group":"Using the REST APIs","pages":[{"title":"REST API overview","href":"/reference/rest-api-overview"},{"title":"Rate limits and error handling","href":"/reference/rate-limits"}]},{"group":"API reference","pages":[{"group":"Messages","pages":[{"title":"Sending messages with the OneSignal API","href":"/reference/create-message"},{"title":"Idempotent API requests","href":"/reference/idempotent-notification-requests"},{"title":"Push notification","openapi":"POST /notifications?c=push","href":"/reference/push-notification"},{"title":"Email","openapi":"POST /notifications?c=email","href":"/reference/email"},{"title":"SMS","openapi":"POST /notifications?c=sms","href":"/reference/sms"},{"title":"View message","openapi":"GET /notifications/{message_id}?app_id={app_id}","href":"/reference/view-message"},{"title":"View messages","openapi":"GET /notifications?app_id={app_id}\u0026limit={limit}\u0026offset={offset}\u0026kind={kind}\u0026template_id={template_id}\u0026time_offset={time_offset}","href":"/reference/view-messages"},{"title":"Cancel message","openapi":"DELETE /notifications/{message_id}?app_id={app_id}","href":"/reference/cancel-message"},{"title":"Message history","openapi":"POST /notifications/{message_id}/history","href":"/reference/message-history"},{"title":"Estimated recipients","openapi":"POST /notifications/count-unsaved","href":"/reference/count-unsaved"}]},{"group":"Live Activities","pages":[{"title":"Start Live Activity","openapi":"POST /apps/{app_id}/activities/activity/{activity_type}","href":"/reference/start-live-activity"},{"title":"Update Live Activity","openapi":"POST /apps/{app_id}/live_activities/{activity_id}/notifications","description":"Update the content of a running iOS Live Activity or end it with the OneSignal REST API. Covers required body fields, update priority, and dismissal timing.","href":"/reference/update-live-activity-api"}]},{"group":"Custom Events","pages":[{"title":"Create custom events","openapi":"POST /apps/{app_id}/custom_events","href":"/reference/create-custom-events"}]},{"group":"Users","pages":[{"title":"Create user","openapi":"POST /apps/{app_id}/users","description":"Create a new user or modify the subscriptions associated with an existing User.","href":"/reference/create-user"},{"title":"View user","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/view-user"},{"title":"Update user","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/update-user"},{"title":"Delete user","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}","href":"/reference/delete-user"},{"title":"View user identity","openapi":"GET /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/fetch-aliases"},{"title":"View user identity (by subscription)","openapi":"GET /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/fetch-identity-by-subscription"},{"title":"Create or update alias","openapi":"PATCH /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity","href":"/reference/create-alias"},{"title":"Create alias (by subscription)","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/user/identity","href":"/reference/create-alias-by-subscription"},{"title":"Delete alias","openapi":"DELETE /apps/{app_id}/users/by/{alias_label}/{alias_id}/identity/{alias_label_to_delete}","href":"/reference/delete-alias"}]},{"group":"Subscriptions","pages":[{"title":"Create Subscription by alias","openapi":"POST /apps/{app_id}/users/by/{alias_label}/{alias_id}/subscriptions","href":"/reference/create-subscription"},{"title":"Update Subscription by ID","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/update-subscription"},{"title":"Update Subscription by token","openapi":"PATCH /apps/{app_id}/subscriptions_by_token/{token_type}/{token}","href":"/reference/update-subscription-by-token"},{"title":"Delete Subscription","openapi":"DELETE /apps/{app_id}/subscriptions/{subscription_id}","href":"/reference/delete-subscription"},{"title":"Transfer Subscription","openapi":"PATCH /apps/{app_id}/subscriptions/{subscription_id}/owner","href":"/reference/transfer-subscription"},{"title":"Unsubscribe email with token","openapi":"POST /apps/{app_id}/notifications/{notification_id}/unsubscribe?token={token}","href":"/reference/unsubscribe-with-token"}]},{"group":"Templates","pages":[{"title":"Create template","openapi":"POST /templates","href":"/reference/create-template"},{"title":"Update template","openapi":"PATCH /templates/{template_id}?app_id={app_id}","href":"/reference/update-template"},{"title":"View templates","openapi":"GET /templates?app_id={app_id}\u0026limit={limit}\u0026offset={offset}","href":"/reference/view-templates"},{"title":"View template","openapi":"GET /templates/{template_id}?app_id={app_id}","href":"/reference/view-template"},{"title":"Delete template","openapi":"DELETE /templates/{template_id}?app_id={app_id}","href":"/reference/delete-template"},{"title":"Copy template to another app","openapi":"POST /templates/{template_id}/copy_to_app?app_id={app_id}","href":"/reference/copy-template-to-another-app"}]},{"group":"Segments","pages":[{"title":"View segments","openapi":"GET /apps/{app_id}/segments","href":"/reference/view-segments"},{"title":"View segment","openapi":"GET /apps/{app_id}/segments/{segment_id}","href":"/reference/view-segment"},{"title":"Create segment","openapi":"POST /apps/{app_id}/segments","href":"/reference/create-segments"},{"title":"Update segment","openapi":"PATCH /apps/{app_id}/segments/{segment_id}","href":"/reference/update-segment"},{"title":"Delete segment","openapi":"DELETE /apps/{app_id}/segments/{segment_id}","href":"/reference/delete-segments"}]},{"group":"Journeys","pages":[{"title":"View journeys","tag":"BETA","openapi":"GET /apps/{app_id}/journeys","href":"/reference/view-journeys"},{"title":"View journey","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}","href":"/reference/view-journey"},{"title":"View journey stats","tag":"BETA","openapi":"GET /apps/{app_id}/journeys/{id}/stats","href":"/reference/view-journey-stats"},{"title":"Create journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys","href":"/reference/create-journey"},{"title":"Duplicate journey","tag":"BETA","openapi":"POST /apps/{app_id}/journeys/{id}/duplicate","href":"/reference/duplicate-journey"},{"title":"Update journey","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}","href":"/reference/update-journey"},{"title":"Update journey node","tag":"BETA","openapi":"PATCH /apps/{app_id}/journeys/{id}/nodes/{node_id}","href":"/reference/update-journey-node"},{"title":"Delete journey","tag":"BETA","openapi":"DELETE /apps/{app_id}/journeys/{id}","href":"/reference/delete-journey"}]},{"group":"Configuration","pages":[{"title":"View apps","openapi":"GET /apps","href":"/reference/view-apps"},{"title":"View an app","openapi":"GET /apps/{app_id}","href":"/reference/view-an-app"},{"title":"Create an app","openapi":"POST /apps","href":"/reference/create-an-app"},{"title":"Update an app","openapi":"PUT /apps/{app_id}","href":"/reference/update-an-app"},{"title":"View API keys","openapi":"GET /apps/{app_id}/auth/tokens","href":"/reference/view-api-keys"},{"title":"Create API key","openapi":"POST /apps/{app_id}/auth/tokens","href":"/reference/create-api-key"},{"title":"Delete API key","openapi":"DELETE /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/delete-api-key"},{"title":"Update API key","openapi":"PATCH /apps/{app_id}/auth/tokens/{token_id}","href":"/reference/update-api-key"},{"title":"Rotate API key","openapi":"POST /apps/{app_id}/auth/tokens/{token_id}/rotate","href":"/reference/rotate-api-key"}]},{"group":"Analytics","pages":[{"title":"Export subscriptions CSV","openapi":"POST /players/csv_export","href":"/reference/csv-export"},{"title":"Export audience activity CSV","openapi":"POST /notifications/{message_id}/export_events","href":"/reference/export-csv-of-events"},{"title":"View outcomes","openapi":"GET /apps/{app_id}/outcomes?outcome_names={outcome_names}\u0026outcome_time_range={outcome_time_range}\u0026outcome_platforms={outcome_platforms}\u0026outcome_attribution={outcome_attribution}","href":"/reference/view-outcomes"}]},{"group":"Deprecated","pages":[{"title":"View players","deprecated":true,"href":"/reference/view-devices"},{"title":"View player","deprecated":true,"href":"/reference/view-device"},{"title":"Add a player","deprecated":true,"href":"/reference/add-a-device"},{"title":"Edit player","deprecated":true,"href":"/reference/edit-device"},{"title":"Edit tags with external user id","deprecated":true,"href":"/reference/edit-tags-with-external-user-id"},{"title":"Delete player record","deprecated":true,"href":"/reference/delete-user-record"}]}]},{"group":"SDKs","pages":[{"title":"Référence du SDK Serveur","href":"/docs/fr/server-sdk-reference"}]}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes/changelog"}]}],"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://onesignal.com/blog"},{"anchor":"GitHub","icon":"github","href":"https://github.com/OneSignal"},{"anchor":"YouTube","icon":"youtube","href":"https://www.youtube.com/@onesignalofficial/playlists"}]}}]},"title":"Create custom events - OneSignal","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-WRhTSUDL.js","utils-ChMov4Kr.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-_REmC2bI.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp6nVRCu.js","snippetPresets-DZadmXoU.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CY2WdoTl.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DwYG-Q4l.js","shallow-BXQIGwv4.js","getApiPlaygroundDisplay-CK5nK5B9.js","CodeSnippet-TH4a2aGW.js","CodeSnippets-DwsQiOFS.js","Page-R3M_BF4L.js","getPastedJson-DD7kUzi_.js","icon-holE3QoJ.js","MethodPill-DUW0T8us.js","DuplicateIcon-CI_p4be-.js","createIcon-BdbRvavb.js","DynamicMarkdown-DN96a4Ur.js","SectionHeading-SCu36A9d.js","axios-vUo_bRtp.js","Markdown-CCeGv-zI.js","clsx-BGBGWFTt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-Cv_O2fky.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-2C5OB2eV.js"]}