Vivoldi Short URL API für Entwickler

REST-API-Anleitung für die Erstellung von Kurz-URLs

Vivoldi bietet eine spezielle REST-API, die nahtlos in Ihre Website, mobile App oder Ihr internes System integriert werden kann.
Mit dieser API können Sie Kurz-URLs direkt von Ihrem Server oder Ihrer Anwendung aus erzeugen und verwalten, ohne auf das Vivoldi-Dashboard zuzugreifen.

Die REST-API ist so konzipiert, dass sie mit einer breiten Palette von Programmiersprachen und Plattformen wie JavaScript, PHP, Java, Android und iOS funktioniert.
Bevor Sie die API verwenden, müssen Sie einen API-Schlüssel generieren und ihn sicher aufbewahren, ohne ihn Dritten zugänglich zu machen.

API-Schlüssel können einmal im Monat aktualisiert werden, wobei bestehende Kurz-URLs unberührt bleiben.
Alle Nutzer, einschließlich derjenigen mit dem kostenlosen Tarif, können auf die API zugreifen, aber die Häufigkeit der Anfragen und die Antwortgeschwindigkeit können je nach Tarif variieren.

Wenn Sie beim Aufrufen der API einen HTTP 403-Fehler erhalten, geben Sie bitte einen eindeutigen User-Agent-Wert in Ihrem Anfrage-Header an.
Vivoldi blockiert aktiv böswillige Crawler und Bots und unterhält eine interne schwarze Liste von IP-Adressen.
Um eine stabile API-Kommunikation zu gewährleisten, verwenden Sie Ihren Firmen- oder Markennamen (in Englisch) als User-Agent-String.

Vivoldi kann Server während der Bereitstellung von Funktionen, Sicherheitspatches oder Systemwartung neu starten.
Um Unterbrechungen zu vermeiden, empfehlen wir dringend, eine Wiederholungslogik für alle API-Anfragen zu implementieren.

Vivoldi Short URL API für Entwickler

Wie man die API aufruft

Request:
Host: https://vivoldi.com/api HTTP/1.1
Authorization: APIKey {Your API Key}
Content-type: application/json
Fügen Sie einfach Authorisation und Content-type zu Ihrem Http-Header hinzu und rufen Sie die API auf.
Response:
{
    "code": 0,
    "message": "",
    "result": Object
}
code - Der Antwortcode, wobei 0 ein Erfolg und jeder andere Wert ein Fehlercode ist.
message - Die Antwortnachricht; eine Fehlermeldung wird zurückgegeben, wenn der Antwortcode ungleich Null ist.
result - Der Antwortwert, der je nach API-Typ als Zeichen oder JSON-Objekt zurückgegeben wird.
Bitte kontaktieren Sie Vivoldi, wenn Sie Verbesserungen oder Änderungen an der REST API benötigen.

Link erstellen

Wenn Sie einen einzelnen kurzen Link erstellen möchten, können Sie ihn ganz einfach mit dieser API erzeugen.
Wenn Sie mehrere Links auf einmal erstellen möchten, versuchen Sie es mit der API für die Erstellung von Massenlinks.
Sie können Links auch schnell über das Menü "Bulk Link Generator" im Dashboard erstellen.

Für Nutzer des kostenlosen Tarifs sind die API-Aufrufe auf 10 Anfragen pro Minute begrenzt.
Wenn Sie ein höheres Volumen benötigen, sollten Sie ein Upgrade auf einen kostenpflichtigen Plan in Erwägung ziehen, um erweiterten Zugang zu erhalten.

Jeder Kurzlink enthält automatisch einen QR-Code, der über das URL-Format `vvd.bz/[linkId]/qr` aufgerufen werden kann.
Um die Größe des QR-Codes anzupassen, fügen Sie einfach den Parameter `size` an die URL an.
Verwenden Sie zum Beispiel `vvd.bz/[linkId]/qr?size=200`, um einen QR-Code mit einer Größe von 200 Pixeln zu erzeugen.

Request:
Post /api/link/v2/create HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Request:
FelderFeldbeschreibungenBeschreibungErforderlichTyp
urlLange URL Die lange URL, zu der weitergeleitet wird, wenn der Kurzlink angeklickt wird.
Bis zu 3.000 Byte möglich.
string
domainDomain Wenn leer, wird automatisch die Domain vvd.bz verwendet.
Der Wert muss mit “https://” angegeben werden. Ist “brandLinkId” auf “Y” gesetzt, nutze “https://vvd.im”.
Wenn du deine eigene Domain mit Vivoldi verknüpft hast, kannst du sie hier eintragen.
Beispiel: https://vvd.bz
string
redirectTypeWeiterleitungstyp Legt fest, wie von Kurz-URL auf Lang-URL weitergeleitet wird.
Wähle 200, 301 oder 302 als HTTP-Statuscode. Standardwert: 302
Mehr Infos zu Weiterleitungsmethoden findest du auf der “Glossar”-Seite.
int
grpIdxGruppen-ID Die Angabe einer Gruppen-ID verknüpft den Link mit dieser Gruppe.
Die GroupID erhältst du über die "Gruppenliste"-API.
int
brandLinkIdBrand Link ID Bei Angabe eines Werts wird der Link mit dieser ID erstellt.
(Wenn gesetzt, ist die Domain vvd.im statt vvd.bz.)
Bei leerem Wert wird die Link-ID automatisch generiert.
string
ttlLink-Titel Wenn leer, wird der Seitentitel der langen URL gespeichert.
Bei leerem Wert wird die lange URL aufgerufen und HTML geparst, daher bei langsamer Antwort besser einen Titel angeben.
string
descriptionMeta-Beschreibung Du kannst das Meta-Description-Tag der Seite setzen, wenn “redirectType” auf “200” steht.
Bei “301”, “302” usw. wird dieser Wert ignoriert.
string
memoNotizen Du kannst hier interne Informationen für die Verwaltung eintragen. Sie sind für Nutzer nicht sichtbar. string
notfSubscYnPush-Link Bei Wert Y erscheint beim Klick auf den Link zuerst ein Web-Push-Popup, bevor weitergeleitet wird. Push-Nachrichten können an alle Nutzer mit Erlaubnis gesendet werden.
Wenn abgelehnt oder geschlossen, wird direkt weitergeleitet.
Standardwert (bei leer): N
Mehr unter Web Push-Funktionsseite.
Y oder N
clksIpFilteringYnIP-Filter für Klicks Bei Y wird der Klickzähler für die gleiche IP in 3 Tagen nur einmal erhöht.
Ab Tag 4 werden neue Klicks gezählt.
Diese Option ist nur bei Link-Erstellung einstellbar, später nicht mehr änderbar.
Funktion ab Personal-Tarif verfügbar.
Y oder N
pushNotifyYnPush-Benachrichtigungen Bei Y erhältst du Push-Nachrichten auf Mobilgeräte mit Vivoldi-App, wenn die Klickzahl (gemäß Einstellungen unter “Einstellungen -> Präferenzen”) erreicht ist.
Verfügbar ab Personal-Tarif.
Y oder N
mailNotifyYnE-Mail-Benachrichtigungen Bei Y erhältst du Infos zur Klickzahl per E-Mail, wenn die Zielzahl erreicht ist.
Verfügbar ab Personal-Tarif.
Y oder N
delYmdLink-Löschdatum Nach dem eingestellten Datum wird der Link automatisch entfernt.
Löschintervall: stündlich
Beispiel: 2025-12-31
Date
Examples:
<!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")));
                        }
                    }
                }
            }
        }
    }
}
Response:
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
    "code":0,
    "message":"",
    "result":"https://vvd.bz/jH3d"
}
Response:
FelderBeschreibungTyp
codeAntwortcode (0:Erfolg)int
messageDie Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist.string
resultAntwortwert (verkürzter Link)string

Bulk-Links erstellen

Erstellen Sie mehrere verkürzte Links auf einmal.
Wenn Sie eine große Anzahl von Links auf einmal erstellen möchten, verwenden Sie das Menü "Massenlinks erstellen" im Dashboard.

Sie können nur eine begrenzte Anzahl von Links auf einmal erstellen, und die Grenzen pro Plan sind wie folgt
Wenn Sie 3.000 Links erstellen möchten, müssen Sie diese API mehrfach aufrufen.

Persönlicher Plan: Bis zu 200
Premium-Tarif: bis zu 500
Business-Tarif: bis zu 1.000

Diese API ist ab dem Personal-Tarif verfügbar.

Request:
Post /api/link/v1/createBulk HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Request:
FelderTyp
links
FelderFeldbeschreibungenBeschreibungErforderlichTyp
urlLange URL Die lange URL, zu der weitergeleitet wird, wenn der Kurzlink angeklickt wird.
Bis zu 3.000 Byte möglich.
string
domainDomain Wenn leer, wird automatisch die Domain vvd.bz verwendet.
Der Wert muss mit “https://” angegeben werden. Ist “brandLinkId” auf “Y” gesetzt, nutze “https://vvd.im”.
Wenn du deine eigene Domain mit Vivoldi verknüpft hast, kannst du sie hier eintragen.
Beispiel: https://vvd.bz
string
redirectTypeWeiterleitungstyp Legt fest, wie von Kurz-URL auf Lang-URL weitergeleitet wird.
Wähle 200, 301 oder 302 als HTTP-Statuscode. Standardwert: 302
Mehr Infos zu Weiterleitungsmethoden findest du auf der “Glossar”-Seite.
int
grpIdxGruppen-ID Die Angabe einer Gruppen-ID verknüpft den Link mit dieser Gruppe.
Die GroupID erhältst du über die "Gruppenliste"-API.
int
brandLinkIdBrand Link ID Bei Angabe eines Werts wird der Link mit dieser ID erstellt.
(Wenn gesetzt, ist die Domain vvd.im statt vvd.bz.)
Bei leerem Wert wird die Link-ID automatisch generiert.
string
ttlLink-Titel Wenn leer, wird der Seitentitel der langen URL gespeichert.
Bei leerem Wert wird die lange URL aufgerufen und HTML geparst, daher bei langsamer Antwort besser einen Titel angeben.
string
descriptionMeta-Beschreibung Du kannst das Meta-Description-Tag der Seite setzen, wenn “redirectType” auf “200” steht.
Bei “301”, “302” usw. wird dieser Wert ignoriert.
string
memoNotizen Du kannst hier interne Informationen für die Verwaltung eintragen. Sie sind für Nutzer nicht sichtbar. string
notfSubscYnPush-Link Bei Wert Y erscheint beim Klick auf den Link zuerst ein Web-Push-Popup, bevor weitergeleitet wird. Push-Nachrichten können an alle Nutzer mit Erlaubnis gesendet werden.
Wenn abgelehnt oder geschlossen, wird direkt weitergeleitet.
Standardwert (bei leer): N
Mehr unter Web Push-Funktionsseite.
Y oder N
clksIpFilteringYnIP-Filter für Klicks Bei Y wird der Klickzähler für die gleiche IP in 3 Tagen nur einmal erhöht.
Ab Tag 4 werden neue Klicks gezählt.
Diese Option ist nur bei Link-Erstellung einstellbar, später nicht mehr änderbar.
Funktion ab Personal-Tarif verfügbar.
Y oder N
pushNotifyYnPush-Benachrichtigungen Bei Y erhältst du Push-Nachrichten auf Mobilgeräte mit Vivoldi-App, wenn die Klickzahl (gemäß Einstellungen unter “Einstellungen -> Präferenzen”) erreicht ist.
Verfügbar ab Personal-Tarif.
Y oder N
mailNotifyYnE-Mail-Benachrichtigungen Bei Y erhältst du Infos zur Klickzahl per E-Mail, wenn die Zielzahl erreicht ist.
Verfügbar ab Personal-Tarif.
Y oder N
delYmdLink-Löschdatum Nach dem eingestellten Datum wird der Link automatisch entfernt.
Löschintervall: stündlich
Beispiel: 2025-12-31
Date
array
Examples:
<!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="btnCreateBulkLinks" type="button">Create bulk links</button>
</form>

<script type="text/javascript">
$(function(){
	$("#btnCreateBulkLinks").on('click', function(evt){
		evt.preventDefault();
		const params = {
			'links': [
				{'url':'https://google.com','domain':'https://vvd.bz'},
				{'url':'https://facebook.com','domain':'https://vvd.bz'},
				{'url':'https://twitter.com','domain':'https://vvd.bz'}
			]
		};
		$.ajax({
			type: 'POST',
			url: 'https://vivoldi.com/api/link/v1/createBulk',
			data: JSON.stringify(params),
			headers: {'Authorization':'APIKey oc3w9m4ytso9mv5e8yse9XXXXXXXXXX'},
			contentType: 'application/json; charset=utf-8',
			dataType: 'json',
			timeout: 10000
		}).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
$url = "https://vivoldi.com/api/link/v1/createBulk";
$params = array (
	"links" => array(
		array(
			"url" => "https://google.com",
			"domain" => "https://vvd.bz"
		),
		array(
			"url" => "https://facebook.com",
			"domain" => "https://vvd.bz"
		),
		array(
			"url" => "https://twitter.com",
			"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.json.JSONArray;
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 link1 = new JSONObject();
			link1.put("url", "https://google.com").put("domain", "https://vvd.bz");

			JSONObject link2 = new JSONObject();
			link2.put("url", "https://facebook.com").put("domain", "https://vvd.bz");

			JSONObject link3 = new JSONObject();
			link3.put("url", "https://twitter.com").put("domain", "https://vvd.bz");

			JSONArray links = new JSONArray();
			links.put(link1);
			links.put(link2);
			links.put(link3);

            JSONObject params = new JSONObject();
            params.put("links", links);

            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")));
                        }
                    }
                }
            }
        }
    }
}
Response:
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
    "code":0,
    "message":"",
    "result":[
        {shortUrl: "https://vvd.bz/bbuR", url: "https://google.com"},
        {shortUrl: "https://vvd.bz/bbuS", url: "https://facebook.com"},
        {shortUrl: "https://vvd.bz/bbuT", url: "https://twitter.com"}
    ]
}
Response:
FelderBeschreibungTyp
codeAntwortcode (0:Erfolg)int
messageDie Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist.string
resultAntwortwert (verkürzter Link)string

Einen Link bearbeiten

Bearbeiten Sie den von Ihnen erstellten Kurzlink.
Sie können den Link-Typ nur ändern, wenn es sich um eine URL handelt; andere Typen werden nicht geändert, selbst wenn der API-Aufruf erfolgreich ist.

Request:
Put /api/link/v2/edit HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Request:
FelderFeldbeschreibungenBeschreibungErforderlichTyp
linkIdLink-ID ID des erzeugten Kurzlinks.
Beispiel:
Ist die Kurzlink-Adresse "https://vvd.bz/fML", lautet die Link-ID fML.
string
domainDomain Die Domain der Kurzlink-Adresse.
Beispiel:
Ist die Kurzlink-Adresse "https://vvd.bz/fML", ist die Domain https://vvd.bz.
Wichtig: Es muss https:// oder http:// eingegeben werden.
Wird eine andere Domain als die des erzeugten Links angegeben, tritt ein Fehler auf.
string
redirectTypeWeiterleitungstyp Bestimmt, wie von der Kurz- zur Lang-URL weitergeleitet wird.
HTTP-Statuscode: 200, 301 oder 302 möglich. Standardwert: 302.
Mehr Informationen findest du auf der Glossar-Seite.
int
grpIdxGruppen-ID Ändert die Gruppe des erzeugten Links.
Um die Gruppen-ID zu erfahren, nutze die API "Gruppenliste".
int
urlLange URL Ändert die lange URL.
Das Ändern der langen URL ist ab dem Premium-Tarif möglich.
string
ttlLinktitel Wenn leer, wird der Linktitel nicht geändert. string
descriptionMeta-Beschreibung Meta-Tag Beschreibung der Seite, wenn “redirectType” auf “200” steht.
Wird bei “301”, “302” usw. ignoriert.
string
memoNotizen Zusätzliche administrative Informationen, die nicht für Nutzer sichtbar sind.
Wenn leer, wird die Notiz nicht geändert.
string
notfSubscYnPush-Link Bei Y erscheint beim Klick ein Web-Push-Popup, bevor zur langen URL weitergeleitet wird. Falls Nutzer Push zugelassen haben, kannst du Push-Nachrichten an alle senden.
Wenn abgelehnt/geschlossen, sofort zur langen URL.
Ohne Wert ist N Standard.
Mehr zu Push-Links: hier klicken.
Y oder N
pushNotifyYnPush-Benachrichtigungen Bei Y erhältst du Push-Benachrichtigungen aufs Handy mit installierter Vivoldi-App, wenn die Klickzahl gemäß "Einstellungen -> Präferenzen" erreicht ist.
Funktion ab Personal-Tarif.
Y oder N
mailNotifyYnE-Mail-Benachrichtigungen Bei Y erhältst du bei Erreichen des Klickziels gemäß "Einstellungen -> Präferenzen" eine E-Mail-Benachrichtigung.
Funktion ab Personal-Tarif.
Y oder N
delYmdLink-Löschdatum Nach dem eingestellten Datum wird der Link automatisch gelöscht.
Löschzyklus: stündlich.
Beispiel: 2025-12-31
Date
Examples:
<!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")));
                        }
                    }
                }
            }
        }
	}
}
Response:
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
    "code":0,
    "message":""
}
Response:
FelderBeschreibungTyp
codeAntwortcode (0:Erfolg)int
messageDie Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist.string

Einen Link löschen

Löschen Sie den von Ihnen erstellten Kurzlink.

Request:
Delete /api/link/v1/remove HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Request:
FelderFeldbeschreibungenBeschreibungErforderlichTyp
linkIdLink-ID ID des generierten Kurzlinks.
Beispiel:
Ist die Kurzlink-Adresse "https://vvd.bz/fML", lautet die Link-ID fML.
URLEncode ist erforderlich, wenn eine Marken-Link-ID (selbst gesetzte Link-ID) verwendet wird und Sonderzeichen enthält.
string
domainDomain Die Domain der Kurzlink-Adresse.
Beispiel:
Ist die Kurzlink-Adresse "https://vvd.bz/fML", ist die Domain https://vvd.bz.
Wichtig: Es muss https:// oder http:// angegeben werden.
Wird eine andere Domain als die des Kurzlinks verwendet, tritt ein Fehler auf.
Bei einer Marken-Link-ID (selbst gesetzte Link-ID) ist die Domain https://vvd.im.
string
Examples:
<!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")));
                        }
                    }
                }
            }
        }
	}
}
Response:
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
    "code":0,
    "message":""
}
Response:
FelderBeschreibungTyp
codeAntwortcode (0:Erfolg)int
messageDie Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist.string

Klickstatistiken nach Tageszeit

Klicks und Klicker im Zeitverlauf für einen einzelnen Link anzeigen.

Diese API ist ab dem Business-Tarif verfügbar.

Request:
Get /api/statistics/v1/clicks-by-time HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Request:
필드필드 설명설명필수유형
linkId링크 ID 링크 ID로 통계를 조회합니다.
브랜드 링크(링크ID를 직접 설정)로 설정된 링크 중 특수문자가 포함되어 있으면 URLEncode가 필요합니다.
string
domain도메인 링크 도메인으로 목록을 조회합니다.
도메인 앞에 반드시 http:// 또는 https:// 값을 붙여야 합니다.
브랜드 링크(링크ID를 직접 설정)가 설정되어 있는 경우 도메인은 https://vvd.bz이 아닌 https://vvd.im 입니다.
string
ymd날짜 해당 날짜의 시간대별 클릭 수와 클릭 사람 수 목록을 조회합니다.
오늘로 부터 최대 7일 전 날짜만 입력할 수 있습니다.
예: 2024-06-14
string
Examples:
<!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")));
                        }
                    }
                }
            }
        }
	}
}
Response:
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,
        }
    ]
}
Response:
필드설명유형
code응답 코드 (0:성공)int
message응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨.string
result 통계 목록:
필드필드 설명설명유형
ymd날짜-string
hour시간00시 ~ 23시string
linkId링크 ID-string
domain도메인-string
acesCnt클릭 수링크 클릭 수int
pernCnt클릭 사람 수링크를 클릭한 사람 수int
array

Klickstatistik nach Datum

Sie können die Anzahl der Klicks auf einen einzelnen Link nach Datum und die Anzahl der Personen, die darauf geklickt haben, anzeigen.
Bei der Suche darf der Bereich der Start- und Enddaten nicht mehr als einen Monat betragen.

Diese API ist ab dem Business-Tarif verfügbar.

Request:
Get /api/statistics/v1/clicks-by-date HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Request:
필드필드 설명설명필수유형
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
Examples:
<!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")));
                        }
                    }
                }
            }
        }
	}
}
Response:
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,
        }
    ]
}
Response:
필드설명유형
code응답 코드 (0:성공)int
message응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨.string
result 통계 목록:
필드필드 설명설명유형
ymd날짜-string
linkId링크 ID-string
domain도메인-string
acesCnt클릭 수링크 클릭 수int
pernCnt클릭 사람 수링크를 클릭한 사람 수int
array

Gruppenliste

Ruft eine Liste der erstellten Linkgruppen ab.

Request:
Get /api/group/v1/list HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Request:
필드필드 설명설명필수유형
grpIdx그룹 ID 그룹 ID로 목록을 조회합니다. int
nm그룹 이름 그룹 이름을 설정하면 그룹 목록을 조회할 때 그룹 이름을 검색하여 조회합니다.
그룹 이름 검색은 equals 조회가 아닌 like 조회입니다.
string
Examples:
<!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")));
                        }
                    }
                }
            }
        }
	}
}
Response:
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"
        }
    ]
}
Response:
필드설명유형
code응답 코드 (0:성공)int
message응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨.string
result 그룹 목록:
필드필드 설명설명유형
idx그룹ID-int
nm이름-string
memo메모-string
linkCnt링크 수그룹에 연결된 링크 수int
blockOverseasSticsYn해외통계 차단Y:사용함, N:사용 안함Y or N
notfSubscYn푸시구독Y:사용함, N:사용 안함Y or N
kakaoNotifyYn클릭 수 카톡 알림Y:사용함, N:사용 안함Y or N
pushNotifyYn클릭 수 푸시 알림Y:사용함, N:사용 안함Y or N
mailNotifyYn클릭 수 메일 알림Y:사용함, N:사용 안함Y or N
clksIpFilteringYn클릭 수 IP 필터링Y:사용함, N:사용 안함Y or N
regYmdt생성 날짜그룹이 생성된 날짜Date
modYmdt수정 날짜그룹이 수정된 날짜Date
array

Validierung von Links mit Ablaufdaten, Passwörtern und maximal zulässigen Klicks

Diese API ist für den Premium-Tarif verfügbar.

Wenn Sie den Zugriff auf einen Link einschränken, legen Sie ein Ablaufdatum, ein Passwort und die maximal zulässige Anzahl von Klicks fest.
Wenn Benutzer auf einen von Vivoldi generierten Link klicken, ist das in Ordnung, aber wenn sie direkt zu einer langen URL in ihrem Browser gehen, gibt es keine Möglichkeit, sie zu validieren.
Vivoldi bietet ein separates JavaScript-SDK, um dieses Problem zu lösen.

Wenn Sie das SDK zu einer Seite mit einem langen Link hinzufügen, ruft das SDK die Informationen des Links ab und überprüft das Ablaufdatum, das Passwort und die maximal zulässige Anzahl von Klicks.
Leiten Sie auf den Vivoldi-Kurzlink zurück oder blockieren Sie den Zugriff.

Fügen Sie das von Vivoldi bereitgestellte Skript in Ihre Veranstaltungs- oder Aktionsseite zwischen den ... ein und validieren Sie es einfach mit nur einer Zeile Code.

Fügen Sie das Skript von Vivoldi wie unten gezeigt in Ihre Seite ein:

<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>
Request:
Get /api/validate/v1/link HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/x-www-form-urlencoded
Request 항목 설명:
필드필드 설명설명필수유형
linkId링크 ID 유효기간, 비밀번호, 최대 클릭 허용 수가 설정된 링크의 ID string
domain도메인 생성된 링크의 도메인 string
Examples:
<!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")));
                        }
                    }
                }
            }
        }
	}
}
Response:
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"
    }
}
Response 항목 설명:
필드설명유형
code응답 코드 (0:성공)int
message응답 메시지, 응답 코드가 0이 아닐 경우 관련 메시지가 리턴됨.string
result
필드필드 설명설명유형
linkId링크ID-string
domain도메인-string
expireUseYn유효기간 설정여부 Y:유효기간 설정됨, N:유효기간이 설정되지 않음.
링크 그룹에 유효기간이 설정되어 있을 경우 링크의 유효기간은 무시됩니다.
Y or N
expireYn유효기간 만료여부Y:유효기간 만료됨, N:유효기간이 만료되지 않음Y or N
expireUrl유효기간 만료URL 유효기간이 만료될 경우 이동될 URL
링크 그룹에 유효기간 만료URL이 설정된 경우 링크의 만료URL은 무시됩니다.
string
acesMaxUseYn최대 클릭 허용 수 설정 여부 Y:최대 클릭 허용 수가 설정됨, N:최대 클릭 허용 수가 설정되지 않음.
링크 그룹에 최대 클릭 허용 수가 설정된 경우 링크의 허용 수 설정는 무시됩니다.
Y or N
acesMaxYn최대 클릭 허용 수 초과여부Y:최대 클릭 허용 수 초과됨, N:최대 클릭 허용 수 초과안됨Y or N
acesMaxCnt최대 클릭 허용 수설정된 최대 클릭 허용 수int
acesCnt링크 클릭 수현재까지 클릭된 수int
pernCnt링크 사람 수클릭한 사람 수int
agentKey사용자 키 값이 존재할 경우 비볼디의 짧은 링크를 클릭한 상태입니다.
값이 없을 경우 브라우저에서 긴 URL로 바로 접속한 경우입니다.
값이 존재할 경우 3시간 후 자동으로 값이 초기화됩니다.
string
url단축URL비볼디의 짧은 링크string
pwdUseYn비밀번호 설정여부 Y: 비밀번호가 설정됨, N:비밀번호가 설정되지 않음
링크 그룹에 비밀번호가 설정된 경우 링크의 비밀번호는 무시됩니다.
Y or N
pwdConfirmYn비밀번호 인증 완료여부 Y: 사용자가 단축URL에 접속한 후 비밀번호를 입력하고 인증에 성공함.
N:브라우저에서 긴 URL로 접속하였거나 비밀번호 인증이 완료되지 않은 상태.
비밀번호 인증이 완료된 후 3시간이 경과하면 값이 N으로 처리되므로 다시 인증을 해야 합니다.
Y or N
object

Coupon erstellen

Diese API ist ab dem Tarif Personal verfügbar.

Erstellen Sie einen Rabattcoupon. Wenn Sie mehrere Gutscheine auf einmal erstellen möchten, können Sie diese im Dashboard erstellen.
Sie können über die API keine Gutscheinbilder hochladen.
In diesem Fall können Sie Gutscheinbilder hochladen, wenn Sie eine Gutscheingruppe im Dashboard erstellen und die Gruppe angeben, wenn Sie den Gutschein erstellen.
Wenn Sie bei der Erstellung eines Coupons eine Coupongruppe angeben, werden einige Einstellungen ignoriert und die Einstellungen in der Coupongruppe werden angewendet.

Request:
Post /api/coupon/v1/create HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Request:
FelderFeldbeschreibungenBeschreibungErforderlichTyp
cpnNo Eine 8 bis 16-stellige Gutscheinnummer aus Großbuchstaben und Zahlen. Sonderzeichen sind nicht erlaubt.
Wenn kein Wert eingegeben wird, wird die Gutscheinnummer vom System automatisch generiert.
string
grpIdx Gruppencoupons werden zur Verwaltung und Kategorisierung von Gutscheinen verwendet. Bei Überschneidung hat die Einstellung des Coupons Vorrang.
Die Gruppen-ID findest du auf der Gutschein-Gruppen-Seite im Dashboard.
Standardwert: 0
int
tmplIdx Vorlagen geben an, wofür der Gutschein ist, wie er verwendet wird und welche Hinweise gelten.
Die Template-ID findest du auf der Vorlagenseite für Gutscheine im Dashboard.
Standardwert: 0
int
nm Der Name des Gutscheins wird auf der Gutscheinseite angezeigt. string
discTypeIdx Lege den Rabatt-Typ (Prozentsatz oder Betrag) fest.
457: Prozent-Rabatt (%), 458: Betrag-Rabatt
Prozent-Rabatt: für prozentuale Rabatte.
Betrag-Rabatt: für Rabatte mit festen Beträgen.
int
disc Gib bei Prozent-Rabatt (457) einen Wert zwischen 1% und 100% ein.
Gib bei Betrag-Rabatt (458) den Rabattbetrag ein.
double
discCurrency Lege die Währung fest, wenn du einen Betrag-Rabatt (458) verwendest.
KRW: Südkoreanischer Won, USD: US-Dollar, JPY: Japanischer Yen, EUR: Euro.
Standardwert: KRW
string
strtYmd Lege das Startdatum für die Gültigkeit des Gutscheins fest.
10-stelliges Datum im Format jjjj-mm-tt.
Beispiel: 2024-10-01
date
endYmd Lege das Ablaufdatum des Gutscheins fest.
10-stelliges Datum im Format jjjj-mm-tt.
Beispiel: 2024-12-31
date
onsiteYn Wenn der Wert Y ist, wird auf der Gutscheinseite ein Button zum Einlösen angezeigt.
Der Nutzer zeigt den Gutschein im Laden vor und das Personal löst ihn ein.
Ideal für Filialgeschäfte.
Standardwert: N
Y or N
onsitePwd Wenn du ein Passwort festlegst, muss das Personal dieses beim Einlösen eingeben.
Der Nutzer kann den Gutschein nicht selbst einlösen.
string
memo Für interne Verwaltung der Gutscheine verwendbar.
Nicht für Nutzer sichtbar.
string
url Nach Eingabe einer URL erscheint auf der Gutscheinseite der Button „Gutschein einlösen“, der auf die hinterlegte URL verweist.
Ist ein Gutscheinbild hinterlegt, führt auch ein Klick auf das Bild zur URL.
string
useLimit Lege die maximale Anzahl Einlösungen pro Person fest.
Bei Nutzung der REST API von Vivoldi ist für Werte zwischen 2 und 5 die Nutzer-ID Pflicht.
Im Dashboard kannst du „Unbegrenzt“ oder „1-mal“ wählen.
Bei „Unbegrenzt“ kann der Gutschein beliebig oft eingelöst werden.
0: Unbegrenzt, 1: 1-mal, 2: 2-mal, 3: 3-mal, 4: 4-mal, 5: 5-mal
int
color Farbe des Gutscheintextes auf der Seite.
HEX-Wert mit bis zu 9 Stellen inkl. Transparenz.
Standardwert: #4F4F4FFF
string
background Hintergrundfarbe des Gutscheins auf der Seite.
HEX-Wert mit bis zu 9 Stellen inkl. Transparenz.
Standardwert: #FFFFFFFF
string
userId Dient zur Verwaltung, wer Gutscheine ausgestellt und eingelöst hat.
Bei einer Begrenzung von 2 bis 5 ist die Nutzer-ID Pflicht.
Meist ist das die Login-ID des Nutzers.
string
userNm Wenn der Empfänger des Gutscheins bekannt ist, gib hier den Namen an.
Dient zur Nachverfolgung von Ausgabe und Einlösung.
string
userPhnno Kontakt des Nutzers, der den Gutschein einlöst. string
userEml E-Mail-Adresse des Nutzers, der den Gutschein einlöst. string
userEtc1 Zusätzliche Nutzerinformationen für die interne Verwaltung. string
userEtc2 Zusätzliche Nutzerinformationen für die interne Verwaltung. string
Examples:
<!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")));
                        }
                    }
                }
            }
        }
    }
}
Response:
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
    "code":0,
    "message":"",
    "result":"ZJLF0399WQBEQZJM"
}
Response:
FelderBeschreibungTyp
codeAntwortcode (0:Erfolg)int
messageDie Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist.string
resultAntwortwert (Coupon-Nummer)string

Coupon bearbeiten

Diese API ist ab dem Tarif Personal verfügbar.

Ändern Sie die Informationen im erstellten Coupon.
Wenn Sie einem Coupon eine Gruppe zuweisen, werden einige Einstellungen ignoriert und die Einstellungen der Coupongruppe übernommen.
Bei Gutscheinen, die bereits eingelöst wurden, können Sie nur die "Notizen" bearbeiten, nicht aber die anderen Informationen.

Request:
Put /api/coupon/v1/edit HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Request:
FelderFeldbeschreibungenBeschreibungErforderlichTyp
cpnNo Die Gutscheinnummer, die Sie ändern möchten. Geben Sie nur die Gutscheinnummer ohne das Zeichen "-" ein. string
grpIdx Gutscheingruppen dienen zur Verwaltung der Kategorisierung von Gutscheinen. Wenn sowohl Gruppen- als auch Gutschein-Einstellungen vorhanden sind, werden die Gutschein-Einstellungen ignoriert.
Die Gruppen-ID (IDX) finden Sie auf der Gutschein-Gruppen-Seite im Dashboard.
Standardwert: 0
int
tmplIdx Gutscheinvorlagen werden verwendet, um Benutzern eine Beschreibung, Hinweise zur Nutzung und wichtige Hinweise für den Gutschein bereitzustellen.
Die Template-ID (IDX) finden Sie auf der Gutscheinvorlagen-Seite im Dashboard.
Standardwert: 0
int
nm Der Name des Gutscheins wird auf der Gutscheinseite angezeigt. string
discTypeIdx Legt den Rabatt-Typ für den Gutschein fest (Prozentsatz oder Betrag).
457: Prozentrabatt (%), 458: Betragsrabatt
Prozentrabatt: Wird verwendet, um einen Rabatt in Prozent anzugeben.
Betragsrabatt: Wird verwendet, um einen festen Betrag zu gewähren.
int
disc Wenn der Rabatt-Typ "Prozentsatz" (457) ist, geben Sie einen Wert zwischen 1% und 100% ein.
Wenn der Rabatt-Typ "Betrag" (458) ist, geben Sie den Rabattbetrag ein.
double
discCurrency Sie können die Währung einstellen, wenn der Rabatt-Typ "Betrag" (458) ist.
KRW: Südkoreanischer Won, USD: US-Dollar, JPY: Japanischer Yen, EUR: Euro.
Standardwert: KRW
string
strtYmd Das Startdatum des Gutschein-Gültigkeitszeitraums festlegen.
10-stelliger Wert im Format jjjj-mm-tt.
Beispiel: 2024-10-01
date
endYmd Das Ablaufdatum des Gutschein-Gültigkeitszeitraums festlegen.
10-stelliger Wert im Format jjjj-mm-tt.
Beispiel: 2024-12-31
date
onsiteYn Wenn dieser Wert Y ist, wird auf der Gutscheinseite ein Button zum Einlösen angezeigt.
Der Nutzer zeigt den Gutschein dem Personal, das den Gutschein dann einlöst. Dies ist besonders praktisch, wenn Sie ein Ladengeschäft betreiben.
Y or N
onsitePwd Wenn Sie ein Passwort festlegen, muss das Personal dieses beim Einlösen des Gutscheins eingeben.
Benutzer können den Gutschein nicht selbstständig einlösen.
string
memo Wird für die interne Verwaltung von Gutscheinen verwendet.
Notizen sind für Benutzer nicht sichtbar.
string
url Wenn Sie eine URL eingeben, erscheint auf der Gutscheinseite ein „Gutschein einlösen“-Button, der bei Klick auf die eingegebene URL weiterleitet.
Wenn ein Gutscheinbild hochgeladen wurde, führt auch ein Klick auf das Bild zur URL.
string
useLimit Lege fest, wie oft ein Gutschein pro Person verwendet werden kann.
Bei Verwendung der Vivoldi REST API zur Verarbeitung von Gutscheineinlösungen ist ein Wert zwischen 2 und 5 erforderlich.
In diesem Fall muss die Nutzer-ID angegeben werden.
Bei manueller Verwaltung im Dashboard können Sie "Unbegrenzt" oder "1 Mal" auswählen.
Wenn Sie "Unbegrenzt" wählen, kann der Gutschein beliebig oft eingelöst werden.
0: Unbegrenzt, 1: 1 Mal, 2: 2 Mal, 3: 3 Mal, 4: 4 Mal, 5: 5 Mal
int
color Legt die Farbe des Gutscheintextes auf der Gutscheinseite fest.
Muss als HEX-Wert mit bis zu 9 Zeichen (inklusive Transparenz) angegeben werden.
Standardwert: #4F4F4FFF
string
background Legt die Hintergrundfarbe des Gutscheins auf der Gutscheinseite fest.
Muss als HEX-Wert mit bis zu 9 Zeichen (inklusive Transparenz) angegeben werden.
Standardwert: #FFFFFFFF
string
userId Dient zur Verwaltung, wer einen Gutschein erhalten und eingelöst hat.
Wenn der Wert für die maximale Gutscheinverwendung pro Person zwischen 2 und 5 liegt, muss die Nutzer-ID angegeben werden.
In der Regel geben Sie die Login-ID des registrierten Nutzers Ihrer Website an.
string
userNm Wenn Sie bereits wissen, wer den Gutschein erhalten soll, geben Sie den Namen des Nutzers ein, der den Gutschein verwenden wird.
Dies ist für die Verwaltung der Ausgabe und Einlösung des Gutscheins erforderlich.
string
userPhnno Geben Sie die Kontaktdaten des Nutzers ein, der den Gutschein einlöst. string
userEml Geben Sie die E-Mail-Adresse des Nutzers ein, der den Gutschein einlöst. string
userEtc1 Geben Sie zusätzliche Informationen über den Nutzer für interne Verwaltungszwecke ein. string
userEtc2 Geben Sie zusätzliche Informationen über den Nutzer für interne Verwaltungszwecke ein. string
Examples:
<!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")));
                        }
                    }
                }
            }
        }
    }
}
Response:
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
    "code":0,
    "message":"",
    "result":null
}
Response:
FelderBeschreibungTyp
codeAntwortcode (0:Erfolg)int
messageDie Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist.string

Coupon löschen

Diese API ist ab dem Tarif Personal verfügbar.

Löschen Sie den erstellten Coupon.
Um mehrere Coupons auf einmal zu löschen, verwenden Sie das Dashboard.

Request:
Delete /api/coupon/v1/remove HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: -
Request:
FelderFeldbeschreibungenBeschreibungErforderlichTyp
cpnNoCoupon number Die zu löschende Gutscheinnummer. string
Examples:
<!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")));
                        }
                    }
                }
            }
        }
	}
}
Response:
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
    "code":0,
    "message":""
}
Response:
FelderBeschreibungTyp
codeAntwortcode (0:Erfolg)int
messageDie Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist.string

Kupon validieren

Diese API ist ab dem Tarif Personal verfügbar.

Wird verwendet, um zu prüfen und zu validieren, ob der Coupon gültig ist, bevor "Coupon einlösen" verarbeitet wird.
Überprüfen Sie die Gültigkeit des Gutscheins wie unten dargestellt.
  • Prüfen Sie das Ablaufdatum des Gutscheins. (Startdatum und Ablaufdatum)
  • Überprüfen Sie die maximale Anzahl von Gutscheinen pro Person.
  • Überprüfen Sie die Einlösung des Gutscheins.
Request:
Get /api/coupon/v1/validate HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Request 항목 설명:
FelderFeldbeschreibungenBeschreibungErforderlichTyp
cpnNoCoupon number Die zu validierende Gutscheinnummer.
Wenn die Validierung fehlschlägt, überprüfen Sie die Nachricht in der Antwort.
string
Examples:
<!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")));
                        }
                    }
                }
            }
        }
	}
}
Response:
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
    "code":0,
    "message":"",
    "result": null
}
Response 항목 설명:
FelderBeschreibungTyp
codeAntwortcode (0:Erfolg)int
messageDie Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist.string

Kupon verwenden

Diese API ist ab dem Tarif Personal verfügbar.

Während Sie die Verarbeitung von "Coupon einlösen" manuell in der Couponliste in Ihrem Dashboard verwalten können, können Sie diese API automatisieren, indem Sie sie aufrufen, wenn ein Nutzer einen Coupon auf Ihrer Website einlöst.

Request:
Put /api/coupon/v1/use HTTP/1.1
Host: https://vivoldi.com
Authorization: APIKey {Your API Key}
Content-type: application/json
Request:
FelderFeldbeschreibungenBeschreibungErforderlichTyp
cpnNoCoupon number Die „eingelöste“ Gutscheinnummer, die verarbeitet werden soll.
Geben Sie nur die Gutscheinnummer ohne das Zeichen „-“ ein.
string
onsitePwdOn-site coupon usage password Wenn für die Nutzung vor Ort ein Passwort festgelegt wurde, geben Sie das festgelegte Passwort ein.
Bei falschem Passwort kann der Gutschein nicht eingelöst werden.
string
userIdUser ID Dient zur Verwaltung, wer Gutscheine ausgestellt und eingelöst hat.
Wenn der Wert für die maximale Gutscheineinlösung pro Person zwischen 2 und 5 liegt, muss die Benutzer-ID angegeben werden.
Geben Sie in der Regel die Login-ID des registrierten Benutzers Ihrer Website ein.
string
memoNotes Sie können Notizen zur Verwaltung von Gutscheineinlösungen eingeben.
Geben Sie die IP-Adresse des Nutzers, die Seite und den Dienst ein, auf denen der Gutschein eingelöst wurde, sowie weitere Informationen.
Wenn die maximale Anzahl der Gutscheineinlösungen pro Person unbegrenzt ist, wissen Sie nicht, wer den Gutschein eingelöst hat – verwalten Sie dann nach Benutzername oder Notiz.
string
Examples:
<!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")));
                        }
                    }
                }
            }
        }
    }
}
Response:
HTTP/1.1 200 OK
Content-type: application/json;charset=UTF-8
{
    "code":0,
    "message":"",
    "result":null
}
Response:
FelderBeschreibungTyp
codeAntwortcode (0:Erfolg)int
messageDie Antwortnachricht oder eine zugehörige Nachricht, wenn der Antwortcode ungleich Null ist.string

Push-Nachrichten senden

Diese API ist unabhängig von Vivoldis URL-Verkürzungsdienst und richtet sich an jeden, der eine Website betreibt.

Um Push-Nachrichten an Nutzer zu senden, die Ihre Website besuchen, muss der Nutzer der "Benachrichtigungserlaubnis" in seinem Webbrowser zustimmen.
Wenn er die Benachrichtigungserlaubnis ablehnt, können Sie keine Push-Nachrichten versenden.

Nachdem Sie das von Vivoldi bereitgestellte JavaScript SDK auf Ihrer Website installiert haben, zeigt der Webbrowser ein Pop-up-Fenster für die "Benachrichtigungserlaubnis" an, wenn ein Nutzer Ihre Website besucht.
Wenn der Nutzer der Genehmigung zustimmt, werden die Benachrichtigungsdaten auf der Seite "Push-Nachrichten -> Website-Push senden" des Dashboards aufgeführt.
Wenn zum Beispiel 100 Benutzer den Benachrichtigungsberechtigungen auf Ihrer Website zugestimmt haben, werden 100 Daten in der Liste angezeigt.
Wenn Sie eine Push-Nachricht über das Dashboard senden, wird die Nachricht an alle in der Liste angezeigten Benutzer gesendet.

Jeder kann das von Vivoldi bereitgestellte JavaScript-SDK installieren, um Nutzerdaten zu sammeln.
Allerdings müssen Sie Geld auf Ihrem Konto haben, um Push-Nachrichten zu versenden.
Die Kosten für den Versand von Push-Nachrichten betragen 10 KRW pro Nachricht, oder Sie können ein monatliches Abonnement abschließen, um eine unbegrenzte Anzahl von Nachrichten zu versenden.

Die Installation des JavaScript-SDK ist so einfach, wie das Hinzufügen zwischen <head>...</head>.

<html>
<head>
<title>example page</title>
<script src="https://opencdn.vivoldi.com/js/webpush.min.js?v=202502051" 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-Schlüssel können auf der Seite "Developer API" in Ihrem Dashboard erstellt werden, und publicKey finden Sie in der Liste, sobald Sie Ihre Domain auf der Seite "Push Messages -> Domain Management" registriert haben.

Wenn alles fertig ist, müssen Sie als Letztes eine neue Datei sw.min.js erstellen und sie in das Stammverzeichnis Ihrer Website hochladen.
Zum Beispiel: https://example.com/sw.min.js

Wenn Sie auf den oben genannten Pfad zugreifen, sollte das Skript im Webbrowser angezeigt werden, damit die Benachrichtigung richtig funktioniert.
Kopieren Sie den nachstehenden Code und fügen Sie ihn in Ihre neu erstellte sw.min.js-Datei ein.

sw.min.js:
'use strict';const a0_0x5374e1=a0_0xe038;(function(_0x1227c0,_0x51a60b){const _0x31ab77=a0_0xe038,_0x20d84d=_0x1227c0();while(!![]){try{const _0x12de05=parseInt(_0x31ab77(0x189))/0x1+-parseInt(_0x31ab77(0x188))/0x2+-parseInt(_0x31ab77(0x175))/0x3+parseInt(_0x31ab77(0x196))/0x4+parseInt(_0x31ab77(0x191))/0x5*(parseInt(_0x31ab77(0x179))/0x6)+parseInt(_0x31ab77(0x190))/0x7*(-parseInt(_0x31ab77(0x18a))/0x8)+parseInt(_0x31ab77(0x181))/0x9*(parseInt(_0x31ab77(0x173))/0xa);if(_0x12de05===_0x51a60b)break;else _0x20d84d['push'](_0x20d84d['shift']());}catch(_0x40c5f5){_0x20d84d['push'](_0x20d84d['shift']());}}}(a0_0x3c7d,0xc9d27));function a0_0xe038(_0x596680,_0x1be660){const _0x3c7dc3=a0_0x3c7d();return a0_0xe038=function(_0xe03880,_0x22c065){_0xe03880=_0xe03880-0x170;let _0x16ce5f=_0x3c7dc3[_0xe03880];return _0x16ce5f;},a0_0xe038(_0x596680,_0x1be660);}function a0_0x3c7d(){const _0x45d9ad=['waitUntil','notification','20673aXYLrA','navigator','title','focus','icon','toLowerCase','image','168378lbyyZD','193689SqVukM','41896sLUVSk','macintosh','close','registration','userAgent','body','1253fKQvUq','2054765fkWElD','install','includes','openWindow','badge','4620004XrYmFj','notificationclick','ko-KR','url','showNotification','parse','바로가기','window','platform','mac','actions','1490bVkBER','action','1993722LznGRH','navigate','button','activate','12Yewkpl','push','matchAll','data','then','addEventListener'];a0_0x3c7d=function(){return _0x45d9ad;};return a0_0x3c7d();}self['addEventListener'](a0_0x5374e1(0x192),_0x220cef=>{self['skipWaiting']();}),self[a0_0x5374e1(0x17e)](a0_0x5374e1(0x178),_0x4e57ea=>{const _0x4e29f9=a0_0x5374e1;_0x4e57ea[_0x4e29f9(0x17f)](clients['claim']());}),self[a0_0x5374e1(0x17e)](a0_0x5374e1(0x17a),function(_0x5b8772){const _0x578b75=a0_0x5374e1,_0x6a0810=JSON[_0x578b75(0x19b)](_0x5b8772[_0x578b75(0x17c)]['text']()),_0x41c647=navigator['language'],_0x3709b8=_0x41c647==='ko'||_0x41c647===_0x578b75(0x198),_0x398015=self[_0x578b75(0x182)]['platform']['toLowerCase']()[_0x578b75(0x193)](_0x578b75(0x171)),_0x570dee=self[_0x578b75(0x182)]['userAgent']['toLowerCase']()[_0x578b75(0x193)](_0x578b75(0x18b)),_0x417e2c={'tag':'renotify','renotify':!![],'body':_0x6a0810[_0x578b75(0x18f)],'icon':_0x6a0810[_0x578b75(0x185)],'badge':_0x6a0810[_0x578b75(0x195)],'requireInteraction':!![],'vibrate':[0x12c,0x64,0x190,0xc8,0x1f4],'data':_0x6a0810,'actions':[{'action':'go','type':_0x578b75(0x177),'title':_0x3709b8?_0x578b75(0x19c):'GO'},{'action':_0x578b75(0x18c),'type':'button','title':_0x3709b8?'닫기':'CLOSE'}]};_0x6a0810[_0x578b75(0x187)]&&(_0x417e2c[_0x578b75(0x187)]=_0x6a0810[_0x578b75(0x187)]),(_0x398015||_0x570dee)&&delete _0x417e2c[_0x578b75(0x172)],_0x5b8772['waitUntil'](self[_0x578b75(0x18d)][_0x578b75(0x19a)](_0x6a0810[_0x578b75(0x183)],_0x417e2c));}),self[a0_0x5374e1(0x17e)](a0_0x5374e1(0x197),function(_0x278188){const _0x1737d2=a0_0x5374e1;_0x278188['notification'][_0x1737d2(0x18c)]();const _0x381024=self['navigator'][_0x1737d2(0x170)][_0x1737d2(0x186)]()[_0x1737d2(0x193)]('mac'),_0x419533=self[_0x1737d2(0x182)][_0x1737d2(0x18e)][_0x1737d2(0x186)]()[_0x1737d2(0x193)](_0x1737d2(0x18b));if(_0x381024||_0x419533)_0x278188[_0x1737d2(0x17f)](clients[_0x1737d2(0x17b)]({'type':_0x1737d2(0x19d)})[_0x1737d2(0x17d)](_0x55a8eb=>{const _0x25611a=_0x1737d2;_0x55a8eb['length']>0x0?(_0x55a8eb[0x0][_0x25611a(0x176)](_0x278188[_0x25611a(0x180)][_0x25611a(0x17c)][_0x25611a(0x199)]),_0x55a8eb[0x0][_0x25611a(0x184)]()):clients[_0x25611a(0x194)](_0x278188[_0x25611a(0x180)]['data'][_0x25611a(0x199)]);}));else switch(_0x278188[_0x1737d2(0x174)]){case'go':_0x278188[_0x1737d2(0x17f)](clients[_0x1737d2(0x194)](_0x278188[_0x1737d2(0x180)][_0x1737d2(0x17c)][_0x1737d2(0x199)]));break;case _0x1737d2(0x18c):break;default:_0x278188['waitUntil'](clients[_0x1737d2(0x194)](_0x278188[_0x1737d2(0x180)][_0x1737d2(0x17c)][_0x1737d2(0x199)]));}});

Wenn Sie nun auf Ihre Website zugreifen, sollten Sie die Benachrichtigungserlaubnis sehen.
Wenn Sie die Benachrichtigungserlaubnis erteilt haben, prüfen Sie, ob Sie auf der Seite "Website-Push-Versand" Ihres Vivoldi-Dashboards Benachrichtigungsdaten sehen.