API呼び出し方法
Host: https://vivoldi.com/api HTTP/1.1
Authorization: APIKey {Your API Key}
Content-type: application/json
{
"code": 0,
"message": "",
"result": Object
}
message - 応答メッセージで、応答コードが0でない場合、エラーメッセージが返されます。
result - 応答値で、APIタイプによって文字またはJSON Objectで返されます。
リンク生成
1つの短縮リンクを作成します。もし、大量のリンクを作成したい場合は、ダッシュボードの「一括リンク作成」メニューをご利用ください。
Post /api/link/v2/create HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
フィールド | フィールドの説明 | 説明 | 必須 | タイプ |
---|---|---|---|---|
url | 長いURL | 生成された短いリンクをクリックしたときに移動する長いURLです。 | string | |
domain | ドメイン | リンクドメイン、値が空の場合、自動的にvvd.bzドメインが選択されます。 Vivoldiのランダムドメインを利用している場合、またはあなたが所有しているドメインをVivoldiと連動した場合、そのドメインを設定します。 | string | |
grpIdx | グループID | グループIDを設定すると、そのグループにリンクが生成されます。 グループIDを確認するには、「グループリスト」APIを呼び出して確認する必要があります。 | int | |
brandLinkId | ブランドリンクID | 値を指定すると、そのIDでリンクが生成されます。 (ブランドリンクが設定されている場合、ドメインはvvd.bzではなくvvd.imです) 値が空の場合、リンクIDは自動的に生成されます。 | string | |
ttl | リンクタイトル | 値が空の場合、自動的に長いリンクのウェブページのタイトルとして保存されます。 | string | |
memo | メモ | ユーザーに公開されず、管理に必要な付加情報を設定することができます。 | string | |
notfSubscYn | プッシュリンク | 値がYの場合、生成されたリンクをクリックすると、長いリンクに移動する前にWebプッシュ通知ポップアップが表示され、ユーザーがプッシュ通知を許可した場合、許可したすべてのユーザーにプッシュメッセージを送信することができます。 通知ポップアップに同意しないか、キャンセルする場合、すぐに元の長いURLに移動します。 値を入力しない場合、デフォルト値はNです。 プッシュサブスクリプションリンクの詳細については、「Webプッシュ機能紹介」ページをご覧ください。 | Y or N | |
clksIpFilteringYn | IPフィルタリング | 値がYの場合、24時間の間、同じIPからリンクをクリックすると、リンククリック数が増加せず、1に固定されます。 真夜中(午前12時)が過ぎてから再度リンクをクリックすると、クリック数が+1されます。 クリック数IPフィルタリング機能は、リンク作成時にのみ設定が可能で、その後のリンク修正で値を変更することはできません。 この機能はパーソナルプランから利用できます。 | Y or N | |
pushNotifyYn | クリック数プッシュ通知 | 値がYの場合、「設定 -> 環境設定」ページのリンク設定で設定されたリンククリック数に達するたびに、Vivoldiアプリがインストールされたモバイルデバイスにクリック数プッシュ通知を受け取ることができます。 この機能はパーソナルプランから利用できます。 | Y or N | |
mailNotifyYn | クリック数メール通知 | 値がYの場合、「設定 -> 環境設定」ページのリンク設定で設定されたリンククリック数に達するたびに、Vivoldiに登録されたメールでクリック数情報を受け取ることができます。 この機能はパーソナルプランから利用できます。 | Y or N |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnCreateLink" type="button">Create Link</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnCreateLink").on('click', function(evt){
evt.preventDefault();
$.ajax({
type: 'POST',
url: 'https://vivoldi.com/api/link/v2/create',
data: JSON.stringify({'url':'https://google.com','domain':'https://vvd.bz'}),
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('short url: ' + res.result);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$url = "https://vivoldi.com/api/link/v2/create";
$params = array (
"url" => "https://www.facebook.com/vivoldi365",
"domain" => "https://vvd.bz",
);
$body = json_encode($params);
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX",
"Content-Type: application/json"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class CreateLink {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
JSONObject params = new JSONObject();
params.put("url", "https://www.facebook.com/vivoldi365");
params.put("domain", "https://vvd.bz");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/link/v2/create"))
.header("Content-Type", "application/json")
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.POST(HttpRequest.BodyPublishers.ofString(params.toString()))
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("Short URL: " + json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":"https://vvd.bz/jH3d"
}
フィールド | 説明 | タイプ |
---|---|---|
code | 応答コード (0:成功) | int |
message | 応答メッセージ、応答コードが0でない場合、関連メッセージが返されます。 | string |
result | 応答値 (短縮されたリンク) | string |
リンク修正
作成した短いリンクを修正します。
リンクタイプがURLの場合のみ修正することができ、それ以外のタイプはAPI呼び出しが成功しても修正されません。
Put /api/link/v2/edit HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
フィールド | フィールドの説明 | 説明 | 必須 | タイプ |
---|---|---|---|---|
linkId | リンクID | 生成されたショートリンクのID 例: ショートリンクのアドレスが "https://vvd.bz/fML" の場合、リンクIDは fML です。 | string | |
domain | ドメイン | ショートリンクアドレスのドメイン。 例: ショートリンクのアドレスが "https://vvd.bz/fML" の場合、ドメインは https://vvd.bz です。 重要: https:// または http:// の値を必ず入力する必要があります。 生成されたショートリンクのドメイン以外のドメインに設定すると、エラーが発生します。 | string | |
grpIdx | グループID | 生成されたリンクのグループを変更します。 グループIDを確認するには、「グループリスト」APIを呼び出して確認する必要があります。 | int | |
url | 長いURL | 長いURLを変更します。 プレミアムプランから長いURLを変更することができます。 | string | |
ttl | リンクタイトル | 値が空の場合、リンクタイトルは修正されません。 | string | |
memo | メモ | ユーザーに公開されず、管理に必要な付加情報を設定することができます。 値が空の場合、メモは修正されません。 | string | |
notfSubscYn | プッシュリンク | 値がYの場合、生成されたリンクをクリックすると、長いリンクに移動する前にWebプッシュ通知ポップアップが表示され、ユーザーがプッシュ通知を許可した場合、許可したすべてのユーザーにプッシュメッセージを送信することができます。 通知ポップアップに同意しない場合、またはキャンセルする場合、すぐに元の長いURLに移動します。 値を入力しない場合、デフォルト値はNです。 プッシュサブスクリプションリンクの詳細については、ここをクリックしてください。 | Y or N | |
pushNotifyYn | クリック数プッシュ通知 | 値がYの場合、「設定 -> 環境設定」ページのリンク設定で設定されたリンククリック数に達するたびに、Vivoldiアプリがインストールされたモバイルデバイスにクリック数プッシュ通知を受け取ることができます。 この機能はパーソナルプランから利用できます。 | Y or N | |
mailNotifyYn | クリック数メール通知 | 値がYの場合、「設定 -> 環境設定」ページのリンク設定で設定されたリンククリック数に達するたびに、Vivoldiに登録されたメールでクリック数情報を受け取ることができます。 この機能はパーソナルプランから利用できます。 | Y or N |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnUpdateLink" type="button">Update Link</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnUpdateLink").on('click', function(evt){
evt.preventDefault();
$.ajax({
type: 'PUT',
url: 'https://vivoldi.com/api/link/v2/edit',
data: JSON.stringify({'linkId':'jH3d','domain':'https://vvd.bz','ttl':'new title','memo':'new my memo'}),
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('Success!');
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$url = "https://vivoldi.com/api/link/v2/edit";
$params = array (
"linkId" => "4Rt3",
"domain" => "https://vvd.bz",
"ttl" => "new title",
"memo" => "new my memo"
);
$body = json_encode($params);
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX",
"Content-Type: application/json"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class UpdateLink {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
JSONObject params = new JSONObject();
params.put("linkId", "jH3d");
params.put("domain", "https://vvd.bz");
params.put("ttl", "new title");
params.put("memo", "new my memo");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/link/v2/edit"))
.header("Content-Type", "application/json")
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.PUT(HttpRequest.BodyPublishers.ofString(params.toString()))
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("success!");
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":""
}
フィールド | 説明 | タイプ |
---|---|---|
code | 応答コード (0:成功) | int |
message | 応答メッセージ、応答コードが0でない場合、関連メッセージが返されます。 | string |
リンクの削除
作成したショートリンクを削除します。
Delete /api/link/v1/remove HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
フィールド | フィールドの説明 | 説明 | 必須 | タイプ |
---|---|---|---|---|
リンクID | 링크 ID | 生成されたショートリンクのID 例: ショートリンクのアドレスが "https://vvd.bz/fML" の場合、リンクIDは fML です。 ブランドリンクID(リンクIDを直接設定)が設定されていて、特殊文字が含まれている場合、URLEncodeが必要です。 | string | |
domain | ドメイン | ショートリンクアドレスのドメイン。 例: ショートリンクのアドレスが "https://vvd.bz/fML" の場合、ドメインは https://vvd.bz です。 重要: https:// または http:// の値を必ず入力する必要があります。 生成されたショートリンクのドメイン以外のドメインに設定すると、エラーが発生します。 ブランドリンクID(リンクIDを直接設定)の場合、ドメインは https://vvd.im です。 | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnDeleteLink" type="button">Delete Link</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnDeleteLink").on('click', function(evt){
evt.preventDefault();
$.ajax({
type: 'DELETE',
url: 'https://vivoldi.com/api/link/v1/remove?linkId=강남스타벅스점&domain=https://vvd.im',
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('Success!');
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$linkId = urlencode("강남스타벅스점");
$url = "https://vivoldi.com/api/link/v1/remove?linkId=$linkId&domain=https://vvd.im";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class DeleteLink {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/link/v1/remove?linkId=강남스타벅스점&domain=https://vvd.im"))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.DELETE()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("success!");
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":""
}
フィールド | 説明 | タイプ |
---|---|---|
code | 応答コード (0:成功) | int |
message | 応答メッセージ、応答コードが0でない場合、関連メッセージが返されます。 | string |
リンク一覧
生成されたリンクのリストを照会します。
URLリンクのみ照会可能で、それ以外のタイプのリンクは照会されません。
本APIはプレミアムプランからご利用いただけます。
Get /api/link/v1/list HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
フィールド | フィールドの説明 | 説明 | 必須 | タイプ |
---|---|---|---|---|
linkId | リンクID | リンクIDでリストを照会します。 リンクIDに特殊文字が含まれている場合、URLEncodeが必要です。 | string | |
domain | ドメイン | リンクドメインでリストを照会します。 ドメインの前に必ず http:// または https:// の値を付ける必要があります。 | string | |
createTypeIdx | 生成タイプIDX | 0:すべてのリンク、270:Bivoldiダッシュボードで生成したリンク、272:API呼び出しで生成したリンク、274:一括リンク生成 | int | |
grpIdx | グループID | グループIDでリストを照会します。 値がない場合、基本値0に設定されます。 | int | |
url | 長いURL | 長いURLでリストを照会します。URLアドレスの部分検索が可能です。 | string | |
ttl | リンクタイトル | リンクのタイトルでリストを検索します。タイトルの部分検索が可能です。 | string | |
brandLinkYn | ブランドリンク | リンクIDが自動的に生成されず、直接設定した場合はブランドリンクです。 Y:使用(ブランドリンク), N:使用しない(自動的に生成されたリンク) | Y or N | |
notfSubscYn | プッシュリンク | Y:使用する、N:使用しない | Y or N | |
clksIpFilteringYn | クリック数IPフィルタリング | Y:使用、N:使用しない | Y or N | |
pushNotifyYn | クリック数プッシュ通知 | Y:有効, N:無効 | Y or N | |
mailNotifyYn | クリック数メール通知 | Y:有効, N:無効 | Y or N | |
regStartYmdt | 生成開始日 | リンクを作成した開始日で、作成日が開始日と終了日の間に含まれている必要があります。 例 2022-11-08 00:00:00:00 | Date | |
regEndYmdt | 生成終了日 | リンクを生成した終了日で、生成日が開始日と終了日の間に含まれている必要があります。 例: 2022-11-08 23:59:59 終了日は開始日より1ヶ月以内に設定する必要があります。 | Date | |
pages | ページ | pages 値はページング処理に使用され、基本値は 1 です。 一ページに基本的に30行が照会され、pagesの値が2日の場合、31行目から30個のデータが照会されます。 | int |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnLinkList" type="button">Get link list</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnLinkList").on('click', function(evt){
evt.preventDefault();
const regStartYmdt = encodeURI('2024-06-01 00:00:00');
const regEndYmdt = encodeURI('2024-06-30 23:59:59');
$.ajax({
type: 'GET',
url: 'https://vivoldi.com/api/link/v1/list?regStartYmdt='+regStartYmdt+'®EndYmdt='+regEndYmdt,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
console.log(res.result);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$regStartYmdt = urlencode("2024-06-01 00:00:00");
$regEndYmdt = urlencode("2024-06-30 23:59:59");
$url = "https://vivoldi.com/api/link/v1/list?regStartYmdt=$regStartYmdt®EndYmdt=$regEndYmdt";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ListLink {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
String regStartYmdt = URLEncoder.encode("2024-06-01 00:00:00", StandardCharsets.UTF_8);
String regEndYmdt = URLEncoder.encode("2024-06-30 23:59:59", StandardCharsets.UTF_8);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/link/v1/list?regStartYmdt="+regStartYmdt+"®EndYmdt="+regEndYmdt))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.GET()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println(json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":{
"extra": {
"pages":1,
"nextPages":1,
"nextYn":"N",
"count":2,
"totalCount":2
},
"list": [
{
"linkId":"createpostinglinks",
"domain":"https://vvd.im",
"typeIdx":103,
"typeNm":"URL",
"ttl":"게시물 링크를 이용한 유튜브 동영상을 추가하여 짧은 링크 만들기",
"memo":"",
"url":"https://vvd.im/createpostinglinks",
"grpIdx":0,
"grpNm":"",
"acesCnt":5072,
"acesCntToday":315,
"lastClkYmdt":"2022-11-07 04:45:10",
"longUrl":"https://vivoldi.com/blog/url-shortener/create-posts-link-url-shortener/",
"blockOverseasSticsYn":"N",
"notfSubscYn":"N",
"kakaoNotifyYn":"N",
"pushNotifyYn":"N",
"mailNotifyYn":"N",
"clksIpFilteringYn":"N",
"regYmdt":"2022-11-02 04:27:05",
"modYmdt":"2022-11-02 04:27:05"
},
{
"linkId":"4Rth",
"domain":"https://vvd.bz",
"typeIdx":103,
"typeNm":"URL",
"ttl":"NAVER",
"memo":"",
"url":"https://vvd.bz/4Rth",
"grpIdx":128,
"grpNm":"테스트",
"acesCnt":19,
"acesCntToday":3,
"lastClkYmdt":"2022-11-07 17:20:40",
"longUrl":"https://www.naver.com",
"blockOverseasSticsYn":"N",
"notfSubscYn":"N",
"kakaoNotifyYn":"N",
"pushNotifyYn":"Y",
"mailNotifyYn":"N",
"clksIpFilteringYn":"Y",
"regYmdt":"2022-11-07 17:10:22",
"modYmdt":"2022-11-07 17:10:22"
}
]
}
}
フィールド | 説明 | タイプ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
code | 응답 코드 (0:성공) | int | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
message | 응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨. | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
result | extra (추가 정보)
list (링크 목록) - Array
| array |
時間帯別クリック数統計
1つのリンクに対する時間帯別のクリック数、クリック者数を照会することができます。
本APIはビジネスプランからご利用いただけます。
Get /api/statistics/v1/clicks-by-time HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
필드 | 필드 설명 | 설명 | 필수 | 유형 |
---|---|---|---|---|
linkId | 링크 ID | 링크 ID로 통계를 조회합니다. 브랜드 링크(링크ID를 직접 설정)로 설정된 링크 중 특수문자가 포함되어 있으면 URLEncode가 필요합니다. | string | |
domain | 도메인 | 링크 도메인으로 목록을 조회합니다. 도메인 앞에 반드시 http:// 또는 https:// 값을 붙여야 합니다. 브랜드 링크(링크ID를 직접 설정)가 설정되어 있는 경우 도메인은 https://vvd.bz이 아닌 https://vvd.im 입니다. | string | |
ymd | 날짜 | 해당 날짜의 시간대별 클릭 수와 클릭 사람 수 목록을 조회합니다. 오늘로 부터 최대 7일 전 날짜만 입력할 수 있습니다. 예: 2024-06-14 | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnClickList" type="button">Get click list</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnClickList").on('click', function(evt){
evt.preventDefault();
const linkId = 'y6Tg';
const domain = 'https://vvd.bz';
const ymd = '2024-06-14';
$.ajax({
type: 'GET',
url: 'https://vivoldi.com/api/statistics/v1/clicks-by-time?linkId='+linkId+'&domain='+domain+'&ymd='+ymd,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
console.log(res);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$linkId = "y6Tg";
$domain = "https://vvd.bz";
$ymd = "2024-06-14";
$url = "https://vivoldi.com/api/statistics/v1/clicks-by-time?linkId=$linkId&domain=$domain&ymd=$ymd";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ClickList {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
String nm = URLEncoder.encode("my test group", StandardCharsets.UTF_8);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/statistics/v1/clicks-by-time?linkId=y6Tg&domain=https://vvd.bz&ymd=2024-06-14"))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.GET()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println(json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":[
{
"ymd":"2024-06-14",
"hour":"00",
"linkId":"y6Tg",
"domain":"https://vvd.bz",
"acesCnt":24,
"pernCnt":17,
},
{
"ymd":"2024-06-14",
"hour":"08",
"linkId":"y6Tg",
"domain":"https://vvd.bz",
"acesCnt":121,
"pernCnt":198,
}
{
"ymd":"2024-06-14",
"hour":"14",
"linkId":"y6Tg",
"domain":"https://vvd.bz",
"acesCnt":84,
"pernCnt":68,
}
]
}
필드 | 설명 | 유형 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
code | 응답 코드 (0:성공) | int | ||||||||||||||||||||||||||||
message | 응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨. | string | ||||||||||||||||||||||||||||
result | 통계 목록:
| array |
日付別クリック数統計
1つのリンクに対する日付ごとのクリック数、クリックした人数を照会することができます。
検索時の開始日と終了日の範囲は1ヶ月を超えることはできません。
本APIはビジネスプランからご利用いただけます。
Get /api/statistics/v1/clicks-by-date HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
필드 | 필드 설명 | 설명 | 필수 | 유형 |
---|---|---|---|---|
linkId | 링크 ID | 링크 ID로 통계를 조회합니다. 브랜드 링크(링크ID를 직접 설정)로 설정된 링크 중 특수문자가 포함되어 있으면 URLEncode가 필요합니다. | string | |
domain | 도메인 | 링크 도메인으로 목록을 조회합니다. 도메인 앞에 반드시 http:// 또는 https:// 값을 붙여야 합니다. 브랜드 링크(링크ID를 직접 설정)가 설정되어 있는 경우 도메인은 https://vvd.bz이 아닌 https://vvd.im 입니다. | string | |
startYmd | 시작 날짜 | 링크를 클릭한 시작 날짜로 클릭 날짜가 시작 날짜와 종료 날짜 사이 포함되어야 합니다. 예: 2024-05-01 | string | |
endYmd | 종료 날짜 | 링크를 클릭한 종료 날짜로 클릭 날짜가 시작 날짜와 종료 날짜 사이 포함되어야 합니다. 시작 날짜와 종료 날짜 범위는 최대 1달입니다. 예: 2024-05-31 | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnClickList" type="button">Get click list</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnClickList").on('click', function(evt){
evt.preventDefault();
const linkId = 'y6Tg';
const domain = 'https://vvd.bz';
const startYmd = '2024-05-01';
const endYmd = '2024-05-31';
$.ajax({
type: 'GET',
url: 'https://vivoldi.com/api/statistics/v1/clicks-by-date?linkId='+linkId+'&domain='+domain+'&startYmd='+startYmd+'&endYmd='+endYmd,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
console.log(res);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$linkId = "y6Tg";
$domain = "https://vvd.bz";
$startYmd = "2024-05-01";
$endYmd = "2024-05-31";
$url = "https://vivoldi.com/api/statistics/v1/clicks-by-date?linkId=$linkId&domain=$domain&startYmd=$startYmd&endYmd=$endYmd";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ClickList {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
String nm = URLEncoder.encode("my test group", StandardCharsets.UTF_8);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/statistics/v1/clicks-by-date?linkId=y6Tg&domain=https://vvd.bz&startYmd=2024-05-01&endYmd=2024-05-31"))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.GET()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println(json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":[
{
"ymd":"2024-05-01",
"linkId":"y6Tg",
"domain":"https://vvd.bz",
"acesCnt":384,
"pernCnt":295,
},
{
"ymd":"2024-05-02",
"linkId":"y6Tg",
"domain":"https://vvd.bz",
"acesCnt":18543,
"pernCnt":15691,
}
{
"ymd":"2024-05-03",
"linkId":"y6Tg",
"domain":"https://vvd.bz",
"acesCnt":5408,
"pernCnt":5006,
}
]
}
필드 | 설명 | 유형 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
code | 응답 코드 (0:성공) | int | ||||||||||||||||||||||||
message | 응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨. | string | ||||||||||||||||||||||||
result | 통계 목록:
| array |
グループ一覧
生成されたリンクグループの一覧を照会します。
Get /api/group/v1/list HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
필드 | 필드 설명 | 설명 | 필수 | 유형 |
---|---|---|---|---|
grpIdx | 그룹 ID | 그룹 ID로 목록을 조회합니다. | int | |
nm | 그룹 이름 | 그룹 이름을 설정하면 그룹 목록을 조회할 때 그룹 이름을 검색하여 조회합니다. 그룹 이름 검색은 equals 조회가 아닌 like 조회입니다. | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnGroupList" type="button">Get group list</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnGroupList").on('click', function(evt){
evt.preventDefault();
const nm = encodeURI('my test group');
$.ajax({
type: 'GET',
url: 'https://vivoldi.com/api/group/v1/list?nm='+nm,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
console.log(res);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$nm = urlencode("my test group");
$url = "https://vivoldi.com/api/group/v1/list?nm=$nm";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class GroupList {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
String nm = URLEncoder.encode("my test group", StandardCharsets.UTF_8);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/group/v1/list?nm="+nm))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.GET()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println(json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":[
{
"idx":1,
"nm":"쿠팡 전자제품",
"memo":"10만원 ~ 50만원 제품",
"linkCnt":112,
"blockOverseasSticsYn":"N",
"notfSubscYn":"N",
"kakaoNotifyYn":"N",
"pushNotifyYn":"N",
"mailNotifyYn":"N",
"clksIpFilteringYn":"N",
"regYmdt":"2019-10-20 02:30:00",
"modYmdt":"2019-10-20 02:30:00"
},
{
"idx":2,
"nm":"쿠팡 전자제품 (100만원 이상)",
"memo":"100만원 이상 제품",
"linkCnt":68,
"blockOverseasSticsYn":"N",
"notfSubscYn":"Y",
"kakaoNotifyYn":"N",
"pushNotifyYn":"Y",
"mailNotifyYn":"N",
"clksIpFilteringYn":"Y",
"regYmdt":"2019-10-21 15:30:20",
"modYmdt":"2019-10-22 11:20:50"
}
]
}
필드 | 설명 | 유형 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
code | 응답 코드 (0:성공) | int | ||||||||||||||||||||||||||||||||||||||||||||||||||||
message | 응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨. | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||
result | 그룹 목록:
| array |
有効期限、パスワード、最大クリック許可数が設定されたリンクの検証
本APIはプレミアムプランからご利用いただけます。
リンクアクセスに制限をかける場合、有効期間、パスワード、最大クリック許可数を設定します。
ユーザーがVivoldiで生成したリンクをクリックする場合は問題ありませんが、もし、ブラウザで長いURLで直接接続する場合、検証する方法がありません。
Vivoldiはこのような問題を解決するために、別途JavaScript SDKを提供しています。
長いリンクのページにVivoldiで提供するSDKを追加すると、SDKで当該リンクの情報を照会した後、有効期間、パスワード、最大クリック許可数をチェックし再びVivoldiの短いリンクにRedirect処理したり、アクセスをブロックします。
あなたのイベントやプロモーションページにVivoldiが提供するスクリプトを
あなたのページに以下のようにビボディのスクリプトを追加してください:
<html>
<head>
<title>샘플 페이지</title>
<script src="https://opencdn.vivoldi.com/js/v1/link.validate.min.js?v=202401191" type="text/javascript"></script>
<script>
const linkId = 'xY5h'; // 생성한 링크ID
const domain = 'https://vvd.bz'; // 링크 도메인 (vvd.bz 또는 vvd.im)
const apiKey = 'oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'; // 귀하의 API Key
vvdLinkValidate(linkId, domain, apiKey); // 비볼디에서 제공하는 SDK의 함수 호출
</script>
</head>
<body>
.
.
.
</body>
</html>
Get /api/validate/v1/link HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/x-www-form-urlencoded
필드 | 필드 설명 | 설명 | 필수 | 유형 |
---|---|---|---|---|
linkId | 링크 ID | 유효기간, 비밀번호, 최대 클릭 허용 수가 설정된 링크의 ID | string | |
domain | 도메인 | 생성된 링크의 도메인 | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnValidate" type="button">Get validate</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnValidate").on('click', function(evt){
evt.preventDefault();
$.ajax({
type: 'GET',
url: 'https://vivoldi.com/api/validate/v1/link?linkId=4Rug&domain=https://vvd.bz',
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
console.log(res.result);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$linkId = "4Rug";
$domain = "https://vvd.bz";
$url = "https://vivoldi.com/api/validate/v1/link?linkId=$linkId&domain=$domain";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class LinkValidate {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/validate/v1/link?linkId=4Rug&domain=https://vvd.bz"))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.GET()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println(json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result": {
"linkId": "xY5h",
"domain": "https://vvd.bz",
"expireUseYn": "N",
"expireYn": "N",
"expireUrl": "https://",
"acesMaxUseYn": "Y",
"acesMaxYn": "Y",
"acesMaxCnt": 1000,
"acesCnt": 1,
"pernCnt": 1,
"agentKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"url": "https://vvd.bz/xY5h",
"pwdUseYn": "Y",
"pwdConfirmYn: "Y"
}
}
필드 | 설명 | 유형 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
code | 응답 코드 (0:성공) | int | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
message | 응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨. | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
result |
| object |
クーポン作成
本APIはパーソナルプランからご利用いただけます。
割引クーポンを作成します。もし、一度に複数のクーポンを作成したい場合は、ダッシュボードからクーポンを作成してください。
APIを利用すると、クーポン画像をアップロードすることができません。
この場合、ダッシュボードでクーポングループを作成する際にクーポン画像をアップロードし、クーポン作成時にグループを指定することができます。
クーポンを作成する際にクーポングループを指定すると、一部の設定は無視され、クーポングループの設定が適用されます。
Post /api/coupon/v1/create HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
フィールド | フィールドの説明 | 説明 | 必須 | タイプ |
---|---|---|---|---|
cpnNo | クーポン番号 | 大文字のアルファベットと数字を組み合わせた8~16桁のクーポン番号です。 特殊文字はクーポン番号に使用できません。 値が空白の場合、クーポン番号はシステムによって自動的に生成されます。 | string | |
grpIdx | クーポングループ | クーポングループはクーポンの分類を管理するために使用され、グループ設定とクーポン設定が重複する場合、クーポン設定は無視されます。 グループIDXは、ダッシュボードのクーポングループページで確認できます。 デフォルト: 0 | int | |
tmplIdx | クーポンテンプレート | クーポンテンプレートは、クーポンの説明と使用場所、使用方法、注意事項をユーザーに伝えるために使用されます。 テンプレートIDXは、ダッシュボードのクーポンテンプレートページで確認できます。 デフォルト: 0 | int | |
nm | クーポン名 | クーポンの名前はクーポンページに表示されます。 | string | |
discTypeIdx | 割引の種類 | クーポンの割引タイプ(料金または金額)を設定します。 457:料金割引(%), 458:金額割引 料金割引: クーポンのパーセンテージ割引を提供する場合に使用します。 金額割引:入力された金額分の割引を提供する場合に使用します。 | int | |
disc | 割引値 | 割引タイプがレート(457)の場合、1%~100%の間の値を入力します。 割引タイプが金額(458)の場合、割引する金額を入力します。 | double | |
discCurrency | 金額通貨 | 割引タイプが金額(458)の場合、通貨単位を設定することができます。 KRW:韓国ウォン, USD:米ドル, JPY:日本円, EUR:欧州ユーロ デフォルト: KRW | string | |
strtYmd | 有効期間開始日 | クーポンをいつから使用できるのか、有効期間の開始日を設定します。 yyyy-mm-ddの日付形式で10桁の値。 はい: 2024-10-01 | date | |
endYmd | 有効期限満了日 | クーポンをいつまで使用できるのか、有効期限を設定します。 yyyy-mm-ddの日付形式で10桁の値。 はい: 2024-12-31 | date | |
onsiteYn | 現場クーポンの有無 | この値がYの場合、クーポンページでクーポンを使用できるボタンが表示されます。 ユーザーがクーポンを店員に見せると、店員がクーポンを使うという仕組みです。オフライン店舗を運営している場合、便利な機能です。 デフォルト: N | Y or N | |
memo | 메모 | クーポンを管理する内部用途に使用することができます。 メモはユーザーに公開されません。 | string | |
url | URL | URLを入力すると、クーポンページにクーポンを使うボタンが表示され、クリックすると入力したURLに移動します。 クーポン画像がアップロードされている場合は、画像をクリックしてもURLに移動します。 | string | |
useLimit | 1人あたりの最大クーポン使用回数 | クーポンを最大何回まで使用できるかを回数を設定します。 1人当たりのクーポン使用回数「2回~5回」までは、Vivoldiが提供するREST APIを利用してクーポン使用処理をする際に必要です。 この時、ユーザーIDの値は必ず入力する必要があります。 クーポン使用をダッシュボードで手動で管理する場合は、「無制限」、「1回」のうち1つだけ選択することができます。 「無制限」を選択すると、誰でも回数制限なくクーポンを使用することができます。 0:無制限、1:1回限定、2:2回限定、3:3回限定、4:4回限定、5:5回限定 | int | |
color | 文字色 | クーポンページでクーポン文字の色を設定します。 HEX値で入力する必要があり、透明度を含めて最大9桁まで入力できます。 デフォルト値: #4F4F4FFF | string | |
background | 背景色 | クーポンページでクーポンの背景色を設定します。 HEX値で入力する必要があり、透明度を含めて最大9桁まで入力できます。 デフォルト値: #FFFFFFFF | string | |
userId | ユーザーID | 誰にクーポンを発行したか、誰がクーポンを使用したかを管理するために使用されます。 1人当たりの最大クーポン使用回数が2~5の場合、ユーザーIDは必ず入力する必要があります。 通常、ウェブサイトに登録した会員のログインIDを入力します。 | string | |
userNm | ユーザー名 | 誰にクーポンを発行するかがすでにわかっている場合は、クーポンを使用するユーザーの名前を入力します。 クーポンの発行や使用処理の管理を行う際に必要です。 | string | |
userPhnno | ユーザー連絡先 | クーポンを使用するユーザーの連絡先を設定します。 | string | |
userEml | ユーザーメール | クーポンを使用するユーザーのメールアドレスを設定します。 | string | |
userEtc1 | ユーザーその他の情報1 | 内部管理用にユーザーの追加情報を設定します。 | string | |
userEtc2 | ユーザーその他の情報2 | 内部管理用にユーザーの追加情報を設定します。 | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnCreateCoupon" type="button">Create Coupon</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnCreateCoupon").on('click', function(evt){
evt.preventDefault();
const data = JSON.stringify({
'cpnNo':'', // auto create
'grpIdx':271,
'tmplIdx':0,
'nm':'5,000원 할인 쿠폰',
'discTypeIdx':458,
'disc':5000,
'strtYmd':'2024-10-01',
'endYmd':'2025-12-31',
'memo':'신규 회원가입, Address:211.111.222.33',
'url':'https://bestshop.com/product/bags/42316',
'useLimit':1,
'userId':'att78z',
'userNm':'홍길동',
'userPhnno':'010-1111-2345',
'userEml':'test@gmail.com',
'userEtc1':'VIP 회원'
});
$.ajax({
type: 'POST',
url: 'https://vivoldi.com/api/coupon/v1/create',
data: data,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('Coupon number: ' + res.result);
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$url = "https://vivoldi.com/api/coupon/v1/create";
$params = array (
"cpnNo" => "", // auto create
"grpIdx" => 271,
"tmplIdx" => 0,
"nm" => "5,000원 할인 쿠폰",
"discTypeIdx" => 458,
"disc" => 5000,
"strtYmd" => "2024-10-01",
"endYmd" => "2025-12-31",
"memo" => "신규 회원가입, Address:211.111.222.33",
"url" => "https://bestshop.com/product/bags/42316",
"useLimit" => 1,
"userId" => "att78z",
"userNm" => "홍길동",
"userPhnno" => "010-1111-2345",
"userEml" => "test@gmail.com",
"userEtc1" => "VIP 회원"
);
$body = json_encode($params);
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX",
"Content-Type: application/json"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class CreateCoupon {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
JSONObject params = new JSONObject();
params.put("cpnNo", ""); // auto create
params.put("grpIdx", 271);
params.put("tmplIdx", 0);
params.put("nm", "5,000원 할인 쿠폰");
params.put("discTypeIdx", 458);
params.put("disc", 5000);
params.put("strtYmd", "2024-10-01");
params.put("endYmd", "2025-12-31");
params.put("memo", "신규 회원가입, Address:211.111.222.33");
params.put("url", "https://bestshop.com/product/bags/42316");
params.put("useLimit", 1);
params.put("userId", "att78z");
params.put("userNm", "홍길동");
params.put("userPhnno", "010-1111-2345");
params.put("userEml", "test@gmail.com");
params.put("userEtc1", "VIP 회원");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/coupon/v1/create"))
.header("Content-Type", "application/json")
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.POST(HttpRequest.BodyPublishers.ofString(params.toString()))
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("Coupon number: " + json.getString("result"));
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":"ZJLF0399WQBEQZJM"
}
フィールド | 説明 | タイプ |
---|---|---|
code | 応答コード (0:成功) | int |
message | 応答メッセージ、応答コードが0でない場合、関連メッセージが返されます。 | string |
result | 応答値 (クーポン番号) | string |
クーポンの修正
本APIはパーソナルプランからご利用いただけます。
生成されたクーポンの情報を変更します。
クーポンにグループを指定すると、一部の設定は無視され、クーポングループの設定が適用されます。
既に使用済みのクーポンは「メモ」のみ修正でき、それ以外の情報は変更できません。
Put /api/coupon/v1/edit HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
フィールド | フィールドの説明 | 説明 | 必須 | タイプ |
---|---|---|---|---|
cpnNo | クーポン番号 | 情報を変更するクーポン番号です。 “-” 記号を除くクーポン番号のみを入力してください。 | string | |
grpIdx | クーポングループ | クーポングループはクーポンの分類を管理するために使用され、グループ設定とクーポン設定が重複する場合、クーポン設定は無視されます。 グループIDXは、ダッシュボードのクーポングループページで確認できます。 デフォルト: 0 | int | |
tmplIdx | クーポンテンプレート | クーポンテンプレートは、クーポンの説明と使用場所、使用方法、注意事項をユーザーに伝えるために使用されます。 テンプレートIDXは、ダッシュボードのクーポンテンプレートページで確認できます。 デフォルト: 0 | int | |
nm | クーポン名 | クーポンの名前はクーポンページに表示されます。 | string | |
discTypeIdx | 割引の種類 | クーポンの割引タイプ(料金または金額)を設定します。 457:料金割引(%), 458:金額割引 料金割引: クーポンのパーセンテージ割引を提供する場合に使用します。 金額割引:入力された金額分の割引を提供する場合に使用します。 | int | |
disc | 割引値 | 割引タイプがレート(457)の場合、1%~100%の間の値を入力します。 割引タイプが金額(458)の場合、割引する金額を入力します。 | double | |
discCurrency | 金額通貨 | 割引タイプが金額(458)の場合、通貨単位を設定することができます。 KRW:韓国ウォン, USD:米ドル, JPY:日本円, EUR:欧州ユーロ デフォルト: KRW | string | |
strtYmd | 有効期間開始日 | クーポンをいつから使用できるのか、有効期間の開始日を設定します。 yyyy-mm-ddの日付形式で10桁の値。 はい: 2024-10-01 | date | |
endYmd | 有効期限満了日 | クーポンをいつまで使用できるのか、有効期限を設定します。 yyyy-mm-ddの日付形式で10桁の値。 はい: 2024-12-31 | date | |
onsiteYn | 現場クーポンの有無 | この値がYの場合、クーポンページでクーポンを使用できるボタンが表示されます。 ユーザーがクーポンを店員に見せると、店員がクーポンを使うという仕組みです。オフライン店舗を運営している場合、便利な機能です。 | Y or N | |
memo | 메모 | クーポンを管理する内部用途に使用することができます。 メモはユーザーに公開されません。 | string | |
url | URL | URLを入力すると、クーポンページにクーポンを使うボタンが表示され、クリックすると入力したURLに移動します。 クーポン画像がアップロードされている場合は、画像をクリックしてもURLに移動します。 | string | |
useLimit | 1人あたりの最大クーポン使用回数 | クーポンを最大何回まで使用できるかを回数を設定します。 1人当たりのクーポン使用回数「2回~5回」までは、Vivoldiが提供するREST APIを利用してクーポン使用処理をする際に必要です。 この時、ユーザーIDの値は必ず入力する必要があります。 クーポン使用をダッシュボードで手動で管理する場合は、「無制限」、「1回」のうち1つだけ選択することができます。 「無制限」を選択すると、誰でも回数制限なくクーポンを使用することができます。 0:無制限、1:1回限定、2:2回限定、3:3回限定、4:4回限定、5:5回限定 | int | |
color | 文字色 | クーポンページでクーポン文字の色を設定します。 HEX値で入力する必要があり、透明度を含めて最大9桁まで入力できます。 デフォルト値: #4F4F4FFF | string | |
background | 背景色 | クーポンページでクーポンの背景色を設定します。 HEX値で入力する必要があり、透明度を含めて最大9桁まで入力できます。 デフォルト値: #FFFFFFFF | string | |
userId | ユーザーID | 誰にクーポンを発行したか、誰がクーポンを使用したかを管理するために使用されます。 1人当たりの最大クーポン使用回数が2~5の場合、ユーザーIDは必ず入力する必要があります。 通常、ウェブサイトに登録した会員のログインIDを入力します。 | string | |
userNm | ユーザー名 | 誰にクーポンを発行するかがすでにわかっている場合は、クーポンを使用するユーザーの名前を入力します。 クーポンの発行や使用処理の管理を行う際に必要です。 | string | |
userPhnno | ユーザー連絡先 | クーポンを使用するユーザーの連絡先を設定します。 | string | |
userEml | ユーザーメール | クーポンを使用するユーザーのメールアドレスを設定します。 | string | |
userEtc1 | ユーザーその他の情報1 | 内部管理用にユーザーの追加情報を設定します。 | string | |
userEtc2 | ユーザーその他の情報2 | 内部管理用にユーザーの追加情報を設定します。 | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnEditCoupon" type="button">Edit Coupon</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnEditCoupon").on('click', function(evt){
evt.preventDefault();
const data = JSON.stringify({
'cpnNo':'ZJLF0399WQBEQZJM',
'nm':'40% 할인 쿠폰',
'discTypeIdx':457,
'disc':40
});
$.ajax({
type: 'PUT',
url: 'https://vivoldi.com/api/coupon/v1/edit',
data: data,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('success!');
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$url = "https://vivoldi.com/api/coupon/v1/edit";
$params = array (
"cpnNo" => "ZJLF0399WQBEQZJM",
"nm" => "40% 할인 쿠폰",
"discTypeIdx" => 457,
"disc" => 40
);
$body = json_encode($params);
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX",
"Content-Type: application/json"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class EditCoupon {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
JSONObject params = new JSONObject();
params.put("cpnNo", "ZJLF0399WQBEQZJM");
params.put("nm", "40% 할인 쿠폰");
params.put("discTypeIdx", 457);
params.put("disc", 40);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/coupon/v1/edit"))
.header("Content-Type", "application/json")
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.PUT(HttpRequest.BodyPublishers.ofString(params.toString()))
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("Success!");
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":null
}
フィールド | 説明 | タイプ |
---|---|---|
code | 応答コード (0:成功) | int |
message | 応答メッセージ、応答コードが0でない場合、関連メッセージが返されます。 | string |
クーポンの削除
本APIはパーソナルプランからご利用いただけます。
生成されたクーポンを削除します。
一度に複数のクーポンを削除するには、ダッシュボードをご利用ください。
Delete /api/coupon/v1/remove HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
フィールド | フィールドの説明 | 説明 | 必須 | タイプ |
---|---|---|---|---|
cpnNo | クーポン番号 | 削除するクーポン番号。 | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnDeleteCoupon" type="button">Delete Coupon</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnDeleteCoupon").on('click', function(evt){
evt.preventDefault();
$.ajax({
type: 'DELETE',
url: 'https://vivoldi.com/api/coupon/v1/remove?cpnNo=ZJLF0399WQBEQZJM',
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('Success!');
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$cpnNo = "ZJLF0399WQBEQZJM";
$url = "https://vivoldi.com/api/coupon/v1/remove?cpnNo=$cpnNo";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class DeleteCoupon {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/link/v1/remove?cpnNo=ZJLF0399WQBEQZJM"))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.DELETE()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("Success!");
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":""
}
フィールド | 説明 | タイプ |
---|---|---|
code | 応答コード (0:成功) | int |
message | 応答メッセージ、応答コードが0でない場合、関連メッセージが返されます。 | string |
クーポンの検証
「クーポン使用"処理前に有効なクーポンであることを確認するために使用されます。
以下のようにクーポン検証を検証します。
- クーポン有効期間の検証。(開始日と有効期限)
- 1人あたりのクーポン最大使用可能回数検証。
- クーポン使用可否の確認。
Get /api/coupon/v1/validate HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
フィールド | フィールドの説明 | 説明 | 必須 | タイプ |
---|---|---|---|---|
cpnNo | クーポン番号 | 検証するクーポン番号。 検証に失敗した場合、Responseのmessageを確認してください。 | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnValidate" type="button">Get validate</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnValidate").on('click', function(evt){
evt.preventDefault();
$.ajax({
type: 'GET',
url: 'https://vivoldi.com/api/coupon/v1/validate?cpnNo=ZJLF0399WQBEQZJM',
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
timeout: 5000
}).done(function(res){
if (res.code === 0) {
console.log('사용 가능한 쿠폰입니다.');
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$cpnNo = "ZJLF0399WQBEQZJM";
$url = "https://vivoldi.com/api/coupon/v1/validate?cpnNo=$cpnNo";
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
echo "사용 가능한 쿠폰입니다.";
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ValidateCoupon {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/coupon/v1/validate?cpnNo=ZJLF0399WQBEQZJM"))
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.GET()
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("사용 가능한 쿠폰입니다.");
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result": null
}
フィールド | 説明 | タイプ |
---|---|---|
code | 応答コード (0:成功) | int |
message | 応答メッセージ、応答コードが0でない場合、関連メッセージが返されます。 | string |
クーポンの使用
本APIはパーソナルプランからご利用いただけます。
ダッシュボードのクーポンリストから「クーポン使用」処理を手動で管理することもできますが、本APIを利用すれば、貴社のウェブサイトでユーザーがクーポンを使用する際に呼び出し、自動化することができます。
Put /api/coupon/v1/use HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
フィールド | フィールドの説明 | 説明 | 必須 | タイプ |
---|---|---|---|---|
cpnNo | クーポン番号 | 「使用完了」処理するクーポン番号。 「-"記号を除くクーポン番号のみを入力してください。 | string | |
userId | ユーザーID | 誰にクーポンを発行したか、誰がクーポンを使用したかを管理するために使用されます。 1人当たりの最大クーポン使用回数が2~5の場合、ユーザーIDは必ず入力する必要があります。 通常、ウェブサイトに登録した会員のログインIDを入力します。 | string | |
memo | メモ | クーポン使用の管理上、メモを入力することができます。 ユーザーのIPアドレス、クーポンを使用したページやサービス、その他の情報を入力します。 1人当たりの最大クーポン使用回数が無制限の場合、誰がクーポンを使用したかわからないので、ユーザーIDまたはメモで管理することができます。 | string |
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<form id="exampleForm">
<button id="btnUseCoupon" type="button">Use Coupon</button>
</form>
<script type="text/javascript">
$(function(){
$("#btnUseCoupon").on('click', function(evt){
evt.preventDefault();
const data = JSON.stringify({
'cpnNo':'ZJLF0399WQBEQZJM',
'userId':'x77hu',
'memo':'IP Address: 210.123.111.222, Request Page: example.com/shop/bags/p112233'
});
$.ajax({
type: 'PUT',
url: 'https://vivoldi.com/api/coupon/v1/use',
data: data,
headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
contentType: 'application/json; charset=utf-8',
dataType: 'json',
timeout: 5000
}).done(function(res){
if (res.code === 0) {
alert('success!');
} else {
alert('code: ' + res.code + ', message: ' + res.message);
}
}).fail(function(xhr, textStatus, e){
alert('error: ' + e);
});
});
});
</script>
</body>
</html>
<?php
$url = "https://vivoldi.com/api/coupon/v1/use";
$params = array (
"cpnNo" => "ZJLF0399WQBEQZJM",
"userId" => "x77hu",
"memo" => "IP Address: 210.123.111.222, Request Page: example.com/shop/bags/p112233"
);
$body = json_encode($params);
$headers = array(
"Authorization: APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX",
"Content-Type: application/json"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10000);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($ch);
if ($result === FALSE) {
echo "Error sending: " . curl_error($ch);
} else {
print_r($result);
}
curl_close($ch);
?>
package com.example;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class UseCoupon {
public static void main(String[] args) {
try (HttpClient client = HttpClient.newBuilder().build()) {
JSONObject params = new JSONObject();
params.put("cpnNo", "ZJLF0399WQBEQZJM");
params.put("userId", "x77hu");
params.put("memo", "IP Address: 210.123.111.222, Request Page: example.com/shop/bags/p112233");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://vivoldi.com/api/coupon/v1/use"))
.header("Content-Type", "application/json")
.header("Authorization", "APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX")
.PUT(HttpRequest.BodyPublishers.ofString(params.toString()))
.build();
HttpResponse<String> response;
try {
response = client.send(request, HttpResponse.BodyHandlers.ofString());
} catch (Exception e) {
throw new RuntimeException(e);
}
if (response != null) {
if (response.statusCode() == HttpStatus.OK.value()) {
String jsonString = response.body();
if (jsonString != null && !jsonString.isEmpty()) {
JSONObject json = new JSONObject(jsonString);
if (json.getInt("code") == 0) {
System.out.println("Success!");
} else {
System.out.println("Failed: " + String.format("[%d] %s", json.getInt("code"), json.getString("message")));
}
}
}
}
}
}
}
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
"code":0,
"message":"",
"result":null
}
フィールド | 説明 | タイプ |
---|---|---|
code | 応答コード (0:成功) | int |
message | 応答メッセージ、応答コードが0でない場合、関連メッセージが返されます。 | string |
プッシュメッセージの送信
本APIはVivoldiの短縮URLサービスとは関係なく、ウェブサイトを運営するすべてのユーザーを対象としています。
あなたのウェブサイトを訪問したユーザーにプッシュメッセージを送信するためには、ユーザーがウェブブラウザの「通知権限」に同意する必要があります。
通知権限を拒否する場合、プッシュメッセージを送信することができません。
Vivoldiが提供するJavaScript SDKを貴社のウェブサイトにインストールすると、ユーザーがウェブサイトに訪問した際、ウェブブラウザで「通知権限」に関するポップアップウィンドウを表示します。
ユーザーが許可に同意すると、ダッシュボードの「プッシュメッセージ -> ウェブサイトのプッシュ送信」ページに通知データがリストに表示されます。
もし、100人のユーザーがあなたのウェブサイトで通知権限に同意した場合、100個のデータがリストに表示されます。
ダッシュボードからプッシュメッセージを送信すると、リストに表示されているすべてのユーザーにメッセージが送信されます。
Vivoldiが提供するJavaScript SDKのインストールは誰でもできるので、ユーザーデータを収集することができます。
しかし、プッシュメッセージを送信するためには金額がチャージされている必要があります。
プッシュメッセージの送信に対する費用は送信件当たり10ウォンであり、月額定額制を申し込むと回数制限なく無制限に送信が可能です。
JavaScript SDKのインストールは<head>...</head>の間に追加するだけです。
<html>
<head>
<title>example page</title>
<script src="https://opencdn.vivoldi.com/js/webpush.min.js?ver=202411181" type="text/javascript"></script>
<script>
const apiKey = 'oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'; // your api key
const publicKey = 'XXXXXYTRlpG8mXXXXXiuBZ6BtjyOfgPsDArFYWF2PxZbY4egmDNias1gEfN_5wftScr39K8BbcjXXXXX'; // "푸시 메시지 -> 도메인 관리" 페이지에서 등록한 도메인의 Public Key
const params = {apiKey:apiKey, publicKey:publicKey};
webpush.register(params); // 알림 권한 팝업 창 띄우기 (이미 권한을 허용하였다면 팝업이 표시되지 않습니다)
</script>
</head>
<body>
.
.
.
</body>
</html>
API Keyはダッシュボードの「開発者API」ページで作成することができ、publicKeyは「プッシュメッセージ -> ドメイン管理」ページでドメインを登録するとリストで確認することができます。
上記のサンプルのように、ウェブページの読み込み時にスクリプトがすぐに実行されると、ウェブブラウザで通知権限ポップアップウィンドウを表示せずに自動的にブロックする可能性が高いです。
(グーグルクロムブラウザを除く)
そのため、ページにボタンを追加し、ボタンのonclickイベントに該当スクリプトを挿入することをおすすめします。
すべての準備が完了したら、最後に、sw.min.jsファイルを新規作成し、あなたのウェブサイトのrootにアップロードしてください。
例: https://example.com/sw.min.js
上記のパスでアクセスした時、スクリプトがウェブブラウザに表示されなければ、正常に通知が作動します。
新しく作ったsw.min.jsファイルに下記のコードをコピーして貼り付けてください。
'use strict';const a0_0x51b6dd=a0_0x3e4e;(function(_0x455f80,_0x52a324){const _0x42ada9=a0_0x3e4e,_0x54a984=_0x455f80();while(!![]){try{const _0x379b56=parseInt(_0x42ada9(0x1df))/0x1*(parseInt(_0x42ada9(0x1c8))/0x2)+parseInt(_0x42ada9(0x1ce))/0x3*(-parseInt(_0x42ada9(0x1ca))/0x4)+parseInt(_0x42ada9(0x1d4))/0x5+parseInt(_0x42ada9(0x1d2))/0x6+-parseInt(_0x42ada9(0x1d5))/0x7*(-parseInt(_0x42ada9(0x1cb))/0x8)+-parseInt(_0x42ada9(0x1dc))/0x9+-parseInt(_0x42ada9(0x1c7))/0xa;if(_0x379b56===_0x52a324)break;else _0x54a984['push'](_0x54a984['shift']());}catch(_0x53d562){_0x54a984['push'](_0x54a984['shift']());}}}(a0_0x4326,0x30e43));self[a0_0x51b6dd(0x1c1)](a0_0x51b6dd(0x1de),function(_0x5de01b){const _0x12a008=a0_0x51b6dd,_0x4c6a51=JSON[_0x12a008(0x1c6)](_0x5de01b['data'][_0x12a008(0x1d0)]()),_0x370b6a=navigator[_0x12a008(0x1e1)],_0x1189f4=_0x370b6a==='ko'||_0x370b6a===_0x12a008(0x1c2),_0xf41fb1={'tag':_0x12a008(0x1d8),'renotify':!![],'body':_0x4c6a51[_0x12a008(0x1c5)],'icon':_0x4c6a51[_0x12a008(0x1d1)],'badge':_0x4c6a51[_0x12a008(0x1db)],'requireInteraction':!![],'vibrate':[0x12c,0x64,0x190,0xc8,0x1f4],'data':_0x4c6a51,'actions':[{'action':'go','type':_0x12a008(0x1cd),'title':_0x1189f4?_0x12a008(0x1d9):'GO'},{'action':_0x12a008(0x1d6),'type':_0x12a008(0x1cd),'title':_0x1189f4?'닫기':_0x12a008(0x1d7)}]};_0x4c6a51[_0x12a008(0x1cc)]&&(_0xf41fb1[_0x12a008(0x1cc)]=_0x4c6a51[_0x12a008(0x1cc)]),_0x5de01b['waitUntil'](self['registration']['showNotification'](_0x4c6a51[_0x12a008(0x1dd)],_0xf41fb1));}),self[a0_0x51b6dd(0x1c1)](a0_0x51b6dd(0x1c9),function(_0x54c778){const _0x251318=a0_0x51b6dd;_0x54c778['notification'][_0x251318(0x1d6)]();switch(_0x54c778[_0x251318(0x1c4)]){case'go':_0x54c778[_0x251318(0x1cf)](clients[_0x251318(0x1d3)](_0x54c778['notification'][_0x251318(0x1c3)][_0x251318(0x1e0)]));break;case'close':break;default:_0x54c778[_0x251318(0x1cf)](clients[_0x251318(0x1d3)](_0x54c778[_0x251318(0x1da)]['data'][_0x251318(0x1e0)]));}});function a0_0x3e4e(_0x45e3e2,_0x295c86){const _0x432642=a0_0x4326();return a0_0x3e4e=function(_0x3e4efa,_0x64bcb5){_0x3e4efa=_0x3e4efa-0x1c1;let _0x8300ae=_0x432642[_0x3e4efa];return _0x8300ae;},a0_0x3e4e(_0x45e3e2,_0x295c86);}function a0_0x4326(){const _0x561e9e=['2980062TMYstt','title','push','287tTaamn','url','language','addEventListener','ko-KR','data','action','body','parse','747230eHBXAQ','194YOCWVb','notificationclick','44frpzaF','16UnLXXA','image','button','56778ZtTfDI','waitUntil','text','icon','981276hWPfTB','openWindow','1160955tkUXYQ','1367485DBAToW','close','CLOSE','renotify','바로가기','notification','badge'];a0_0x4326=function(){return _0x561e9e;};return a0_0x4326();}
今、あなたのウェブサイトにアクセスすると、通知権限が表示されます。
通知権限を許可した時、Vivoldiダッシュボードの「ウェブサイトのプッシュ送信」ページに通知データが表示されるか確認してください。