Required role: | bookingsupplier-administrator-write |
POST | /customers | Create a new customer | Creates a new customer, if an admin user is making the request, the user will be associated with the admin user's company. |
---|
import 'package:servicestack/servicestack.dart';
class CustomFieldValueResponse implements IConvertible
{
String? Value;
CustomFieldValueResponse({this.Value});
CustomFieldValueResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Value = json['Value'];
return this;
}
Map<String, dynamic> toJson() => {
'Value': Value
};
getTypeName() => "CustomFieldValueResponse";
TypeContext? context = _ctx;
}
class CustomFieldConfigData implements IConvertible
{
/**
* Custom field id
*/
// @ApiMember(Description="Custom field id")
int? Id;
/**
* Configuration name. Example: 'Number of persons'.
*/
// @ApiMember(Description="Configuration name. Example: 'Number of persons'.")
String? Name;
/**
* Custom field description. Example: 'For how many persons is this booking?'
*/
// @ApiMember(Description="Custom field description. Example: 'For how many persons is this booking?'")
String? Description;
/**
* Field width. Example: 20 for 20px
*/
// @ApiMember(Description="Field width. Example: 20 for 20px")
int? Width;
/**
* Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
*/
// @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
String? DataType;
/**
* Default value of the field. Example: '3'
*/
// @ApiMember(Description="Default value of the field. Example: '3'")
String? DefaultValue;
/**
* Determines if the field is required to have a value or not
*/
// @ApiMember(Description="Determines if the field is required to have a value or not")
bool? IsMandatory;
/**
* Error message shown to the user if the field data is required but not entered
*/
// @ApiMember(Description="Error message shown to the user if the field data is required but not entered")
String? MandatoryErrorMessage;
/**
* Max lenght of the field
*/
// @ApiMember(Description="Max lenght of the field")
int? MaxLength;
/**
* If the field should have multiple lines
*/
// @ApiMember(Description="If the field should have multiple lines")
bool? MultipleLineText;
/**
* Regular expression used for validation of the field
*/
// @ApiMember(Description="Regular expression used for validation of the field")
String? RegEx;
/**
* Error message shown if the regular expression validation failed
*/
// @ApiMember(Description="Error message shown if the regular expression validation failed")
String? RegExErrorMessage;
/**
* The values to select from if Datatype is DropDown for this custom field
*/
// @ApiMember(Description="The values to select from if Datatype is DropDown for this custom field")
List<CustomFieldValueResponse>? Values;
CustomFieldConfigData({this.Id,this.Name,this.Description,this.Width,this.DataType,this.DefaultValue,this.IsMandatory,this.MandatoryErrorMessage,this.MaxLength,this.MultipleLineText,this.RegEx,this.RegExErrorMessage,this.Values});
CustomFieldConfigData.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Id = json['Id'];
Name = json['Name'];
Description = json['Description'];
Width = json['Width'];
DataType = json['DataType'];
DefaultValue = json['DefaultValue'];
IsMandatory = json['IsMandatory'];
MandatoryErrorMessage = json['MandatoryErrorMessage'];
MaxLength = json['MaxLength'];
MultipleLineText = json['MultipleLineText'];
RegEx = json['RegEx'];
RegExErrorMessage = json['RegExErrorMessage'];
Values = JsonConverters.fromJson(json['Values'],'List<CustomFieldValueResponse>',context!);
return this;
}
Map<String, dynamic> toJson() => {
'Id': Id,
'Name': Name,
'Description': Description,
'Width': Width,
'DataType': DataType,
'DefaultValue': DefaultValue,
'IsMandatory': IsMandatory,
'MandatoryErrorMessage': MandatoryErrorMessage,
'MaxLength': MaxLength,
'MultipleLineText': MultipleLineText,
'RegEx': RegEx,
'RegExErrorMessage': RegExErrorMessage,
'Values': JsonConverters.toJson(Values,'List<CustomFieldValueResponse>',context!)
};
getTypeName() => "CustomFieldConfigData";
TypeContext? context = _ctx;
}
class CustomFieldDataResponse implements IConvertible
{
int? Id;
String? Column;
String? Name;
String? Description;
String? Value;
/**
* Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
*/
// @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
String? DataType;
CustomFieldDataResponse({this.Id,this.Column,this.Name,this.Description,this.Value,this.DataType});
CustomFieldDataResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Id = json['Id'];
Column = json['Column'];
Name = json['Name'];
Description = json['Description'];
Value = json['Value'];
DataType = json['DataType'];
return this;
}
Map<String, dynamic> toJson() => {
'Id': Id,
'Column': Column,
'Name': Name,
'Description': Description,
'Value': Value,
'DataType': DataType
};
getTypeName() => "CustomFieldDataResponse";
TypeContext? context = _ctx;
}
class CustomerCommentsResponse implements IConvertible
{
int? Id;
String? CustomerId;
String? Comments;
DateTime? Updated;
DateTime? Created;
Uri? ImageUrl;
CustomerCommentsResponse({this.Id,this.CustomerId,this.Comments,this.Updated,this.Created,this.ImageUrl});
CustomerCommentsResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Id = json['Id'];
CustomerId = json['CustomerId'];
Comments = json['Comments'];
Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
ImageUrl = JsonConverters.fromJson(json['ImageUrl'],'Uri',context!);
return this;
}
Map<String, dynamic> toJson() => {
'Id': Id,
'CustomerId': CustomerId,
'Comments': Comments,
'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
'Created': JsonConverters.toJson(Created,'DateTime',context!),
'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!)
};
getTypeName() => "CustomerCommentsResponse";
TypeContext? context = _ctx;
}
class BaseModel implements IConvertible
{
BaseModel();
BaseModel.fromJson(Map<String, dynamic> json) : super();
fromMap(Map<String, dynamic> json) {
return this;
}
Map<String, dynamic> toJson() => {};
getTypeName() => "BaseModel";
TypeContext? context = _ctx;
}
class UserAccessKeys extends BaseModel implements IConvertible
{
// @Required()
String? CompanyId;
// @Required()
int? AccessKeyTypeId;
// @Required()
String? Value;
// @Required()
String? CustomerId;
String? Description;
// @Required()
String? Id;
UserAccessKeys({this.CompanyId,this.AccessKeyTypeId,this.Value,this.CustomerId,this.Description,this.Id});
UserAccessKeys.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
super.fromMap(json);
CompanyId = json['CompanyId'];
AccessKeyTypeId = json['AccessKeyTypeId'];
Value = json['Value'];
CustomerId = json['CustomerId'];
Description = json['Description'];
Id = json['Id'];
return this;
}
Map<String, dynamic> toJson() => super.toJson()..addAll({
'CompanyId': CompanyId,
'AccessKeyTypeId': AccessKeyTypeId,
'Value': Value,
'CustomerId': CustomerId,
'Description': Description,
'Id': Id
});
getTypeName() => "UserAccessKeys";
TypeContext? context = _ctx;
}
class InvoiceAddress implements IConvertible
{
String? CorporateIdentityNumber;
String? InvoiceAddress1;
String? InvoiceAddress2;
String? InvoiceCity;
String? InvoicePostalCode;
String? InvoiceCountryCode;
InvoiceAddress({this.CorporateIdentityNumber,this.InvoiceAddress1,this.InvoiceAddress2,this.InvoiceCity,this.InvoicePostalCode,this.InvoiceCountryCode});
InvoiceAddress.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
CorporateIdentityNumber = json['CorporateIdentityNumber'];
InvoiceAddress1 = json['InvoiceAddress1'];
InvoiceAddress2 = json['InvoiceAddress2'];
InvoiceCity = json['InvoiceCity'];
InvoicePostalCode = json['InvoicePostalCode'];
InvoiceCountryCode = json['InvoiceCountryCode'];
return this;
}
Map<String, dynamic> toJson() => {
'CorporateIdentityNumber': CorporateIdentityNumber,
'InvoiceAddress1': InvoiceAddress1,
'InvoiceAddress2': InvoiceAddress2,
'InvoiceCity': InvoiceCity,
'InvoicePostalCode': InvoicePostalCode,
'InvoiceCountryCode': InvoiceCountryCode
};
getTypeName() => "InvoiceAddress";
TypeContext? context = _ctx;
}
class CustomerQueryResponse implements IConvertible
{
String? Id;
String? Firstname;
String? Lastname;
String? Email;
String? Phone;
String? ImageUrl;
List<CustomFieldConfigData>? CustomFields;
List<CustomFieldDataResponse>? CustomFieldValues;
List<CustomerCommentsResponse>? Comments;
List<UserAccessKeys>? AccessKeys;
DateTime? Updated;
DateTime? Created;
dynamic? ResponseStatus;
bool? SubscribedToNewsletter;
InvoiceAddress? InvoiceAddress;
CustomerQueryResponse({this.Id,this.Firstname,this.Lastname,this.Email,this.Phone,this.ImageUrl,this.CustomFields,this.CustomFieldValues,this.Comments,this.AccessKeys,this.Updated,this.Created,this.ResponseStatus,this.SubscribedToNewsletter,this.InvoiceAddress});
CustomerQueryResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Id = json['Id'];
Firstname = json['Firstname'];
Lastname = json['Lastname'];
Email = json['Email'];
Phone = json['Phone'];
ImageUrl = json['ImageUrl'];
CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<CustomFieldConfigData>',context!);
CustomFieldValues = JsonConverters.fromJson(json['CustomFieldValues'],'List<CustomFieldDataResponse>',context!);
Comments = JsonConverters.fromJson(json['Comments'],'List<CustomerCommentsResponse>',context!);
AccessKeys = JsonConverters.fromJson(json['AccessKeys'],'List<UserAccessKeys>',context!);
Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'dynamic',context!);
SubscribedToNewsletter = json['SubscribedToNewsletter'];
InvoiceAddress = JsonConverters.fromJson(json['InvoiceAddress'],'InvoiceAddress',context!);
return this;
}
Map<String, dynamic> toJson() => {
'Id': Id,
'Firstname': Firstname,
'Lastname': Lastname,
'Email': Email,
'Phone': Phone,
'ImageUrl': ImageUrl,
'CustomFields': JsonConverters.toJson(CustomFields,'List<CustomFieldConfigData>',context!),
'CustomFieldValues': JsonConverters.toJson(CustomFieldValues,'List<CustomFieldDataResponse>',context!),
'Comments': JsonConverters.toJson(Comments,'List<CustomerCommentsResponse>',context!),
'AccessKeys': JsonConverters.toJson(AccessKeys,'List<UserAccessKeys>',context!),
'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
'Created': JsonConverters.toJson(Created,'DateTime',context!),
'ResponseStatus': JsonConverters.toJson(ResponseStatus,'dynamic',context!),
'SubscribedToNewsletter': SubscribedToNewsletter,
'InvoiceAddress': JsonConverters.toJson(InvoiceAddress,'InvoiceAddress',context!)
};
getTypeName() => "CustomerQueryResponse";
TypeContext? context = _ctx;
}
class UpdateCustomerResponse extends CustomerQueryResponse implements IConvertible
{
String? FacebookUserName;
String? UserId;
String? CompanyId;
DateTime? CreatedDate;
List<UserAccessKeys>? DeletedAccessKeys;
List<UserAccessKeys>? CreatedOrUpdatedAccessKeys;
UpdateCustomerResponse({this.FacebookUserName,this.UserId,this.CompanyId,this.CreatedDate,this.DeletedAccessKeys,this.CreatedOrUpdatedAccessKeys});
UpdateCustomerResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
super.fromMap(json);
FacebookUserName = json['FacebookUserName'];
UserId = json['UserId'];
CompanyId = json['CompanyId'];
CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
DeletedAccessKeys = JsonConverters.fromJson(json['DeletedAccessKeys'],'List<UserAccessKeys>',context!);
CreatedOrUpdatedAccessKeys = JsonConverters.fromJson(json['CreatedOrUpdatedAccessKeys'],'List<UserAccessKeys>',context!);
return this;
}
Map<String, dynamic> toJson() => super.toJson()..addAll({
'FacebookUserName': FacebookUserName,
'UserId': UserId,
'CompanyId': CompanyId,
'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
'DeletedAccessKeys': JsonConverters.toJson(DeletedAccessKeys,'List<UserAccessKeys>',context!),
'CreatedOrUpdatedAccessKeys': JsonConverters.toJson(CreatedOrUpdatedAccessKeys,'List<UserAccessKeys>',context!)
});
getTypeName() => "UpdateCustomerResponse";
TypeContext? context = _ctx;
}
class AddCustomField implements IConvertible
{
int? Id;
String? Value;
AddCustomField({this.Id,this.Value});
AddCustomField.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Id = json['Id'];
Value = json['Value'];
return this;
}
Map<String, dynamic> toJson() => {
'Id': Id,
'Value': Value
};
getTypeName() => "AddCustomField";
TypeContext? context = _ctx;
}
class AddUserAccessKey implements IConvertible
{
String? Id;
String? CompanyId;
int? AccessKeyTypeId;
String? Value;
String? CustomerId;
String? Description;
AddUserAccessKey({this.Id,this.CompanyId,this.AccessKeyTypeId,this.Value,this.CustomerId,this.Description});
AddUserAccessKey.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
Id = json['Id'];
CompanyId = json['CompanyId'];
AccessKeyTypeId = json['AccessKeyTypeId'];
Value = json['Value'];
CustomerId = json['CustomerId'];
Description = json['Description'];
return this;
}
Map<String, dynamic> toJson() => {
'Id': Id,
'CompanyId': CompanyId,
'AccessKeyTypeId': AccessKeyTypeId,
'Value': Value,
'CustomerId': CustomerId,
'Description': Description
};
getTypeName() => "AddUserAccessKey";
TypeContext? context = _ctx;
}
// @ApiResponse(Description="Returned if there is a validation error on the input parameters", StatusCode=400)
// @ApiResponse(Description="Returned if the current user is not allowed to perform the action", StatusCode=401)
// @ValidateRequest(Validator="IsAuthenticated")
class CreateCustomer implements IConvertible
{
/**
* Enter the company and id for the customer, if blank company id and you are an admin, your company id will be used.
*/
// @ApiMember(Description="Enter the company and id for the customer, if blank company id and you are an admin, your company id will be used.", ParameterType="query")
String? CompanyId;
// @ApiMember(IsRequired=true)
String? Firstname;
// @ApiMember(IsRequired=true)
String? Lastname;
// @ApiMember(IsRequired=true)
String? Phone;
// @ApiMember()
String? Email;
/**
* If Custom Fields are added to the customer, here you will send the id and the value for each custom field to be updated
*/
// @ApiMember(Description="If Custom Fields are added to the customer, here you will send the id and the value for each custom field to be updated")
List<AddCustomField>? CustomFields;
/**
* List of Access Keys
*/
// @ApiMember(Description="List of Access Keys")
List<AddUserAccessKey>? AccessKeys;
/**
* Customer invoice adress
*/
// @ApiMember(Description="Customer invoice adress")
InvoiceAddress? InvoiceAddress;
CreateCustomer({this.CompanyId,this.Firstname,this.Lastname,this.Phone,this.Email,this.CustomFields,this.AccessKeys,this.InvoiceAddress});
CreateCustomer.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
CompanyId = json['CompanyId'];
Firstname = json['Firstname'];
Lastname = json['Lastname'];
Phone = json['Phone'];
Email = json['Email'];
CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<AddCustomField>',context!);
AccessKeys = JsonConverters.fromJson(json['AccessKeys'],'List<AddUserAccessKey>',context!);
InvoiceAddress = JsonConverters.fromJson(json['InvoiceAddress'],'InvoiceAddress',context!);
return this;
}
Map<String, dynamic> toJson() => {
'CompanyId': CompanyId,
'Firstname': Firstname,
'Lastname': Lastname,
'Phone': Phone,
'Email': Email,
'CustomFields': JsonConverters.toJson(CustomFields,'List<AddCustomField>',context!),
'AccessKeys': JsonConverters.toJson(AccessKeys,'List<AddUserAccessKey>',context!),
'InvoiceAddress': JsonConverters.toJson(InvoiceAddress,'InvoiceAddress',context!)
};
getTypeName() => "CreateCustomer";
TypeContext? context = _ctx;
}
TypeContext _ctx = TypeContext(library: 'api.bokamera.se', types: <String, TypeInfo> {
'CustomFieldValueResponse': TypeInfo(TypeOf.Class, create:() => CustomFieldValueResponse()),
'CustomFieldConfigData': TypeInfo(TypeOf.Class, create:() => CustomFieldConfigData()),
'List<CustomFieldValueResponse>': TypeInfo(TypeOf.Class, create:() => <CustomFieldValueResponse>[]),
'CustomFieldDataResponse': TypeInfo(TypeOf.Class, create:() => CustomFieldDataResponse()),
'CustomerCommentsResponse': TypeInfo(TypeOf.Class, create:() => CustomerCommentsResponse()),
'Uri': TypeInfo(TypeOf.Class, create:() => Uri()),
'BaseModel': TypeInfo(TypeOf.Class, create:() => BaseModel()),
'UserAccessKeys': TypeInfo(TypeOf.Class, create:() => UserAccessKeys()),
'InvoiceAddress': TypeInfo(TypeOf.Class, create:() => InvoiceAddress()),
'CustomerQueryResponse': TypeInfo(TypeOf.Class, create:() => CustomerQueryResponse()),
'List<CustomFieldConfigData>': TypeInfo(TypeOf.Class, create:() => <CustomFieldConfigData>[]),
'List<CustomFieldDataResponse>': TypeInfo(TypeOf.Class, create:() => <CustomFieldDataResponse>[]),
'List<CustomerCommentsResponse>': TypeInfo(TypeOf.Class, create:() => <CustomerCommentsResponse>[]),
'List<UserAccessKeys>': TypeInfo(TypeOf.Class, create:() => <UserAccessKeys>[]),
'UpdateCustomerResponse': TypeInfo(TypeOf.Class, create:() => UpdateCustomerResponse()),
'AddCustomField': TypeInfo(TypeOf.Class, create:() => AddCustomField()),
'AddUserAccessKey': TypeInfo(TypeOf.Class, create:() => AddUserAccessKey()),
'CreateCustomer': TypeInfo(TypeOf.Class, create:() => CreateCustomer()),
'List<AddCustomField>': TypeInfo(TypeOf.Class, create:() => <AddCustomField>[]),
'List<AddUserAccessKey>': TypeInfo(TypeOf.Class, create:() => <AddUserAccessKey>[]),
});
To override the Content-type in your clients, use the HTTP Accept Header, append the .other suffix or ?format=other
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /customers HTTP/1.1
Host: api.bokamera.se
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length
{"CompanyId":"00000000-0000-0000-0000-000000000000","Firstname":"String","Lastname":"String","Phone":"String","Email":"String","CustomFields":[{"Id":0,"Value":"String"}],"AccessKeys":[{"Id":"00000000-0000-0000-0000-000000000000","CompanyId":"00000000-0000-0000-0000-000000000000","AccessKeyTypeId":0,"Value":"String","CustomerId":"00000000-0000-0000-0000-000000000000","Description":"String"}],"InvoiceAddress":{"CorporateIdentityNumber":"String","InvoiceAddress1":"String","InvoiceAddress2":"String","InvoiceCity":"String","InvoicePostalCode":"String","InvoiceCountryCode":"String"}}
HTTP/1.1 200 OK Content-Type: text/jsonl Content-Length: length {"FacebookUserName":"String","UserId":"00000000-0000-0000-0000-000000000000","CompanyId":"00000000-0000-0000-0000-000000000000","CreatedDate":"0001-01-01T00:00:00","DeletedAccessKeys":[{"AccessKeyTypeId":0,"Value":"String","Description":"String"}],"CreatedOrUpdatedAccessKeys":[{"AccessKeyTypeId":0,"Value":"String","Description":"String"}],"Firstname":"String","Lastname":"String","Email":"String","Phone":"String","ImageUrl":"String","CustomFields":[{"Id":0,"Name":"String","Description":"String","Width":0,"DataType":"String","DefaultValue":"String","IsMandatory":false,"MandatoryErrorMessage":"String","MaxLength":0,"MultipleLineText":false,"RegEx":"String","RegExErrorMessage":"String","Values":[{"Value":"String"}]}],"CustomFieldValues":[{"Id":0,"Column":"String","Name":"String","Description":"String","Value":"String","DataType":"String"}],"Comments":[{"Id":0,"Comments":"String"}],"AccessKeys":[{"AccessKeyTypeId":0,"Value":"String","Description":"String"}],"ResponseStatus":{},"SubscribedToNewsletter":false,"InvoiceAddress":{"CorporateIdentityNumber":"String","InvoiceAddress1":"String","InvoiceAddress2":"String","InvoiceCity":"String","InvoicePostalCode":"String","InvoiceCountryCode":"String"}}