POST | /Initiation/Transferee | Initiates a transferee. |
---|
import 'package:servicestack/servicestack.dart';
class TransfereeInitiationResponse implements IConvertible
{
ResponseStatus? responseStatus;
TransfereeInitiationResponse({this.responseStatus});
TransfereeInitiationResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
responseStatus = JsonConverters.fromJson(json['responseStatus'],'ResponseStatus',context!);
return this;
}
Map<String, dynamic> toJson() => {
'responseStatus': JsonConverters.toJson(responseStatus,'ResponseStatus',context!)
};
getTypeName() => "TransfereeInitiationResponse";
TypeContext? context = _ctx;
}
class CustomField implements IConvertible
{
/**
* Custom field name
*/
// @ApiMember(Description="Custom field name", IsRequired=true)
String? fieldName;
/**
* Custom field value
*/
// @ApiMember(Description="Custom field value")
String? fieldValue;
CustomField({this.fieldName,this.fieldValue});
CustomField.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
fieldName = json['fieldName'];
fieldValue = json['fieldValue'];
return this;
}
Map<String, dynamic> toJson() => {
'fieldName': fieldName,
'fieldValue': fieldValue
};
getTypeName() => "CustomField";
TypeContext? context = _ctx;
}
class Location implements IConvertible
{
String? title;
String? city;
String? stateCode;
String? countryCode;
Location({this.title,this.city,this.stateCode,this.countryCode});
Location.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
title = json['title'];
city = json['city'];
stateCode = json['stateCode'];
countryCode = json['countryCode'];
return this;
}
Map<String, dynamic> toJson() => {
'title': title,
'city': city,
'stateCode': stateCode,
'countryCode': countryCode
};
getTypeName() => "Location";
TypeContext? context = _ctx;
}
class Address extends Location implements IConvertible
{
String? line1;
String? line2;
String? line3;
String? postalCode;
Address({this.line1,this.line2,this.line3,this.postalCode});
Address.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
super.fromMap(json);
line1 = json['line1'];
line2 = json['line2'];
line3 = json['line3'];
postalCode = json['postalCode'];
return this;
}
Map<String, dynamic> toJson() => super.toJson()..addAll({
'line1': line1,
'line2': line2,
'line3': line3,
'postalCode': postalCode
});
getTypeName() => "Address";
TypeContext? context = _ctx;
}
enum MaritalStatus
{
Single,
Married,
DomesticPartner,
Divorcee,
Defacto,
Other,
Separated,
Interdependent,
Widowed,
Divorced,
}
enum HomeOwnerStatus
{
Homeowner,
Renter,
}
class SpousePartner implements IConvertible
{
String? firstName;
String? lastName;
DateTime? birthDate;
SpousePartner({this.firstName,this.lastName,this.birthDate});
SpousePartner.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
firstName = json['firstName'];
lastName = json['lastName'];
birthDate = JsonConverters.fromJson(json['birthDate'],'DateTime',context!);
return this;
}
Map<String, dynamic> toJson() => {
'firstName': firstName,
'lastName': lastName,
'birthDate': JsonConverters.toJson(birthDate,'DateTime',context!)
};
getTypeName() => "SpousePartner";
TypeContext? context = _ctx;
}
enum DependentAssigneeRelationship
{
Child,
Other,
}
class Dependent implements IConvertible
{
String? firstName;
String? lastName;
DateTime? birthDate;
// @ApiMember(IsRequired=true, Name="RelationshipToAssignee")
DependentAssigneeRelationship? relationshipToAssignee;
Dependent({this.firstName,this.lastName,this.birthDate,this.relationshipToAssignee});
Dependent.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
firstName = json['firstName'];
lastName = json['lastName'];
birthDate = JsonConverters.fromJson(json['birthDate'],'DateTime',context!);
relationshipToAssignee = JsonConverters.fromJson(json['relationshipToAssignee'],'DependentAssigneeRelationship',context!);
return this;
}
Map<String, dynamic> toJson() => {
'firstName': firstName,
'lastName': lastName,
'birthDate': JsonConverters.toJson(birthDate,'DateTime',context!),
'relationshipToAssignee': JsonConverters.toJson(relationshipToAssignee,'DependentAssigneeRelationship',context!)
};
getTypeName() => "Dependent";
TypeContext? context = _ctx;
}
class ServiceData implements IConvertible
{
/**
* Service data field name
*/
// @ApiMember(Description="Service data field name", IsRequired=true)
String? fieldName;
/**
* Service data field value
*/
// @ApiMember(Description="Service data field value", IsRequired=true)
String? fieldValue;
ServiceData({this.fieldName,this.fieldValue});
ServiceData.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
fieldName = json['fieldName'];
fieldValue = json['fieldValue'];
return this;
}
Map<String, dynamic> toJson() => {
'fieldName': fieldName,
'fieldValue': fieldValue
};
getTypeName() => "ServiceData";
TypeContext? context = _ctx;
}
class Service implements IConvertible
{
/**
* Service name
*/
// @ApiMember(Description="Service name", IsRequired=true)
String? name;
/**
* Service data
*/
// @ApiMember(Description="Service data")
List<ServiceData>? data;
/**
* Cancel
*/
// @ApiMember(Description="Cancel")
String? cancel;
Service({this.name,this.data,this.cancel});
Service.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
name = json['name'];
data = JsonConverters.fromJson(json['data'],'List<ServiceData>',context!);
cancel = json['cancel'];
return this;
}
Map<String, dynamic> toJson() => {
'name': name,
'data': JsonConverters.toJson(data,'List<ServiceData>',context!),
'cancel': cancel
};
getTypeName() => "Service";
TypeContext? context = _ctx;
}
class TransfereeInitiation implements IConvertible
{
/**
* Client ID
*/
// @ApiMember(Description="Client ID")
String? clientId;
/**
* External ID. This must be unique to the intiation's parent client
*/
// @ApiMember(Description="External ID. This must be unique to the intiation's parent client", IsRequired=true)
String? externalId;
/**
* Transferee first name
*/
// @ApiMember(Description="Transferee first name", IsRequired=true)
String? firstName;
/**
* Transferee last name
*/
// @ApiMember(Description="Transferee last name", IsRequired=true)
String? lastName;
/**
* Assignment type
*/
// @ApiMember(Description="Assignment type")
String? assignmentType;
/**
* Is this transferee pre-decision
*/
// @ApiMember(Description="Is this transferee pre-decision")
bool? preDecision;
/**
* Is this transferee a VIP
*/
// @ApiMember(Description="Is this transferee a VIP")
bool? vip;
/**
* Custom fields
*/
// @ApiMember(Description="Custom fields")
List<CustomField>? customFields;
/**
* Employee ID
*/
// @ApiMember(Description="Employee ID")
String? employeeId;
/**
* Start date
*/
// @ApiMember(Description="Start date")
DateTime? startDate;
/**
* End date
*/
// @ApiMember(Description="End date")
DateTime? endDate;
/**
* Origin work location
*/
// @ApiMember(Description="Origin work location", IsRequired=true)
Location? originWorkLocation;
/**
* Origin home address
*/
// @ApiMember(Description="Origin home address", IsRequired=true)
Address? originHomeAddress;
/**
* Destination work location
*/
// @ApiMember(Description="Destination work location", IsRequired=true)
Location? destinationWorkLocation;
/**
* Repat
*/
// @ApiMember(Description="Repat")
String? repat;
/**
* Repat From City
*/
// @ApiMember(Description="Repat From City")
String? repatFromCity;
/**
* Repat From State code
*/
// @ApiMember(Description="Repat From State code")
String? repatFromStateCode;
/**
* Repat From Country Code
*/
// @ApiMember(Description="Repat From Country Code")
String? repatFromCountryCode;
/**
* Repat To City
*/
// @ApiMember(Description="Repat To City")
String? repatToCity;
/**
* Repat To State Code
*/
// @ApiMember(Description="Repat To State Code")
String? repatToStateCode;
/**
* Repat To Country Code
*/
// @ApiMember(Description="Repat To Country Code")
String? repatToCountryCode;
/**
* Transferee citizenship country
*/
// @ApiMember(Description="Transferee citizenship country")
String? citizenshipCountry;
/**
* Transferee dual citizenship country
*/
// @ApiMember(Description="Transferee dual citizenship country")
String? dualCitizenshipCountry;
/**
* Policy
*/
// @ApiMember(Description="Policy", IsRequired=true)
String? policy;
/**
* Job title
*/
// @ApiMember(Description="Job title")
String? jobTitle;
/**
* Marital status
*/
// @ApiMember(Description="Marital status", Name="MaritalStatus")
MaritalStatus? maritalStatus;
/**
* Pay grade
*/
// @ApiMember(Description="Pay grade")
String? payGrade;
/**
* Assignment family size
*/
// @ApiMember(Description="Assignment family size")
int? assignmentFamilySize;
/**
* Home owner status
*/
// @ApiMember(Description="Home owner status", Name="HomeOwnerStatus")
HomeOwnerStatus? homeOwnerStatus;
/**
* Line of business
*/
// @ApiMember(Description="Line of business", IsRequired=true)
String? lineOfBusiness;
/**
* HostCurrency
*/
// @ApiMember(Description="HostCurrency")
String? hostCurrency;
/**
* ServiceLevel
*/
// @ApiMember(Description="ServiceLevel")
String? serviceLevel;
/**
* CompanyCodePrimary
*/
// @ApiMember(Description="CompanyCodePrimary")
String? companyCodePrimary;
/**
* CompanyCodeSecondary
*/
// @ApiMember(Description="CompanyCodeSecondary")
String? companyCodeSecondary;
/**
* CostCenterPrimary
*/
// @ApiMember(Description="CostCenterPrimary")
String? costCenterPrimary;
/**
* CostCenterSecondary
*/
// @ApiMember(Description="CostCenterSecondary")
String? costCenterSecondary;
/**
* CostCenterTertiary
*/
// @ApiMember(Description="CostCenterTertiary")
String? costCenterTertiary;
/**
* Is the assignment confidential
*/
// @ApiMember(Description="Is the assignment confidential")
bool? confidential;
/**
* Special Instructions
*/
// @ApiMember(Description="Special Instructions")
String? specialInstructions;
/**
* Destination entity legal name
*/
// @ApiMember(Description="Destination entity legal name")
String? destinationEntityLegalName;
/**
* Transferee mobile phone number
*/
// @ApiMember(Description="Transferee mobile phone number", IsRequired=true)
String? mobilePhoneNumber;
/**
* Transferee work phone number
*/
// @ApiMember(Description="Transferee work phone number")
String? workPhoneNumber;
/**
* Transferee home phone number
*/
// @ApiMember(Description="Transferee home phone number")
String? homePhoneNumber;
/**
* Transferee primary email
*/
// @ApiMember(Description="Transferee primary email", IsRequired=true)
String? primaryEmail;
/**
* Transferee secondary email
*/
// @ApiMember(Description="Transferee secondary email")
String? secondaryEmail;
/**
* HR Contact First Name
*/
// @ApiMember(Description="HR Contact First Name")
String? hrContactFirstName;
/**
* HR Contact Last Name
*/
// @ApiMember(Description="HR Contact Last Name")
String? hrContactLastName;
/**
* HR contact full name
*/
// @ApiMember(Description="HR contact full name")
String? hrContactFullName;
/**
* Transferee annual salary
*/
// @ApiMember(Description="Transferee annual salary")
String? annualSalary;
/**
* Transferee spouse/partner
*/
// @ApiMember(Description="Transferee spouse/partner")
SpousePartner? spousePartner;
/**
* Transferee dependents
*/
// @ApiMember(Description="Transferee dependents")
List<Dependent>? dependents;
/**
* Assignment Services
*/
// @ApiMember(Description="Assignment Services")
List<Service>? services;
/**
* Relocation Status
*/
// @ApiMember(Description="Relocation Status")
String? relocationStatus;
/**
* Cancel
*/
// @ApiMember(Description="Cancel")
String? cancel;
TransfereeInitiation({this.clientId,this.externalId,this.firstName,this.lastName,this.assignmentType,this.preDecision,this.vip,this.customFields,this.employeeId,this.startDate,this.endDate,this.originWorkLocation,this.originHomeAddress,this.destinationWorkLocation,this.repat,this.repatFromCity,this.repatFromStateCode,this.repatFromCountryCode,this.repatToCity,this.repatToStateCode,this.repatToCountryCode,this.citizenshipCountry,this.dualCitizenshipCountry,this.policy,this.jobTitle,this.maritalStatus,this.payGrade,this.assignmentFamilySize,this.homeOwnerStatus,this.lineOfBusiness,this.hostCurrency,this.serviceLevel,this.companyCodePrimary,this.companyCodeSecondary,this.costCenterPrimary,this.costCenterSecondary,this.costCenterTertiary,this.confidential,this.specialInstructions,this.destinationEntityLegalName,this.mobilePhoneNumber,this.workPhoneNumber,this.homePhoneNumber,this.primaryEmail,this.secondaryEmail,this.hrContactFirstName,this.hrContactLastName,this.hrContactFullName,this.annualSalary,this.spousePartner,this.dependents,this.services,this.relocationStatus,this.cancel});
TransfereeInitiation.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
clientId = json['clientId'];
externalId = json['externalId'];
firstName = json['firstName'];
lastName = json['lastName'];
assignmentType = json['assignmentType'];
preDecision = json['preDecision'];
vip = json['vip'];
customFields = JsonConverters.fromJson(json['customFields'],'List<CustomField>',context!);
employeeId = json['employeeId'];
startDate = JsonConverters.fromJson(json['startDate'],'DateTime',context!);
endDate = JsonConverters.fromJson(json['endDate'],'DateTime',context!);
originWorkLocation = JsonConverters.fromJson(json['originWorkLocation'],'Location',context!);
originHomeAddress = JsonConverters.fromJson(json['originHomeAddress'],'Address',context!);
destinationWorkLocation = JsonConverters.fromJson(json['destinationWorkLocation'],'Location',context!);
repat = json['repat'];
repatFromCity = json['repatFromCity'];
repatFromStateCode = json['repatFromStateCode'];
repatFromCountryCode = json['repatFromCountryCode'];
repatToCity = json['repatToCity'];
repatToStateCode = json['repatToStateCode'];
repatToCountryCode = json['repatToCountryCode'];
citizenshipCountry = json['citizenshipCountry'];
dualCitizenshipCountry = json['dualCitizenshipCountry'];
policy = json['policy'];
jobTitle = json['jobTitle'];
maritalStatus = JsonConverters.fromJson(json['maritalStatus'],'MaritalStatus',context!);
payGrade = json['payGrade'];
assignmentFamilySize = json['assignmentFamilySize'];
homeOwnerStatus = JsonConverters.fromJson(json['homeOwnerStatus'],'HomeOwnerStatus',context!);
lineOfBusiness = json['lineOfBusiness'];
hostCurrency = json['hostCurrency'];
serviceLevel = json['serviceLevel'];
companyCodePrimary = json['companyCodePrimary'];
companyCodeSecondary = json['companyCodeSecondary'];
costCenterPrimary = json['costCenterPrimary'];
costCenterSecondary = json['costCenterSecondary'];
costCenterTertiary = json['costCenterTertiary'];
confidential = json['confidential'];
specialInstructions = json['specialInstructions'];
destinationEntityLegalName = json['destinationEntityLegalName'];
mobilePhoneNumber = json['mobilePhoneNumber'];
workPhoneNumber = json['workPhoneNumber'];
homePhoneNumber = json['homePhoneNumber'];
primaryEmail = json['primaryEmail'];
secondaryEmail = json['secondaryEmail'];
hrContactFirstName = json['hrContactFirstName'];
hrContactLastName = json['hrContactLastName'];
hrContactFullName = json['hrContactFullName'];
annualSalary = json['annualSalary'];
spousePartner = JsonConverters.fromJson(json['spousePartner'],'SpousePartner',context!);
dependents = JsonConverters.fromJson(json['dependents'],'List<Dependent>',context!);
services = JsonConverters.fromJson(json['services'],'List<Service>',context!);
relocationStatus = json['relocationStatus'];
cancel = json['cancel'];
return this;
}
Map<String, dynamic> toJson() => {
'clientId': clientId,
'externalId': externalId,
'firstName': firstName,
'lastName': lastName,
'assignmentType': assignmentType,
'preDecision': preDecision,
'vip': vip,
'customFields': JsonConverters.toJson(customFields,'List<CustomField>',context!),
'employeeId': employeeId,
'startDate': JsonConverters.toJson(startDate,'DateTime',context!),
'endDate': JsonConverters.toJson(endDate,'DateTime',context!),
'originWorkLocation': JsonConverters.toJson(originWorkLocation,'Location',context!),
'originHomeAddress': JsonConverters.toJson(originHomeAddress,'Address',context!),
'destinationWorkLocation': JsonConverters.toJson(destinationWorkLocation,'Location',context!),
'repat': repat,
'repatFromCity': repatFromCity,
'repatFromStateCode': repatFromStateCode,
'repatFromCountryCode': repatFromCountryCode,
'repatToCity': repatToCity,
'repatToStateCode': repatToStateCode,
'repatToCountryCode': repatToCountryCode,
'citizenshipCountry': citizenshipCountry,
'dualCitizenshipCountry': dualCitizenshipCountry,
'policy': policy,
'jobTitle': jobTitle,
'maritalStatus': JsonConverters.toJson(maritalStatus,'MaritalStatus',context!),
'payGrade': payGrade,
'assignmentFamilySize': assignmentFamilySize,
'homeOwnerStatus': JsonConverters.toJson(homeOwnerStatus,'HomeOwnerStatus',context!),
'lineOfBusiness': lineOfBusiness,
'hostCurrency': hostCurrency,
'serviceLevel': serviceLevel,
'companyCodePrimary': companyCodePrimary,
'companyCodeSecondary': companyCodeSecondary,
'costCenterPrimary': costCenterPrimary,
'costCenterSecondary': costCenterSecondary,
'costCenterTertiary': costCenterTertiary,
'confidential': confidential,
'specialInstructions': specialInstructions,
'destinationEntityLegalName': destinationEntityLegalName,
'mobilePhoneNumber': mobilePhoneNumber,
'workPhoneNumber': workPhoneNumber,
'homePhoneNumber': homePhoneNumber,
'primaryEmail': primaryEmail,
'secondaryEmail': secondaryEmail,
'hrContactFirstName': hrContactFirstName,
'hrContactLastName': hrContactLastName,
'hrContactFullName': hrContactFullName,
'annualSalary': annualSalary,
'spousePartner': JsonConverters.toJson(spousePartner,'SpousePartner',context!),
'dependents': JsonConverters.toJson(dependents,'List<Dependent>',context!),
'services': JsonConverters.toJson(services,'List<Service>',context!),
'relocationStatus': relocationStatus,
'cancel': cancel
};
getTypeName() => "TransfereeInitiation";
TypeContext? context = _ctx;
}
class TransfereeInitiationRequest implements IRequireClientScoped, IPost, IConvertible
{
/**
* Transferee initiation info needed for creation.
*/
// @ApiMember(Description="Transferee initiation info needed for creation.", IsRequired=true, ParameterType="body")
TransfereeInitiation? initiationInfo;
TransfereeInitiationRequest({this.initiationInfo});
TransfereeInitiationRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }
fromMap(Map<String, dynamic> json) {
initiationInfo = JsonConverters.fromJson(json['initiationInfo'],'TransfereeInitiation',context!);
return this;
}
Map<String, dynamic> toJson() => {
'initiationInfo': JsonConverters.toJson(initiationInfo,'TransfereeInitiation',context!)
};
getTypeName() => "TransfereeInitiationRequest";
TypeContext? context = _ctx;
}
TypeContext _ctx = TypeContext(library: 'initiation_api.sirva.com', types: <String, TypeInfo> {
'TransfereeInitiationResponse': TypeInfo(TypeOf.Class, create:() => TransfereeInitiationResponse()),
'CustomField': TypeInfo(TypeOf.Class, create:() => CustomField()),
'Location': TypeInfo(TypeOf.Class, create:() => Location()),
'Address': TypeInfo(TypeOf.Class, create:() => Address()),
'MaritalStatus': TypeInfo(TypeOf.Enum, enumValues:MaritalStatus.values),
'HomeOwnerStatus': TypeInfo(TypeOf.Enum, enumValues:HomeOwnerStatus.values),
'SpousePartner': TypeInfo(TypeOf.Class, create:() => SpousePartner()),
'DependentAssigneeRelationship': TypeInfo(TypeOf.Enum, enumValues:DependentAssigneeRelationship.values),
'Dependent': TypeInfo(TypeOf.Class, create:() => Dependent()),
'ServiceData': TypeInfo(TypeOf.Class, create:() => ServiceData()),
'Service': TypeInfo(TypeOf.Class, create:() => Service()),
'List<ServiceData>': TypeInfo(TypeOf.Class, create:() => <ServiceData>[]),
'TransfereeInitiation': TypeInfo(TypeOf.Class, create:() => TransfereeInitiation()),
'List<CustomField>': TypeInfo(TypeOf.Class, create:() => <CustomField>[]),
'List<Dependent>': TypeInfo(TypeOf.Class, create:() => <Dependent>[]),
'List<Service>': TypeInfo(TypeOf.Class, create:() => <Service>[]),
'TransfereeInitiationRequest': TypeInfo(TypeOf.Class, create:() => TransfereeInitiationRequest()),
});
Dart TransfereeInitiationRequest DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /Initiation/Transferee HTTP/1.1
Host: initiation-api.sirva.com
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
initiationInfo:
{
clientId: String,
externalId: String,
firstName: String,
lastName: String,
assignmentType: String,
preDecision: False,
vip: False,
customFields:
[
{
fieldName: String,
fieldValue: String
}
],
employeeId: String,
startDate: 0001-01-01,
endDate: 0001-01-01,
originWorkLocation:
{
title: String,
city: String,
stateCode: String,
countryCode: String
},
originHomeAddress:
{
line1: String,
line2: String,
line3: String,
postalCode: String,
title: String,
city: String,
stateCode: String,
countryCode: String
},
destinationWorkLocation:
{
title: String,
city: String,
stateCode: String,
countryCode: String
},
repat: String,
repatFromCity: String,
repatFromStateCode: String,
repatFromCountryCode: String,
repatToCity: String,
repatToStateCode: String,
repatToCountryCode: String,
citizenshipCountry: String,
dualCitizenshipCountry: String,
policy: String,
jobTitle: String,
maritalStatus: Single,
payGrade: String,
assignmentFamilySize: 0,
homeOwnerStatus: Homeowner,
lineOfBusiness: String,
hostCurrency: String,
serviceLevel: String,
companyCodePrimary: String,
companyCodeSecondary: String,
costCenterPrimary: String,
costCenterSecondary: String,
costCenterTertiary: String,
confidential: False,
specialInstructions: String,
destinationEntityLegalName: String,
mobilePhoneNumber: String,
workPhoneNumber: String,
homePhoneNumber: String,
primaryEmail: String,
secondaryEmail: String,
hrContactFirstName: String,
hrContactLastName: String,
hrContactFullName: String,
annualSalary: String,
spousePartner:
{
firstName: String,
lastName: String,
birthDate: 0001-01-01
},
dependents:
[
{
firstName: String,
lastName: String,
birthDate: 0001-01-01,
relationshipToAssignee: Child
}
],
services:
[
{
name: String,
data:
[
{
fieldName: String,
fieldValue: String
}
],
cancel: String
}
],
relocationStatus: String,
cancel: 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 } } }