Developers

API-Referenz für Entwickler

An API key is required for requests to be processed by the system. Once a user registers, an API key is automatically generated for this user.

Einstieg

Damit Anfragen vom System verarbeitet werden können, ist ein API-Schlüssel erforderlich. Sobald sich ein Benutzer registriert, wird automatisch ein API-Schlüssel für diesen Benutzer generiert. Der API-Schlüssel muss bei jeder Anfrage gesendet werden (siehe vollständiges Beispiel unten). Wenn der API-Schlüssel nicht gesendet wird oder abgelaufen ist, tritt ein Fehler auf. Bitte halten Sie Ihren API-Schlüssel geheim, um Missbrauch zu verhindern.

Authentifizierung

Um sich beim API-System zu authentifizieren, müssen Sie bei jeder Anfrage Ihren API-Schlüssel als Autorisierungs-Token senden. Sie können den Beispielcode unten sehen.

curl --location --request POST 'https://www.fragestellen.de/api/account' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \ 

Bewertungslimit

Unsere API verfügt über einen Ratenbegrenzer zum Schutz vor Anfragenspitzen, um die Stabilität zu maximieren. Unser Ratenbegrenzer ist derzeit auf 30 Anfragen pro 1 Minute begrenzt. Bitte beachten Sie, dass sich der Tarif je nach abonniertem Plan ändern kann.

Neben der Antwort werden mehrere Header gesendet, die untersucht werden können, um verschiedene Informationen über die Anfrage zu ermitteln.

X-RateLimit-Limit: 30X-RateLimit-Remaining: 29X-RateLimit-Reset: TIMESTAMP

Antwortbehandlung

Alle API-Antworten werden standardmäßig im JSON-Format zurückgegeben. Um diese in verwertbare Daten umzuwandeln, muss je nach Sprache die entsprechende Funktion verwendet werden. In PHP kann die Funktion json_decode() verwendet werden, um die Daten entweder in ein Objekt (Standard) oder ein Array (setze den zweiten Parameter auf true) umzuwandeln. Es ist sehr wichtig, den Fehlerschlüssel zu überprüfen, da dieser Auskunft darüber gibt, ob ein Fehler aufgetreten ist oder nicht. Sie können auch den Header-Code überprüfen.

{
    "error": 1,
    "message": "An error occurred"
}

Channels

List Channels

GET https://www.fragestellen.de/api/channels?limit=2&page=1

To get your channels via the API, you can use this endpoint. You can also filter data (See table for more info).

Parameter Beschreibung
limit (optional) Per page data result
page (optional) Current page request
curl --location --request GET 'https://www.fragestellen.de/api/channels?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "channels": [
            {
                "id": 1,
                "name": "Channel 1",
                "description": "Description of channel 1",
                "color": "#000000",
                "starred": true
            },
            {
                "id": 2,
                "name": "Channel 2",
                "description": "Description of channel 2",
                "color": "#FF0000",
                "starred": false
            }
        ]
    }
}

List Channel Items

GET https://www.fragestellen.de/api/channel/:id?limit=1&page=1

To get items in a select channels via the API, you can use this endpoint. You can also filter data (See table for more info).

Parameter Beschreibung
limit (optional) Per page data result
page (optional) Current page request
curl --location --request GET 'https://www.fragestellen.de/api/channel/:id?limit=1&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "items": [
            {
                "type": "links",
                "id": 1,
                "title": "My Sample Link",
                "preview": "https:\/\/google.com",
                "link": "https:\/\/www.fragestellen.de\/google",
                "date": "2022-05-12"
            },
            {
                "type": "bio",
                "id": 1,
                "title": "My Sample Bio",
                "preview": "https:\/\/www.fragestellen.de\/mybio",
                "link": "https:\/\/www.fragestellen.de\/mybio",
                "date": "2022-06-01"
            }
        ]
    }
}

Einen Kanal erstellen

POST https://www.fragestellen.de/api/channel/add

A channel can be added using this endpoint.

Parameter Beschreibung
name (required) Channel name
description (optional) Channel description
color (optional) Channel badge color (HEX)
starred (optional) Star the channel or not (true or false)
curl --location --request POST 'https://www.fragestellen.de/api/channel/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "New Channel",
    "description": "my new channel",
    "color": "#000000",
    "starred": true
}'

Serverantwort

{
    "error": 0,
    "id": 3,
    "name": "New Channel",
    "description": "my new channel",
    "color": "#000000",
    "starred": true
}

Assign an Item to a Channel

POST https://www.fragestellen.de/api/channel/:channelid/assign/:type/:itemid

An item can be assigned to any channel by sending a request with the channel id, item type (links, bio or qr) and item id.

Parameter Beschreibung
:channelid (required) Channel ID
:type (required) links or bio or qr
:itemid (required) Item ID
curl --location --request POST 'https://www.fragestellen.de/api/channel/:channelid/assign/:type/:itemid' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": 0,
    "message": "Item successfully added to the channel."
}

Update-Kanal

PUT https://www.fragestellen.de/api/channel/:id/update

To update a channel, you need to send a valid data in JSON via a PUT request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

Parameter Beschreibung
name (optional) Channel name
description (optional) Channel description
color (optional) Channel badge color (HEX)
starred (optional) Star the channel or not (true or false)
curl --location --request PUT 'https://www.fragestellen.de/api/channel/:id/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Acme Corp",
    "description": "channel for items for Acme Corp",
    "color": "#FFFFFF",
    "starred": false
}'

Serverantwort

{
    "error": 0,
    "message": "Channel has been updated successfully."
}

Delete Channel

DELETE https://www.fragestellen.de/api/channel/:id/delete

To delete a channel, you need to send a DELETE request. All items will be unassigned as well.

curl --location --request DELETE 'https://www.fragestellen.de/api/channel/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": 0,
    "message": "Channel has been deleted successfully."
}

Eigene Domains

List Branded Domains

GET https://www.fragestellen.de/api/domains?limit=2&page=1

To get your branded domains via the API, you can use this endpoint. You can also filter data (See table for more info).

Parameter Beschreibung
limit (optional) Per page data result
page (optional) Current page request
curl --location --request GET 'https://www.fragestellen.de/api/domains?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "domains": [
            {
                "id": 1,
                "domain": "https:\/\/domain1.com",
                "redirectroot": "https:\/\/rootdomain.com",
                "redirect404": "https:\/\/rootdomain.com\/404"
            },
            {
                "id": 2,
                "domain": "https:\/\/domain2.com",
                "redirectroot": "https:\/\/rootdomain2.com",
                "redirect404": "https:\/\/rootdomain2.com\/404"
            }
        ]
    }
}

Create a Branded Domain

POST https://www.fragestellen.de/api/domain/add

A domain can be added using this endpoint. Please make sure the domain is correctly pointed to our server.

Parameter Beschreibung
domain (required) Branded domain including http or https
redirectroot (optional) Root redirect when someone visits your domain
redirect404 (optional) Custom 404 redirect
curl --location --request POST 'https://www.fragestellen.de/api/domain/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "domain": "https:\/\/domain1.com",
    "redirectroot": "https:\/\/rootdomain.com",
    "redirect404": "https:\/\/rootdomain.com\/404"
}'

Serverantwort

{
    "error": 0,
    "id": 1
}

Domäne aktualisieren

PUT https://www.fragestellen.de/api/domain/:id/update

To update a branded domain, you need to send a valid data in JSON via a PUT request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

Parameter Beschreibung
redirectroot (optional) Root redirect when someone visits your domain
redirect404 (optional) Custom 404 redirect
curl --location --request PUT 'https://www.fragestellen.de/api/domain/:id/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "redirectroot": "https:\/\/rootdomain-new.com",
    "redirect404": "https:\/\/rootdomain-new.com\/404"
}'

Serverantwort

{
    "error": 0,
    "message": "Domain has been updated successfully."
}

Delete Domain

DELETE https://www.fragestellen.de/api/domain/:id/delete

To delete a domain, you need to send a DELETE request.

curl --location --request DELETE 'https://www.fragestellen.de/api/domain/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": 0,
    "message": "Domain has been deleted successfully."
}

List Campaigns

GET https://www.fragestellen.de/api/campaigns?limit=2&page=1

To get your campaigns via the API, you can use this endpoint. You can also filter data (See table for more info).

Parameter Beschreibung
limit (optional) Per page data result
page (optional) Current page request
curl --location --request GET 'https://www.fragestellen.de/api/campaigns?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "campaigns": [
            {
                "id": 1,
                "name": "Sample Campaign",
                "public": false,
                "rotator": false,
                "list": "https:\/\/domain.com\/u\/admin\/list-1"
            },
            {
                "id": 2,
                "domain": "Facebook Campaign",
                "public": true,
                "rotator": "https:\/\/domain.com\/r\/test",
                "list": "https:\/\/domain.com\/u\/admin\/test-2"
            }
        ]
    }
}

Erstelle eine Gruppe

POST https://www.fragestellen.de/api/campaign/add

A campaign can be added using this endpoint.

Parameter Beschreibung
name (optional) Campaign name
slug (optional) Rotator Slug
public (optional) Access
curl --location --request POST 'https://www.fragestellen.de/api/campaign/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "New Campaign",
    "slug": "new-campaign",
    "public": true
}'

Serverantwort

{
    "error": 0,
    "id": 3,
    "domain": "New Campaign",
    "public": true,
    "rotator": "https:\/\/domain.com\/r\/new-campaign",
    "list": "https:\/\/domain.com\/u\/admin\/new-campaign-3"
}
POST https://www.fragestellen.de/api/campaign/:campaignid/assign/:linkid

A short link can be assigned to a campaign using this endpoint. The endpoint requires the campaign ID and the short link ID.

curl --location --request POST 'https://www.fragestellen.de/api/campaign/:campaignid/assign/:linkid' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": 0,
    "message": "Link successfully added to the campaign."
}

Gruppeneinstellungen aktualisieren

PUT https://www.fragestellen.de/api/campaign/:id/update

To update a campaign, you need to send a valid data in JSON via a PUT request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

Parameter Beschreibung
name (required) Campaign name
slug (optional) Rotator Slug
public (optional) Access
curl --location --request PUT 'https://www.fragestellen.de/api/campaign/:id/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Twitter Campaign",
    "slug": "twitter-campaign",
    "public": true
}'

Serverantwort

{
    "error": 0,
    "id": 3,
    "domain": "Twitter Campaign",
    "public": true,
    "rotator": "https:\/\/domain.com\/r\/twitter-campaign",
    "list": "https:\/\/domain.com\/u\/admin\/twitter-campaign-3"
}

Delete Campaign

DELETE https://www.fragestellen.de/api/campaign/:id/delete

To delete a campaign, you need to send a DELETE request.

curl --location --request DELETE 'https://www.fragestellen.de/api/campaign/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": 0,
    "message": "Campaign has been deleted successfully."
}

Konto erstellen

GET https://www.fragestellen.de/api/account

Um Informationen über das Konto abzurufen, können Sie eine Anfrage an diesen Endpunkt senden und es werden Daten zum Konto zurückgegeben.

curl --location --request GET 'https://www.fragestellen.de/api/account' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": 0,
    "data": {
        "id": 1,
        "email": "sample@domain.com",
        "username": "sampleuser",
        "avatar": "https:\/\/domain.com\/content\/avatar.png",
        "status": "pro",
        "expires": "2022-11-15 15:00:00",
        "registered": "2020-11-10 18:01:43"
    }
}

Konto aktualisieren

PUT https://www.fragestellen.de/api/account/update

Um Informationen zum Konto zu aktualisieren, können Sie eine Anfrage an diesen Endpunkt senden und die Daten zum Konto werden aktualisiert.

curl --location --request PUT 'https://www.fragestellen.de/api/account/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "email": "newemail@google.com",
    "password": "NewPassword1"
}'

Serverantwort

{
    "error": 0,
    "message": "Account has been successfully updated."
}

Overlays

List CTA Overlays

GET https://www.fragestellen.de/api/overlay?limit=2&page=1

To get cta overlays via the API, you can use this endpoint. You can also filter data (See table for more info).

Parameter Beschreibung
limit (optional) Per page data result
page (optional) Current page request
curl --location --request GET 'https://www.fragestellen.de/api/overlay?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "cta": [
            {
                "id": 1,
                "type": "message",
                "name": "Product 1 Promo",
                "date": "2020-11-10 18:00:00"
            },
            {
                "id": 2,
                "type": "contact",
                "name": "Contact Page",
                "date": "2020-11-10 18:10:00"
            }
        ]
    }
}

QR-Codes

List QR codes

GET https://www.fragestellen.de/api/qr?limit=2&page=1

Um QR-Codes über die API abzurufen, kannst du diesen Endpunkt verwenden. Du kannst auch Daten filtern (siehe Tabelle für weitere Informationen).

Parameter Beschreibung
limit (optional) Per page data result
page (optional) Current page request
curl --location --request GET 'https://www.fragestellen.de/api/qr?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "qrs": [
            {
                "id": 2,
                "link": "https:\/\/www.fragestellen.de\/qr\/a2d5e",
                "scans": 0,
                "name": "Google",
                "date": "2020-11-10 18:01:43"
            },
            {
                "id": 1,
                "link": "https:\/\/www.fragestellen.de\/qr\/b9edfe",
                "scans": 5,
                "name": "Google Canada",
                "date": "2020-11-10 18:00:25"
            }
        ]
    }
}

Holen Sie sich einen einzigen QR-Code

GET https://www.fragestellen.de/api/qr/:id

Um Details zu einem einzelnen QR-Code über die API abzurufen, können Sie diesen Endpunkt verwenden.

curl --location --request GET 'https://www.fragestellen.de/api/qr/:id' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": 0,
    "details": {
        "id": 1,
        "link": "https:\/\/www.fragestellen.de\/qr\/b9edfe",
        "scans": 5,
        "name": "Google Canada",
        "date": "2020-11-10 18:00:25"
    },
    "data": {
        "clicks": 1,
        "uniqueClicks": 1,
        "topCountries": {
            "Unknown": "1"
        },
        "topReferrers": {
            "Direct, email and other": "1"
        },
        "topBrowsers": {
            "Chrome": "1"
        },
        "topOs": {
            "Windows 10": "1"
        },
        "socialCount": {
            "facebook": 0,
            "twitter": 0,
            "instagram": 0
        }
    }
}

QR-Code erstellen

POST https://www.fragestellen.de/api/qr/add

To create a QR Code, you need to send a valid data in JSON via a POST request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

Parameter Beschreibung
type (required) text | vcard | link | email | phone | sms | wifi
data (required) Data to be embedded inside the QR code. The data can be string or array depending on the type
background (optional) RGB color e.g. rgb(255,255,255)
foreground (optional) RGB color e.g. rgb(0,0,0)
logo (optional) Path to the logo either png or jpg
name (optional) QR Code name
curl --location --request POST 'https://www.fragestellen.de/api/qr/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type": "link",
    "data": "https:\/\/google.com",
    "background": "rgb(255,255,255)",
    "foreground": "rgb(0,0,0)",
    "logo": "https:\/\/site.com\/logo.png",
    "name": "QR Code API"
}'

Serverantwort

{
    "error": 0,
    "id": 3,
    "link": "https:\/\/www.fragestellen.de\/qr\/a58f79"
}

Update QR Code

PUT https://www.fragestellen.de/api/qr/:id/update

Um einen QR-Code zu aktualisieren, müssen Sie gültige Daten in JSON über eine PUT-Anfrage senden. Die Daten müssen wie unten gezeigt als Rohteil Ihrer Anfrage gesendet werden. Das folgende Beispiel zeigt alle Parameter, die Sie senden können, aber Sie müssen nicht alle senden (siehe Tabelle für weitere Informationen).

Parameter Beschreibung
data (required) Data to be embedded inside the QR code. The data can be string or array depending on the type
background (optional) RGB color e.g. rgb(255,255,255)
foreground (optional) RGB color e.g. rgb(0,0,0)
logo (optional) Path to the logo either png or jpg
curl --location --request PUT 'https://www.fragestellen.de/api/qr/:id/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type": "link",
    "data": "https:\/\/google.com",
    "background": "rgb(255,255,255)",
    "foreground": "rgb(0,0,0)",
    "logo": "https:\/\/site.com\/logo.png"
}'

Serverantwort

{
    "error": 0,
    "message": "QR has been updated successfully."
}

Löschen eines QR-Codes

DELETE https://www.fragestellen.de/api/qr/:id/delete

Um einen QR-Code zu löschen, müssen Sie eine DELETE-Anfrage senden.

curl --location --request DELETE 'https://www.fragestellen.de/api/qr/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": 0,
    "message": "QR Code has been deleted successfully."
}

Tracking-Pixel

List Pixels

GET https://www.fragestellen.de/api/pixels?limit=2&page=1

To get your pixels codes via the API, you can use this endpoint. You can also filter data (See table for more info).

Parameter Beschreibung
limit (optional) Per page data result
page (optional) Current page request
curl --location --request GET 'https://www.fragestellen.de/api/pixels?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "pixels": [
            {
                "id": 1,
                "type": "gtmpixel",
                "name": "GTM Pixel",
                "tag": "GA-123456789",
                "date": "2020-11-10 18:00:00"
            },
            {
                "id": 2,
                "type": "twitterpixel",
                "name": "Twitter Pixel",
                "tag": "1234567",
                "date": "2020-11-10 18:10:00"
            }
        ]
    }
}

Create a Pixel

POST https://www.fragestellen.de/api/pixel/add

A pixel can be created using this endpoint. You need to send the pixel type and the tag.

Parameter Beschreibung
type (required) gtmpixel | gapixel | fbpixel | adwordspixel | linkedinpixel | twitterpixel | adrollpixel | quorapixel | pinterest | bing | snapchat | reddit | tiktok
name (required) Custom name for your pixel
tag (required) The tag for the pixel
curl --location --request POST 'https://www.fragestellen.de/api/pixel/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type": "gtmpixel",
    "name": "My GTM",
    "tag": "GTM-ABCDE"
}'

Serverantwort

{
    "error": 0,
    "id": 1
}

Pixel aktualisieren

PUT https://www.fragestellen.de/api/pixel/:id/update

To update a pixel, you need to send a valid data in JSON via a PUT request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

Parameter Beschreibung
name (optional) Custom name for your pixel
tag (required) The tag for the pixel
curl --location --request PUT 'https://www.fragestellen.de/api/pixel/:id/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "My GTM",
    "tag": "GTM-ABCDE"
}'

Serverantwort

{
    "error": 0,
    "message": "Pixel has been updated successfully."
}

Delete Pixel

DELETE https://www.fragestellen.de/api/pixel/:id/delete

To delete a pixel, you need to send a DELETE request.

curl --location --request DELETE 'https://www.fragestellen.de/api/pixel/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": 0,
    "message": "Pixel has been deleted successfully."
}

Vorschaltseiten

List Custom Splash

GET https://www.fragestellen.de/api/splash?limit=2&page=1

To get Splash Pages via the API, you can use this endpoint. You can also filter data (See table for more info).

Parameter Beschreibung
limit (optional) Per page data result
page (optional) Current page request
curl --location --request GET 'https://www.fragestellen.de/api/splash?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Serverantwort

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "splash": [
            {
                "id": 1,
                "name": "Product 1 Promo",
                "date": "2020-11-10 18:00:00"
            },
            {
                "id": 2,
                "name": "Product 2 Promo",
                "date": "2020-11-10 18:10:00"
            }
        ]
    }
}