GeniuslinkAPI

<back to all web services

PostLinkReportRequest

Requires Authentication
The following routes are available for this service:
POST/v4/report/links
POST/v3.5/report/links
<?php namespace dtos;

use DateTime;
use Exception;
use DateInterval;
use JsonSerializable;
use ServiceStack\{IReturn,IReturnVoid,IGet,IPost,IPut,IDelete,IPatch,IMeta,IHasSessionId,IHasBearerToken,IHasVersion};
use ServiceStack\{ICrud,ICreateDb,IUpdateDb,IPatchDb,IDeleteDb,ISaveDb,AuditBase,QueryDb,QueryDb2,QueryData,QueryData2,QueryResponse};
use ServiceStack\{ResponseStatus,ResponseError,EmptyResponse,IdResponse,ArrayList,KeyValuePair2,StringResponse,StringsResponse,Tuple2,Tuple3,ByteArray};
use ServiceStack\{JsonConverters,Returns,TypeContext};


enum GroupBy : string
{
    case Default = 'Default';
    case Retailer = 'Retailer';
    case Date = 'Date';
}

enum ReportType : string
{
    case ShortUrl = 'ShortUrl';
    case Group = 'Group';
    case User = 'User';
}

// @DataContract
class ReportRequest implements JsonSerializable
{
    public function __construct(
        // @DataMember(Name="items")
        /** @var array<string>|null */
        public ?array $items=null,

        // @DataMember(Name="groupBy")
        /** @var array<GroupBy>|null */
        public ?array $groupBy=null,

        // @DataMember(Name="attribute")
        /** @var string|null */
        public ?string $attribute=null,

        // @DataMember(Name="type")
        /** @var ReportType|null */
        public ?ReportType $type=null,

        // @DataMember(Name="fromStartUtcInclusive")
        /** @var DateTime */
        public DateTime $fromStartUtcInclusive=new DateTime(),

        // @DataMember(Name="fromEndUtcInclusive")
        /** @var DateTime */
        public DateTime $fromEndUtcInclusive=new DateTime(),

        // @DataMember(Name="retailers")
        /** @var array<string>|null */
        public ?array $retailers=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['items'])) $this->items = JsonConverters::fromArray('string', $o['items']);
        if (isset($o['groupBy'])) $this->groupBy = JsonConverters::fromArray('GroupBy', $o['groupBy']);
        if (isset($o['attribute'])) $this->attribute = $o['attribute'];
        if (isset($o['type'])) $this->type = JsonConverters::from('ReportType', $o['type']);
        if (isset($o['fromStartUtcInclusive'])) $this->fromStartUtcInclusive = JsonConverters::from('DateTime', $o['fromStartUtcInclusive']);
        if (isset($o['fromEndUtcInclusive'])) $this->fromEndUtcInclusive = JsonConverters::from('DateTime', $o['fromEndUtcInclusive']);
        if (isset($o['retailers'])) $this->retailers = JsonConverters::fromArray('string', $o['retailers']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->items)) $o['items'] = JsonConverters::toArray('string', $this->items);
        if (isset($this->groupBy)) $o['groupBy'] = JsonConverters::toArray('GroupBy', $this->groupBy);
        if (isset($this->attribute)) $o['attribute'] = $this->attribute;
        if (isset($this->type)) $o['type'] = JsonConverters::to('ReportType', $this->type);
        if (isset($this->fromStartUtcInclusive)) $o['fromStartUtcInclusive'] = JsonConverters::to('DateTime', $this->fromStartUtcInclusive);
        if (isset($this->fromEndUtcInclusive)) $o['fromEndUtcInclusive'] = JsonConverters::to('DateTime', $this->fromEndUtcInclusive);
        if (isset($this->retailers)) $o['retailers'] = JsonConverters::toArray('string', $this->retailers);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class PostLinkReportRequest implements JsonSerializable
{
    public function __construct(
        // @DataMember(Name="reports")
        /** @var array<ReportRequest>|null */
        public ?array $reports=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['reports'])) $this->reports = JsonConverters::fromArray('ReportRequest', $o['reports']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->reports)) $o['reports'] = JsonConverters::toArray('ReportRequest', $this->reports);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class Item implements JsonSerializable
{
    public function __construct(
        // @DataMember(Name="id")
        /** @var string|null */
        public ?string $id=null,

        // @DataMember(Name="displayName")
        /** @var string|null */
        public ?string $displayName=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['displayName'])) $this->displayName = $o['displayName'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->displayName)) $o['displayName'] = $this->displayName;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class ReportData implements JsonSerializable
{
    public function __construct(
        // @DataMember(Name="id")
        /** @var string|null */
        public ?string $id=null,

        // @DataMember(Name="item")
        /** @var Item|null */
        public ?Item $item=null,

        // @DataMember(Name="totalClicks")
        /** @var int */
        public int $totalClicks=0,

        // @DataMember(Name="clicks")
        /** @var int */
        public int $clicks=0,

        // @DataMember(Name="junkClicks")
        /** @var int */
        public int $junkClicks=0,

        // @DataMember(Name="spiderClicks")
        /** @var int */
        public int $spiderClicks=0,

        // @DataMember(Name="dateUtc")
        /** @var DateTime */
        public DateTime $dateUtc=new DateTime()
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['id'])) $this->id = $o['id'];
        if (isset($o['item'])) $this->item = JsonConverters::from('Item', $o['item']);
        if (isset($o['totalClicks'])) $this->totalClicks = $o['totalClicks'];
        if (isset($o['clicks'])) $this->clicks = $o['clicks'];
        if (isset($o['junkClicks'])) $this->junkClicks = $o['junkClicks'];
        if (isset($o['spiderClicks'])) $this->spiderClicks = $o['spiderClicks'];
        if (isset($o['dateUtc'])) $this->dateUtc = JsonConverters::from('DateTime', $o['dateUtc']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->id)) $o['id'] = $this->id;
        if (isset($this->item)) $o['item'] = JsonConverters::to('Item', $this->item);
        if (isset($this->totalClicks)) $o['totalClicks'] = $this->totalClicks;
        if (isset($this->clicks)) $o['clicks'] = $this->clicks;
        if (isset($this->junkClicks)) $o['junkClicks'] = $this->junkClicks;
        if (isset($this->spiderClicks)) $o['spiderClicks'] = $this->spiderClicks;
        if (isset($this->dateUtc)) $o['dateUtc'] = JsonConverters::to('DateTime', $this->dateUtc);
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class Error implements JsonSerializable
{
    public function __construct(
        // @DataMember(Name="code")
        /** @var string|null */
        public ?string $code=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['code'])) $this->code = $o['code'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->code)) $o['code'] = $this->code;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class Report implements JsonSerializable
{
    public function __construct(
        // @DataMember(Name="data")
        /** @var array<ReportData>|null */
        public ?array $data=null,

        // @DataMember(Name="executionTimeMs")
        /** @var int */
        public int $executionTimeMs=0,

        // @DataMember(Name="totalItems")
        /** @var int */
        public int $totalItems=0,

        // @DataMember(Name="errors")
        /** @var array<Error>|null */
        public ?array $errors=null,

        // @DataMember(Name="request")
        /** @var ReportRequest|null */
        public ?ReportRequest $request=null,

        // @DataMember(Name="totalClicks")
        /** @var int */
        public int $totalClicks=0
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['data'])) $this->data = JsonConverters::fromArray('ReportData', $o['data']);
        if (isset($o['executionTimeMs'])) $this->executionTimeMs = $o['executionTimeMs'];
        if (isset($o['totalItems'])) $this->totalItems = $o['totalItems'];
        if (isset($o['errors'])) $this->errors = JsonConverters::fromArray('Error', $o['errors']);
        if (isset($o['request'])) $this->request = JsonConverters::from('ReportRequest', $o['request']);
        if (isset($o['totalClicks'])) $this->totalClicks = $o['totalClicks'];
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->data)) $o['data'] = JsonConverters::toArray('ReportData', $this->data);
        if (isset($this->executionTimeMs)) $o['executionTimeMs'] = $this->executionTimeMs;
        if (isset($this->totalItems)) $o['totalItems'] = $this->totalItems;
        if (isset($this->errors)) $o['errors'] = JsonConverters::toArray('Error', $this->errors);
        if (isset($this->request)) $o['request'] = JsonConverters::to('ReportRequest', $this->request);
        if (isset($this->totalClicks)) $o['totalClicks'] = $this->totalClicks;
        return empty($o) ? new class(){} : $o;
    }
}

// @DataContract
class PostLinkReportResponse implements JsonSerializable
{
    public function __construct(
        // @DataMember(Name="responseStatus")
        /** @var ResponseStatus|null */
        public ?ResponseStatus $responseStatus=null,

        // @DataMember(Name="reports")
        /** @var array<Report>|null */
        public ?array $reports=null
    ) {
    }

    /** @throws Exception */
    public function fromMap($o): void {
        if (isset($o['responseStatus'])) $this->responseStatus = JsonConverters::from('ResponseStatus', $o['responseStatus']);
        if (isset($o['reports'])) $this->reports = JsonConverters::fromArray('Report', $o['reports']);
    }
    
    /** @throws Exception */
    public function jsonSerialize(): mixed
    {
        $o = [];
        if (isset($this->responseStatus)) $o['responseStatus'] = JsonConverters::to('ResponseStatus', $this->responseStatus);
        if (isset($this->reports)) $o['reports'] = JsonConverters::toArray('Report', $this->reports);
        return empty($o) ? new class(){} : $o;
    }
}

PHP PostLinkReportRequest DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml

HTTP + XML

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /v4/report/links HTTP/1.1 
Host: geniuslink-api-zane.dev.platform.georiot.com 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<PostLinkReportRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/GeniuslinkAPI.ServiceModel.V4.Reporting.Requests">
  <reports xmlns:d2p1="http://schemas.datacontract.org/2004/07/GeniuslinkAPI.ServiceModel.V4.Reporting.DTOs" i:nil="true" />
</PostLinkReportRequest>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<PostLinkReportResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/GeniuslinkAPI.ServiceModel.V4.Reporting.Responses">
  <reports xmlns:d2p1="http://schemas.datacontract.org/2004/07/GeniuslinkAPI.ServiceModel.V4.Reporting.DTOs" i:nil="true" />
  <responseStatus xmlns:d2p1="http://schemas.servicestack.net/types">
    <d2p1:ErrorCode>String</d2p1:ErrorCode>
    <d2p1:Message>String</d2p1:Message>
    <d2p1:StackTrace>String</d2p1:StackTrace>
    <d2p1:Errors>
      <d2p1:ResponseError>
        <d2p1:ErrorCode>String</d2p1:ErrorCode>
        <d2p1:FieldName>String</d2p1:FieldName>
        <d2p1:Message>String</d2p1:Message>
        <d2p1:Meta xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <d5p1:KeyValueOfstringstring>
            <d5p1:Key>String</d5p1:Key>
            <d5p1:Value>String</d5p1:Value>
          </d5p1:KeyValueOfstringstring>
        </d2p1:Meta>
      </d2p1:ResponseError>
    </d2p1:Errors>
    <d2p1:Meta xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
      <d3p1:KeyValueOfstringstring>
        <d3p1:Key>String</d3p1:Key>
        <d3p1:Value>String</d3p1:Value>
      </d3p1:KeyValueOfstringstring>
    </d2p1:Meta>
  </responseStatus>
</PostLinkReportResponse>