ProductAPI.Amazon

<back to all web services

PostProductSearchRequest

Requires Authentication
The following routes are available for this service:
POST/v1/search
import 'package:servicestack/servicestack.dart';

// @DataContract
class ProductIdentifiers implements IConvertible
{
    // @DataMember(Name="productGuid", EmitDefaultValue=false)
    String? productGuid;

    // @DataMember(Name="gtins", EmitDefaultValue=false)
    List<String>? gtins;

    // @DataMember(Name="mpns", EmitDefaultValue=false)
    List<String>? mpns;

    // @DataMember(Name="ean8", EmitDefaultValue=false)
    List<String>? ean8;

    // @DataMember(Name="ean13", EmitDefaultValue=false)
    List<String>? ean13;

    // @DataMember(Name="isbn9", EmitDefaultValue=false)
    List<String>? isbn9;

    // @DataMember(Name="isbn10", EmitDefaultValue=false)
    List<String>? isbn10;

    // @DataMember(Name="isbn13", EmitDefaultValue=false)
    List<String>? isbn13;

    // @DataMember(Name="itf14", EmitDefaultValue=false)
    List<String>? itf14;

    // @DataMember(Name="upc12", EmitDefaultValue=false)
    List<String>? upc12;

    ProductIdentifiers({this.productGuid,this.gtins,this.mpns,this.ean8,this.ean13,this.isbn9,this.isbn10,this.isbn13,this.itf14,this.upc12});
    ProductIdentifiers.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        productGuid = json['productGuid'];
        gtins = JsonConverters.fromJson(json['gtins'],'List<String>',context!);
        mpns = JsonConverters.fromJson(json['mpns'],'List<String>',context!);
        ean8 = JsonConverters.fromJson(json['ean8'],'List<String>',context!);
        ean13 = JsonConverters.fromJson(json['ean13'],'List<String>',context!);
        isbn9 = JsonConverters.fromJson(json['isbn9'],'List<String>',context!);
        isbn10 = JsonConverters.fromJson(json['isbn10'],'List<String>',context!);
        isbn13 = JsonConverters.fromJson(json['isbn13'],'List<String>',context!);
        itf14 = JsonConverters.fromJson(json['itF14'],'List<String>',context!);
        upc12 = JsonConverters.fromJson(json['upc12'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'productGuid': productGuid,
        'gtins': JsonConverters.toJson(gtins,'List<String>',context!),
        'mpns': JsonConverters.toJson(mpns,'List<String>',context!),
        'ean8': JsonConverters.toJson(ean8,'List<String>',context!),
        'ean13': JsonConverters.toJson(ean13,'List<String>',context!),
        'isbn9': JsonConverters.toJson(isbn9,'List<String>',context!),
        'isbn10': JsonConverters.toJson(isbn10,'List<String>',context!),
        'isbn13': JsonConverters.toJson(isbn13,'List<String>',context!),
        'itf14': JsonConverters.toJson(itf14,'List<String>',context!),
        'upc12': JsonConverters.toJson(upc12,'List<String>',context!)
    };

    getTypeName() => "ProductIdentifiers";
    TypeContext? context = _ctx;
}

// @DataContract
class BookAttributes implements IConvertible
{
    // @DataMember(Name="authors", EmitDefaultValue=false)
    List<String>? authors;

    BookAttributes({this.authors});
    BookAttributes.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        authors = JsonConverters.fromJson(json['authors'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'authors': JsonConverters.toJson(authors,'List<String>',context!)
    };

    getTypeName() => "BookAttributes";
    TypeContext? context = _ctx;
}

// @DataContract
class AudiobookAttributes extends BookAttributes implements IConvertible
{
    AudiobookAttributes();
    AudiobookAttributes.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "AudiobookAttributes";
    TypeContext? context = _ctx;
}

// @DataContract
class EBookAttributes extends BookAttributes implements IConvertible
{
    EBookAttributes();
    EBookAttributes.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "EBookAttributes";
    TypeContext? context = _ctx;
}

// @DataContract
class ItemAttributes implements IConvertible
{
    // @DataMember(Name="book", EmitDefaultValue=false)
    BookAttributes? book;

    // @DataMember(Name="audiobook", EmitDefaultValue=false)
    AudiobookAttributes? audiobook;

    // @DataMember(Name="ebook", EmitDefaultValue=false)
    EBookAttributes? ebook;

    ItemAttributes({this.book,this.audiobook,this.ebook});
    ItemAttributes.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        book = JsonConverters.fromJson(json['book'],'BookAttributes',context!);
        audiobook = JsonConverters.fromJson(json['audiobook'],'AudiobookAttributes',context!);
        ebook = JsonConverters.fromJson(json['eBook'],'EBookAttributes',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'book': JsonConverters.toJson(book,'BookAttributes',context!),
        'audiobook': JsonConverters.toJson(audiobook,'AudiobookAttributes',context!),
        'ebook': JsonConverters.toJson(ebook,'EBookAttributes',context!)
    };

    getTypeName() => "ItemAttributes";
    TypeContext? context = _ctx;
}

// @DataContract
class ProductAttributes implements IConvertible
{
    // @DataMember(Name="retailer", EmitDefaultValue=false)
    String? retailer;

    // @DataMember(Name="retailerGuid", EmitDefaultValue=false)
    String? retailerGuid;

    // @DataMember(Name="storefront", EmitDefaultValue=false)
    String? storefront;

    // @DataMember(Name="storefrontIso2", EmitDefaultValue=false)
    String? storefrontIso2;

    // @DataMember(Name="storefrontGuid", EmitDefaultValue=false)
    String? storefrontGuid;

    // @DataMember(Name="category", EmitDefaultValue=false)
    String? category;

    // @DataMember(Name="categoryGuid", EmitDefaultValue=false)
    String? categoryGuid;

    // @DataMember(Name="brand", EmitDefaultValue=false)
    String? brand;

    // @DataMember(Name="brandGuid", EmitDefaultValue=false)
    String? brandGuid;

    // @DataMember(Name="manufacturer", EmitDefaultValue=false)
    String? manufacturer;

    // @DataMember(Name="manufacturerGuid", EmitDefaultValue=false)
    String? manufacturerGuid;

    // @DataMember(Name="identifiers", EmitDefaultValue=false)
    ProductIdentifiers? identifiers;

    // @DataMember(Name="itemAttributes", EmitDefaultValue=false)
    ItemAttributes? itemAttributes;

    ProductAttributes({this.retailer,this.retailerGuid,this.storefront,this.storefrontIso2,this.storefrontGuid,this.category,this.categoryGuid,this.brand,this.brandGuid,this.manufacturer,this.manufacturerGuid,this.identifiers,this.itemAttributes});
    ProductAttributes.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        retailer = json['retailer'];
        retailerGuid = json['retailerGuid'];
        storefront = json['storefront'];
        storefrontIso2 = json['storefrontIso2'];
        storefrontGuid = json['storefrontGuid'];
        category = json['category'];
        categoryGuid = json['categoryGuid'];
        brand = json['brand'];
        brandGuid = json['brandGuid'];
        manufacturer = json['manufacturer'];
        manufacturerGuid = json['manufacturerGuid'];
        identifiers = JsonConverters.fromJson(json['identifiers'],'ProductIdentifiers',context!);
        itemAttributes = JsonConverters.fromJson(json['itemAttributes'],'ItemAttributes',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'retailer': retailer,
        'retailerGuid': retailerGuid,
        'storefront': storefront,
        'storefrontIso2': storefrontIso2,
        'storefrontGuid': storefrontGuid,
        'category': category,
        'categoryGuid': categoryGuid,
        'brand': brand,
        'brandGuid': brandGuid,
        'manufacturer': manufacturer,
        'manufacturerGuid': manufacturerGuid,
        'identifiers': JsonConverters.toJson(identifiers,'ProductIdentifiers',context!),
        'itemAttributes': JsonConverters.toJson(itemAttributes,'ItemAttributes',context!)
    };

    getTypeName() => "ProductAttributes";
    TypeContext? context = _ctx;
}

// @DataContract
class RetailerSpecificAttributes implements IConvertible
{
    // @DataMember(Name="name", EmitDefaultValue=false)
    String? name;

    // @DataMember(Name="description", EmitDefaultValue=false)
    String? description;

    // @DataMember(Name="skus", EmitDefaultValue=false)
    List<String>? skus;

    // @DataMember(Name="asin", EmitDefaultValue=false)
    String? asin;

    // @DataMember(Name="url", EmitDefaultValue=false)
    Uri? url;

    // @DataMember(Name="productImages", EmitDefaultValue=false)
    Map<String,Uri?>? productImages;

    // @DataMember(Name="additionalData", EmitDefaultValue=false)
    Map<String,String?>? additionalData;

    RetailerSpecificAttributes({this.name,this.description,this.skus,this.asin,this.url,this.productImages,this.additionalData});
    RetailerSpecificAttributes.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        name = json['name'];
        description = json['description'];
        skus = JsonConverters.fromJson(json['skus'],'List<String>',context!);
        asin = json['asin'];
        url = JsonConverters.fromJson(json['url'],'Uri',context!);
        productImages = JsonConverters.fromJson(json['productImages'],'Map<String,Uri?>',context!);
        additionalData = JsonConverters.toStringMap(json['additionalData']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'name': name,
        'description': description,
        'skus': JsonConverters.toJson(skus,'List<String>',context!),
        'asin': asin,
        'url': JsonConverters.toJson(url,'Uri',context!),
        'productImages': JsonConverters.toJson(productImages,'Map<String,Uri?>',context!),
        'additionalData': additionalData
    };

    getTypeName() => "RetailerSpecificAttributes";
    TypeContext? context = _ctx;
}

// @DataContract
class ProductData implements IConvertible
{
    // @DataMember(Name="attributes", EmitDefaultValue=false)
    ProductAttributes? attributes;

    // @DataMember(Name="retailerSpecificAttributes", EmitDefaultValue=false)
    RetailerSpecificAttributes? retailerSpecificAttributes;

    // @DataMember(Name="rawSourceData", EmitDefaultValue=false)
    String? rawSourceData;

    ProductData({this.attributes,this.retailerSpecificAttributes,this.rawSourceData});
    ProductData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        attributes = JsonConverters.fromJson(json['attributes'],'ProductAttributes',context!);
        retailerSpecificAttributes = JsonConverters.fromJson(json['retailerSpecificAttributes'],'RetailerSpecificAttributes',context!);
        rawSourceData = json['rawSourceData'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'attributes': JsonConverters.toJson(attributes,'ProductAttributes',context!),
        'retailerSpecificAttributes': JsonConverters.toJson(retailerSpecificAttributes,'RetailerSpecificAttributes',context!),
        'rawSourceData': rawSourceData
    };

    getTypeName() => "ProductData";
    TypeContext? context = _ctx;
}

// @DataContract
class PostProductSearchRequestBase implements IPostProductSearchRequestBase, IConvertible
{
    // @DataMember(Name="data")
    // @ApiMember(Name="data")
    List<ProductData>? data;

    // @DataMember(Name="timeoutMs")
    // @ApiMember(Name="timeoutMs")
    int? timeoutMs;

    // @DataMember(Name="maxStaleness")
    // @ApiMember(Name="maxStaleness")
    int? maxStaleness;

    // @DataMember(Name="countryIso2s")
    // @ApiMember(Name="countryIso2s")
    List<String>? countryIso2s;

    // @DataMember(Name="productTypes")
    // @ApiMember(Name="targetProductCategories")
    List<String>? productTypes;

    PostProductSearchRequestBase({this.data,this.timeoutMs,this.maxStaleness,this.countryIso2s,this.productTypes});
    PostProductSearchRequestBase.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        data = JsonConverters.fromJson(json['data'],'List<ProductData>',context!);
        timeoutMs = json['timeoutMs'];
        maxStaleness = json['maxStalenessMs'];
        countryIso2s = JsonConverters.fromJson(json['countryIso2s'],'List<String>',context!);
        productTypes = JsonConverters.fromJson(json['targetProductCategories'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'data': JsonConverters.toJson(data,'List<ProductData>',context!),
        'timeoutMs': timeoutMs,
        'maxStaleness': maxStaleness,
        'countryIso2s': JsonConverters.toJson(countryIso2s,'List<String>',context!),
        'productTypes': JsonConverters.toJson(productTypes,'List<String>',context!)
    };

    getTypeName() => "PostProductSearchRequestBase";
    TypeContext? context = _ctx;
}

enum ErrorCode
{
    Throttled,
    TargetRetailerProductNotFound,
    Unknown,
    NullMatchResult,
    NullSourceData,
    SourceDataProcessingFailure,
    LocalizationFailure,
}

// @DataContract
class MatchError implements IConvertible
{
    // @DataMember(Name="message")
    String? message;

    // @DataMember(Name="error")
    ErrorCode? error;

    MatchError({this.message,this.error});
    MatchError.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        message = json['message'];
        error = JsonConverters.fromJson(json['code'],'ErrorCode',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'message': message,
        'error': JsonConverters.toJson(error,'ErrorCode',context!)
    };

    getTypeName() => "MatchError";
    TypeContext? context = _ctx;
}

// @DataContract
class MatchResult implements IConvertible
{
    // @DataMember(Name="retailer")
    String? retailer;

    // @DataMember(Name="retailerGuid")
    String? retailerGuid;

    // @DataMember(Name="storefront")
    String? storefront;

    // @DataMember(Name="storefrontIso2")
    String? storefrontIso2;

    // @DataMember(Name="storefrontGuid")
    String? storefrontGuid;

    // @DataMember(Name="data")
    ProductData? data;

    // @DataMember(Name="errors")
    List<MatchError>? errors;

    // @DataMember(Name="matchAccuracy")
    String? matchAccuracy;

    // @DataMember(Name="matchingRuleName")
    String? matchingRuleName;

    // @DataMember(Name="dataSource")
    String? dataSource;

    MatchResult({this.retailer,this.retailerGuid,this.storefront,this.storefrontIso2,this.storefrontGuid,this.data,this.errors,this.matchAccuracy,this.matchingRuleName,this.dataSource});
    MatchResult.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        retailer = json['retailer'];
        retailerGuid = json['retailerGuid'];
        storefront = json['storefront'];
        storefrontIso2 = json['storefrontIso2'];
        storefrontGuid = json['storefrontGuid'];
        data = JsonConverters.fromJson(json['data'],'ProductData',context!);
        errors = JsonConverters.fromJson(json['errors'],'List<MatchError>',context!);
        matchAccuracy = json['matchAccuracy'];
        matchingRuleName = json['matchingRuleName'];
        dataSource = json['dataSource'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'retailer': retailer,
        'retailerGuid': retailerGuid,
        'storefront': storefront,
        'storefrontIso2': storefrontIso2,
        'storefrontGuid': storefrontGuid,
        'data': JsonConverters.toJson(data,'ProductData',context!),
        'errors': JsonConverters.toJson(errors,'List<MatchError>',context!),
        'matchAccuracy': matchAccuracy,
        'matchingRuleName': matchingRuleName,
        'dataSource': dataSource
    };

    getTypeName() => "MatchResult";
    TypeContext? context = _ctx;
}

// @DataContract
class PostProductSearchResponse implements IPostProductSearchResponse, IConvertible
{
    // @DataMember(Name="responseStatus")
    ResponseStatus? responseStatus;

    // @DataMember(Name="matchResults")
    List<MatchResult>? matchResults;

    PostProductSearchResponse({this.responseStatus,this.matchResults});
    PostProductSearchResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        responseStatus = JsonConverters.fromJson(json['responseStatus'],'ResponseStatus',context!);
        matchResults = JsonConverters.fromJson(json['matchResults'],'List<MatchResult>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'responseStatus': JsonConverters.toJson(responseStatus,'ResponseStatus',context!),
        'matchResults': JsonConverters.toJson(matchResults,'List<MatchResult>',context!)
    };

    getTypeName() => "PostProductSearchResponse";
    TypeContext? context = _ctx;
}

// @DataContract
class PostProductSearchRequest extends PostProductSearchRequestBase implements IPostProductSearchRequest, IConvertible
{
    PostProductSearchRequest();
    PostProductSearchRequest.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "PostProductSearchRequest";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'product_amazon_api.qa.platform.georiot.com', types: <String, TypeInfo> {
    'ProductIdentifiers': TypeInfo(TypeOf.Class, create:() => ProductIdentifiers()),
    'BookAttributes': TypeInfo(TypeOf.Class, create:() => BookAttributes()),
    'AudiobookAttributes': TypeInfo(TypeOf.Class, create:() => AudiobookAttributes()),
    'EBookAttributes': TypeInfo(TypeOf.Class, create:() => EBookAttributes()),
    'ItemAttributes': TypeInfo(TypeOf.Class, create:() => ItemAttributes()),
    'ProductAttributes': TypeInfo(TypeOf.Class, create:() => ProductAttributes()),
    'RetailerSpecificAttributes': TypeInfo(TypeOf.Class, create:() => RetailerSpecificAttributes()),
    'Uri': TypeInfo(TypeOf.Class, create:() => Uri()),
    'Map<String,Uri?>': TypeInfo(TypeOf.Class, create:() => Map<String,Uri?>()),
    'ProductData': TypeInfo(TypeOf.Class, create:() => ProductData()),
    'PostProductSearchRequestBase': TypeInfo(TypeOf.Class, create:() => PostProductSearchRequestBase()),
    'List<ProductData>': TypeInfo(TypeOf.Class, create:() => <ProductData>[]),
    'ErrorCode': TypeInfo(TypeOf.Enum, enumValues:ErrorCode.values),
    'MatchError': TypeInfo(TypeOf.Class, create:() => MatchError()),
    'MatchResult': TypeInfo(TypeOf.Class, create:() => MatchResult()),
    'List<MatchError>': TypeInfo(TypeOf.Class, create:() => <MatchError>[]),
    'PostProductSearchResponse': TypeInfo(TypeOf.Class, create:() => PostProductSearchResponse()),
    'List<MatchResult>': TypeInfo(TypeOf.Class, create:() => <MatchResult>[]),
    'PostProductSearchRequest': TypeInfo(TypeOf.Class, create:() => PostProductSearchRequest()),
});

Dart PostProductSearchRequest DTOs

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

HTTP + JSV

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

POST /v1/search HTTP/1.1 
Host: product-amazon-api.qa.platform.georiot.com 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	timeoutMs: 0,
	maxStaleness: 0,
	countryIso2s: 
	[
		String
	]
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	responseStatus: 
	{
		errorCode: String,
		message: String,
		stackTrace: String,
		errors: 
		[
			{
				errorCode: String,
				fieldName: String,
				message: String,
				meta: 
				{
					String: String
				}
			}
		],
		meta: 
		{
			String: String
		}
	}
}