Query notification service IP address
When using Agora real-time audio and video, you can use the Notifications service to receive channel events.
After activating the service, when a channel event occurs, the Notifications server will deliver the event notification to your message receiving server.
If your server is behind a firewall, you need to call the IP address query API to retrieve the IP addresses of Notifications and configure your firewall to trust all these IP addresses.
Agora adjusts the Notifications IP addresses every 24 hours. Best practice is to call this endpoint at least every 24 hours and automatically update the firewall configuration.
Prototype
- Method:
GET
- Endpoint:
https://api.agora.io/v2/ncs/ip
Request parameters
Authentication
-
HTTP Basic Authentication
Every time you send an HTTP request, you must pass in a credential in the
Authorization
field in the HTTP request header. See RESTful Authentication on how to generate it.Basic authentication is a simple authentication scheme built into the HTTP protocol. To use it, send your HTTP requests with an
Authorization
header that contains the word Basic followed by a space and a base64-encoded stringusername:password
.Example:
Authorization: Basic ZGVtbzpwQDU1dzByZA==
Request examples
Use one of the following code examples to test this request:
Shell
-
curl
curl --request GET \ --url http://api.sd-rtn.com/v2/ncs/ip \ --header 'Accept: application/json' \ --header 'Authorization: '
-
HTTPie
http GET http://api.sd-rtn.com/v2/ncs/ip \ Accept:application/json \ Authorization:''
-
wget
wget --quiet \ --method GET \ --header 'Authorization: ' \ --header 'Accept: application/json' \ --output-document \ - http://api.sd-rtn.com/v2/ncs/ip
Javascript
-
Fetch
const url = 'http://api.sd-rtn.com/v2/ncs/ip';const options = {method: 'GET', headers: {Authorization: '', Accept: 'application/json'}};try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}
-
XMLHTTPRequest
const data = null;const xhr = new XMLHttpRequest();xhr.withCredentials = true;xhr.addEventListener('readystatechange', function () { if (this.readyState === this.DONE) { console.log(this.responseText); }});xhr.open('GET', 'http://api.sd-rtn.com/v2/ncs/ip');xhr.setRequestHeader('Authorization', '');xhr.setRequestHeader('Accept', 'application/json');xhr.send(data);
-
jQuery
const settings = { async: true, crossDomain: true, url: 'http://api.sd-rtn.com/v2/ncs/ip', method: 'GET', headers: { Authorization: '', Accept: 'application/json' }};$.ajax(settings).done(function (response) { console.log(response);});
-
Axios
import axios from 'axios';const options = { method: 'GET', url: 'http://api.sd-rtn.com/v2/ncs/ip', headers: {Authorization: '', Accept: 'application/json'}};try { const { data } = await axios.request(options); console.log(data);} catch (error) { console.error(error);}
Node
-
Native
const http = require('http');const options = { method: 'GET', hostname: 'api.sd-rtn.com', port: null, path: '/v2/ncs/ip', headers: { Authorization: '', Accept: 'application/json' }};const req = http.request(options, function (res) { const chunks = []; res.on('data', function (chunk) { chunks.push(chunk); }); res.on('end', function () { const body = Buffer.concat(chunks); console.log(body.toString()); });});req.end();
-
Request
const request = require('request');const options = { method: 'GET', url: 'http://api.sd-rtn.com/v2/ncs/ip', headers: {Authorization: '', Accept: 'application/json'}};request(options, function (error, response, body) { if (error) throw new Error(error); console.log(body);});
-
Unirest
const unirest = require('unirest');const req = unirest('GET', 'http://api.sd-rtn.com/v2/ncs/ip');req.headers({ Authorization: '', Accept: 'application/json'});req.end(function (res) { if (res.error) throw new Error(res.error); console.log(res.body);});
-
Fetch
const fetch = require('node-fetch');const url = 'http://api.sd-rtn.com/v2/ncs/ip';const options = {method: 'GET', headers: {Authorization: '', Accept: 'application/json'}};try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}
-
Axios
const axios = require('axios').default;const options = { method: 'GET', url: 'http://api.sd-rtn.com/v2/ncs/ip', headers: {Authorization: '', Accept: 'application/json'}};try { const { data } = await axios.request(options); console.log(data);} catch (error) { console.error(error);}
Python
-
Python 3
import http.clientconn = http.client.HTTPConnection("api.sd-rtn.com")headers = { 'Authorization': "", 'Accept': "application/json"}conn.request("GET", "/v2/ncs/ip", headers=headers)res = conn.getresponse()data = res.read()print(data.decode("utf-8"))
-
Requests
import requestsurl = "http://api.sd-rtn.com/v2/ncs/ip"headers = { "Authorization": "", "Accept": "application/json"}response = requests.get(url, headers=headers)print(response.json())
Go
package main import ( "fmt" "net/http" "io" ) func main() { url := "http://api.sd-rtn.com/v2/ncs/ip" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "") req.Header.Add("Accept", "application/json") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) }
C
CURL *hnd = curl_easy_init();curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");curl_easy_setopt(hnd, CURLOPT_URL, "http://api.sd-rtn.com/v2/ncs/ip");struct curl_slist *headers = NULL;headers = curl_slist_append(headers, "Authorization: ");headers = curl_slist_append(headers, "Accept: application/json");curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);CURLcode ret = curl_easy_perform(hnd);
Objective-C
#import <Foundation/Foundation.h>NSDictionary *headers = @{ @"Authorization": @"", @"Accept": @"application/json" };NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://api.sd-rtn.com/v2/ncs/ip"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0];[request setHTTPMethod:@"GET"];[request setAllHTTPHeaderFields:headers];NSURLSession *session = [NSURLSession sharedSession];NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error) { NSLog(@"%@", error); } else { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response; NSLog(@"%@", httpResponse); } }];[dataTask resume];
OCaml
open Cohttp_lwt_unixopen Cohttpopen Lwtlet uri = Uri.of_string "http://api.sd-rtn.com/v2/ncs/ip" inlet headers = Header.add_list (Header.init ()) [ ("Authorization", ""); ("Accept", "application/json");] inClient.call ~headers `GET uri>>= fun (res, body_stream) -> (* Do stuff with the result *)
C#
-
HTTPClient
using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Get, RequestUri = new Uri("http://api.sd-rtn.com/v2/ncs/ip"), Headers = { { "Authorization", "" }, { "Accept", "application/json" }, },};using (var response = await client.SendAsync(request)){ response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);}
-
RestSharp
var client = new RestClient("http://api.sd-rtn.com/v2/ncs/ip");var request = new RestRequest(Method.GET);request.AddHeader("Authorization", "");request.AddHeader("Accept", "application/json");IRestResponse response = client.Execute(request);
Java
-
AsyncHttp
AsyncHttpClient client = new DefaultAsyncHttpClient();client.prepare("GET", "http://api.sd-rtn.com/v2/ncs/ip") .setHeader("Authorization", "") .setHeader("Accept", "application/json") .execute() .toCompletableFuture() .thenAccept(System.out::println) .join();client.close();
-
NetHttp
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://api.sd-rtn.com/v2/ncs/ip")) .header("Authorization", "") .header("Accept", "application/json") .method("GET", HttpRequest.BodyPublishers.noBody()) .build();HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());
-
OkHttp
OkHttpClient client = new OkHttpClient();Request request = new Request.Builder() .url("http://api.sd-rtn.com/v2/ncs/ip") .get() .addHeader("Authorization", "") .addHeader("Accept", "application/json") .build();Response response = client.newCall(request).execute();
-
Unirest
HttpResponse<String> response = Unirest.get("http://api.sd-rtn.com/v2/ncs/ip") .header("Authorization", "") .header("Accept", "application/json") .asString();
Http 1.1
GET /v2/ncs/ip HTTP/1.1Authorization:Accept: application/jsonHost: api.sd-rtn.com
Clojure
(require '[clj-http.client :as client])(client/get "http://api.sd-rtn.com/v2/ncs/ip" {:headers {:Authorization ""} :accept :json})
Kotlin
val client = OkHttpClient()val request = Request.Builder() .url("http://api.sd-rtn.com/v2/ncs/ip") .get() .addHeader("Authorization", "") .addHeader("Accept", "application/json") .build()val response = client.newCall(request).execute()
PHP
-
cURL
<?php$curl = curl_init();curl_setopt_array($curl, [ CURLOPT_URL => "http://api.sd-rtn.com/v2/ncs/ip", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => [ "Accept: application/json", "Authorization: " ],]);$response = curl_exec($curl);$err = curl_error($curl);curl_close($curl);if ($err) { echo "cURL Error #:" . $err;} else { echo $response;}
-
Guzzle
<?php$client = new GuzzleHttp\Client();$response = $client->request('GET', 'http://api.sd-rtn.com/v2/ncs/ip', [ 'headers' => [ 'Accept' => 'application/json', 'Authorization' => '', ],]);echo $response->getBody();
PowerShell
-
WebRequest
$headers=@{}$headers.Add("Authorization", "")$headers.Add("Accept", "application/json")$response = Invoke-WebRequest -Uri 'http://api.sd-rtn.com/v2/ncs/ip' -Method GET -Headers $headers
-
RestMethod
$headers=@{}$headers.Add("Authorization", "")$headers.Add("Accept", "application/json")$response = Invoke-RestMethod -Uri 'http://api.sd-rtn.com/v2/ncs/ip' -Method GET -Headers $headers
R
library(httr)url <- "http://api.sd-rtn.com/v2/ncs/ip"response <- VERB("GET", url, add_headers('Authorization' = ''), content_type("application/octet-stream"), accept("application/json"))content(response, "text")
Ruby
require 'uri'require 'net/http'url = URI("http://api.sd-rtn.com/v2/ncs/ip")http = Net::HTTP.new(url.host, url.port)request = Net::HTTP::Get.new(url)request["Authorization"] = ''request["Accept"] = 'application/json'response = http.request(request)puts response.read_body
Swift
import Foundationlet headers = [ "Authorization": "", "Accept": "application/json"]let request = NSMutableURLRequest(url: NSURL(string: "http://api.sd-rtn.com/v2/ncs/ip")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)request.httpMethod = "GET"request.allHTTPHeaderFields = headerslet session = URLSession.sharedlet dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) }})dataTask.resume()
Response parameters
For details about possible response status codes, see Response status codes.
If the status code is not 200
, the request fails. See the message
field in the response body for the reason for this failure.
If the status code is 200
, the request succeeds, and the response body includes the following parameters:
Parameter | Type | Description |
---|---|---|
data | Object |
|
Response example
{ "data": { "service": { "hosts": [ { "primaryIP": "string" } ] } }}
To explore the RESTful API parameters, obtain sample code in various client languages, or test Media Gateway requests, refer to the Postman API reference.