Antel API

<back to all web services

SaveUplift

Requires Authentication
The following routes are available for this service:
POST/uplift
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ApiServiceRequest(IServiceRequest, IHasApiKey, IHasDeviceInfo):
    # @ApiMember(DataType="string", Description="The API Key required for authentication", IsRequired=true)
    api_key: Optional[str] = None
    """
    The API Key required for authentication
    """


    # @ApiMember(DataType="double", Description="Latitude of the user making this request")
    latitude: float = 0.0
    """
    Latitude of the user making this request
    """


    # @ApiMember(DataType="double", Description="Longitude of the user making this request")
    longitude: float = 0.0
    """
    Longitude of the user making this request
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ApiServiceResponse(IServiceResponse):
    # @ApiMember(Description="Information about the response.", IsRequired=true)
    description: Optional[str] = None
    """
    Information about the response.
    """


    # @ApiMember(Description="Heading or summary of the response.", IsRequired=true)
    heading: Optional[str] = None
    """
    Heading or summary of the response.
    """


    # @ApiMember(DataType="boolean", Description="Did the intended operation for this response complete successfully?", IsRequired=true)
    was_successful: bool = False
    """
    Did the intended operation for this response complete successfully?
    """


    response_status: Optional[ResponseStatus] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class UpliftProductData:
    uplift_product_id: int = 0
    uplift_id: int = 0
    product_id: int = 0
    unit_price: Decimal = decimal.Decimal(0)
    name: Optional[str] = None
    category: Optional[str] = None
    unit_barcode: Optional[str] = None
    unit_size: Optional[str] = None
    unit_weight: Decimal = decimal.Decimal(0)
    code: Optional[str] = None
    uplift_images: Optional[List[Object]] = None
    quantity: float = 0.0
    value: Decimal = decimal.Decimal(0)
    price_over_max: bool = False
    quantity_over_max: bool = False
    quantity_over_requirement: bool = False
    serial_number: Optional[str] = None
    batch_code: Optional[str] = None
    stock_status_id: int = 0
    lot_number: Optional[str] = None
    expiry_date: Optional[str] = None
    manufacture_date: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class UpliftSealData:
    unbagged: bool = False
    seal_number: Optional[str] = None
    antel_seal_number: Optional[str] = None
    products: Optional[List[UpliftProductData]] = None
    total_price: float = 0.0
    total_quantity: float = 0.0
    net_weight: float = 0.0
    gross_weight: float = 0.0
    billable_seal: bool = False
    invalid_antel_seal_number: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class UpliftClaimData:
    uplift_claim_id: int = 0
    claim_units: int = 0
    claim_number: Optional[str] = None
    claim_value: Decimal = decimal.Decimal(0)
    claim_document_images: Optional[List[Object]] = None
    return_order_number: Optional[str] = None
    line_count: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SaveUpliftResponse(ApiServiceResponse):
    uplift_id: int = 0
    uplift_auth_request_id: Optional[str] = None
    seals: Optional[List[UpliftSealData]] = None
    unbagged_items: Optional[UpliftSealData] = None
    claims: Optional[List[UpliftClaimData]] = None
    delete_from_device: bool = False
    image_ids: Optional[List[str]] = None
    invalid_antel_seal: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ProductData:
    product_id: int = 0
    principal_id: int = 0
    name: Optional[str] = None
    category: Optional[str] = None
    product_code: Optional[str] = None
    unit_barcode: Optional[str] = None
    carton_quantity: int = 0
    shrink_quantity: int = 0
    unit_quantity: int = 0
    carton_measurement: Optional[str] = None
    shrink_measurement: Optional[str] = None
    unit_measurement: Optional[str] = None
    carton_weight: float = 0.0
    shrink_weight: float = 0.0
    unit_weight: Decimal = decimal.Decimal(0)
    carton_price: Decimal = decimal.Decimal(0)
    shrink_price: Decimal = decimal.Decimal(0)
    unit_price: Decimal = decimal.Decimal(0)
    max_quantity: int = 0
    max_price: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ProductDataCategory:
    unit_barcode: Optional[str] = None
    products: Optional[List[ProductData]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ProductExceptionData:
    region: Optional[str] = None
    channel: Optional[str] = None
    product_id: int = 0
    stock_status_ids: Optional[List[int]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PrincipalData:
    principal_id: int = 0
    name: Optional[str] = None
    auth_letter_file_url: Optional[List[str]] = None
    logo_image_url: Optional[str] = None
    products: Optional[List[ProductDataCategory]] = None
    uplift_prefix: Optional[str] = None
    contact_name: Optional[str] = None
    contact_number: Optional[str] = None
    contact_email: Optional[str] = None
    allow_product_lookup: bool = False
    has_logo: bool = False
    has_auth_letter: bool = False
    seal_net_weight_mandatory: bool = False
    allow_billable_seals: bool = False
    capture_serial_number: bool = False
    batch_codes_mandatory: bool = False
    capture_manufacture_and_expiry_date: bool = False
    product_exceptions: Optional[List[ProductExceptionData]] = None
    uses_own_seal_numbers: bool = False


class ActionOutsideMaxDistanceType(IntEnum):
    WARN = 0
    BLOCK = 1


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class TemplateProductData:
    name: Optional[str] = None
    product_code: Optional[str] = None
    barcode: Optional[str] = None
    status_qty: Optional[Dict[int, int]] = None
    return_value: Decimal = decimal.Decimal(0)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class UpliftRequestSealData:
    number: Optional[str] = None
    weight: float = 0.0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class UpliftTemplateData:
    total_value: Decimal = decimal.Decimal(0)
    products: Optional[List[TemplateProductData]] = None
    seals: Optional[List[UpliftRequestSealData]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StockStatusData:
    id: int = 0
    name: Optional[str] = None
    photo_required: bool = False
    color: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SealTemplateProduct:
    product_id: int = 0
    name: Optional[str] = None
    product_stock_status_id: int = 0
    quantity: int = 0
    serial_number: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SealTemplateItemData:
    seal_number: Optional[str] = None
    product_stock_status: int = 0
    products: Optional[List[SealTemplateProduct]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SealTemplateData:
    items: Optional[List[SealTemplateItemData]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AppointmentPrincipleData:
    principle: Optional[PrincipalData] = None
    scheduled_date: Optional[str] = None
    uplift_schedule_id: int = 0
    uplift_schedule_principle_id: int = 0
    principle_outlet_id: int = 0
    verification_code: Optional[str] = None
    goods_to_collect: bool = False
    outlet_region: Optional[str] = None
    outlet_name: Optional[str] = None
    outlet_channel: Optional[str] = None
    outlet_latitude: float = 0.0
    outlet_longitude: float = 0.0
    max_submission_distance: float = 0.0
    action_outside_max_distance: Optional[ActionOutsideMaxDistanceType] = None
    completed_date: Optional[str] = None
    cancelled: bool = False
    completed: bool = False
    uplift_template: Optional[UpliftTemplateData] = None
    pre_populated: bool = False
    allowed_product_stock_statuses: Optional[List[StockStatusData]] = None
    note_to_operator: Optional[str] = None
    seal_template: Optional[SealTemplateData] = None
    pre_populated_with_seals: bool = False
    pre_authed: bool = False
    operator_name: Optional[str] = None
    system_user_id: int = 0
    product_exceptions: Optional[List[ProductExceptionData]] = None
    store_confirmation_document_url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class UpliftData:
    uplift_id: int = 0
    principle_outlet_id: int = 0
    uplift_schedule_id: int = 0
    uplift_schedule_principle_id: int = 0
    auth_request_id: Optional[str] = None
    delayed_auth: bool = False
    appointment_principle_data: Optional[AppointmentPrincipleData] = None
    auth_code: Optional[str] = None
    start_time: Optional[str] = None
    end_time: Optional[str] = None
    sequential_number: Optional[str] = None
    start_latitude: float = 0.0
    start_longitude: float = 0.0
    end_latitude: float = 0.0
    end_longitude: float = 0.0
    total_value: Decimal = decimal.Decimal(0)
    total_units: float = 0.0
    comments: Optional[str] = None
    adhoc_email_address: Optional[str] = None
    vat_value: Decimal = decimal.Decimal(0)
    status_images: Optional[Dict[int, List[Object]]] = None
    damaged_ok_images: Optional[List[Object]] = None
    damaged_bad_images: Optional[List[Object]] = None
    expired_images: Optional[List[Object]] = None
    recall_images: Optional[List[Object]] = None
    good_stock_images: Optional[List[Object]] = None
    deranged_images: Optional[List[Object]] = None
    overstocked_images: Optional[List[Object]] = None
    factory_fault_images: Optional[List[Object]] = None
    outlet_contact_name: Optional[str] = None
    outlet_contact_number: Optional[str] = None
    outlet_latitude: float = 0.0
    outlet_longitude: float = 0.0
    max_submission_distance: float = 0.0
    action_outside_max_distance: Optional[ActionOutsideMaxDistanceType] = None
    outlet_signature_image: Optional[Object] = None
    operator_signature_image: Optional[Object] = None
    operator_reg_number_image: Optional[Object] = None
    seals: Optional[List[UpliftSealData]] = None
    invalid_antel_seal: bool = False
    unbagged_items: Optional[UpliftSealData] = None
    authorised: bool = False
    claims: Optional[List[UpliftClaimData]] = None
    last_updated: datetime.datetime = datetime.datetime(1, 1, 1)
    last_synced: datetime.datetime = datetime.datetime(1, 1, 1)
    checked_out_device_id: Optional[str] = None
    checked_out_operator_name: Optional[str] = None
    incomplete_uplift_id: Optional[str] = None
    pause_reason: Optional[str] = None
    store_confirmation_document_url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SaveUplift(ApiServiceRequest):
    uplift: Optional[UpliftData] = None

Python SaveUplift 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 /uplift HTTP/1.1 
Host: antel.api.dev.86degrees.com 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	uplift: 
	{
		upliftId: 0,
		principleOutletId: 0,
		upliftScheduleId: 0,
		upliftSchedulePrincipleId: 0,
		delayedAuth: False,
		appointmentPrincipleData: 
		{
			principle: 
			{
				principalId: 0,
				name: String,
				authLetterFileUrl: 
				[
					String
				],
				logoImageUrl: String,
				products: 
				[
					{
						unitBarcode: String,
						products: 
						[
							{
								productId: 0,
								principalId: 0,
								name: String,
								category: String,
								productCode: String,
								unitBarcode: String,
								cartonQuantity: 0,
								shrinkQuantity: 0,
								unitQuantity: 0,
								cartonMeasurement: String,
								shrinkMeasurement: String,
								unitMeasurement: String,
								cartonWeight: 0,
								shrinkWeight: 0,
								unitWeight: 0,
								cartonPrice: 0,
								shrinkPrice: 0,
								unitPrice: 0,
								maxQuantity: 0,
								maxPrice: 0
							}
						]
					}
				],
				upliftPrefix: String,
				contactName: String,
				contactNumber: String,
				contactEmail: String,
				allowProductLookup: False,
				hasLogo: False,
				hasAuthLetter: False,
				sealNetWeightMandatory: False,
				allowBillableSeals: False,
				captureSerialNumber: False,
				batchCodesMandatory: False,
				captureManufactureAndExpiryDate: False,
				productExceptions: 
				[
					{
						region: String,
						channel: String,
						productId: 0,
						stockStatusIds: 
						[
							0
						]
					}
				],
				usesOwnSealNumbers: False
			},
			scheduledDate: String,
			upliftScheduleId: 0,
			upliftSchedulePrincipleId: 0,
			principleOutletId: 0,
			verificationCode: String,
			goodsToCollect: False,
			outletRegion: String,
			outletName: String,
			outletChannel: String,
			outletLatitude: 0,
			outletLongitude: 0,
			maxSubmissionDistance: 0,
			actionOutsideMaxDistance: 0,
			completedDate: String,
			cancelled: False,
			completed: False,
			upliftTemplate: 
			{
				totalValue: 0,
				products: 
				[
					{
						name: String,
						productCode: String,
						barcode: String,
						statusQty: 
						{
							0: 0
						},
						returnValue: 0
					}
				],
				seals: 
				[
					{
						number: String,
						weight: 0
					}
				]
			},
			prePopulated: False,
			allowedProductStockStatuses: 
			[
				{
					id: 0,
					name: String,
					photoRequired: False,
					color: String
				}
			],
			noteToOperator: String,
			sealTemplate: 
			{
				items: 
				[
					{
						sealNumber: String,
						productStockStatus: 0,
						products: 
						[
							{
								productId: 0,
								name: String,
								productStockStatusId: 0,
								quantity: 0,
								serialNumber: String
							}
						]
					}
				]
			},
			prePopulatedWithSeals: False,
			preAuthed: False,
			operatorName: String,
			systemUserId: 0,
			productExceptions: 
			[
				{
					region: String,
					channel: String,
					productId: 0,
					stockStatusIds: 
					[
						0
					]
				}
			],
			storeConfirmationDocumentUrl: String
		},
		authCode: String,
		startTime: String,
		endTime: String,
		sequentialNumber: String,
		startLatitude: 0,
		startLongitude: 0,
		endLatitude: 0,
		endLongitude: 0,
		totalValue: 0,
		totalUnits: 0,
		comments: String,
		adhocEmailAddress: String,
		vatValue: 0,
		statusImages: 
		{
			0: 
			[
				{
					
				}
			]
		},
		damagedOkImages: 
		[
			{
				
			}
		],
		damagedBadImages: 
		[
			{
				
			}
		],
		expiredImages: 
		[
			{
				
			}
		],
		recallImages: 
		[
			{
				
			}
		],
		goodStockImages: 
		[
			{
				
			}
		],
		derangedImages: 
		[
			{
				
			}
		],
		overstockedImages: 
		[
			{
				
			}
		],
		factoryFaultImages: 
		[
			{
				
			}
		],
		outletContactName: String,
		outletContactNumber: String,
		outletLatitude: 0,
		outletLongitude: 0,
		maxSubmissionDistance: 0,
		actionOutsideMaxDistance: 0,
		outletSignatureImage: {},
		operatorSignatureImage: {},
		operatorRegNumberImage: {},
		seals: 
		[
			{
				unbagged: False,
				sealNumber: String,
				antelSealNumber: String,
				products: 
				[
					{
						upliftProductId: 0,
						upliftId: 0,
						productId: 0,
						unitPrice: 0,
						name: String,
						category: String,
						unitBarcode: String,
						unitSize: String,
						unitWeight: 0,
						code: String,
						upliftImages: 
						[
							{
								
							}
						],
						quantity: 0,
						value: 0,
						priceOverMax: False,
						quantityOverMax: False,
						quantityOverRequirement: False,
						serialNumber: String,
						batchCode: String,
						stockStatusId: 0,
						lotNumber: String,
						expiryDate: String,
						manufactureDate: String
					}
				],
				totalPrice: 0,
				totalQuantity: 0,
				netWeight: 0,
				grossWeight: 0,
				billableSeal: False,
				invalidAntelSealNumber: False
			}
		],
		invalidAntelSeal: False,
		unbaggedItems: 
		{
			unbagged: False,
			sealNumber: String,
			antelSealNumber: String,
			products: 
			[
				{
					upliftProductId: 0,
					upliftId: 0,
					productId: 0,
					unitPrice: 0,
					name: String,
					category: String,
					unitBarcode: String,
					unitSize: String,
					unitWeight: 0,
					code: String,
					upliftImages: 
					[
						{
							
						}
					],
					quantity: 0,
					value: 0,
					priceOverMax: False,
					quantityOverMax: False,
					quantityOverRequirement: False,
					serialNumber: String,
					batchCode: String,
					stockStatusId: 0,
					lotNumber: String,
					expiryDate: String,
					manufactureDate: String
				}
			],
			totalPrice: 0,
			totalQuantity: 0,
			netWeight: 0,
			grossWeight: 0,
			billableSeal: False,
			invalidAntelSealNumber: False
		},
		authorised: False,
		claims: 
		[
			{
				upliftClaimId: 0,
				claimUnits: 0,
				claimNumber: String,
				claimValue: 0,
				claimDocumentImages: 
				[
					{
						
					}
				],
				returnOrderNumber: String,
				lineCount: 0
			}
		],
		lastUpdated: 0001-01-01,
		lastSynced: 0001-01-01,
		checkedOutOperatorName: String,
		pauseReason: String,
		storeConfirmationDocumentUrl: String
	},
	apiKey: String,
	latitude: 0,
	longitude: 0
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	upliftId: 0,
	seals: 
	[
		{
			unbagged: False,
			sealNumber: String,
			antelSealNumber: String,
			products: 
			[
				{
					upliftProductId: 0,
					upliftId: 0,
					productId: 0,
					unitPrice: 0,
					name: String,
					category: String,
					unitBarcode: String,
					unitSize: String,
					unitWeight: 0,
					code: String,
					upliftImages: 
					[
						{
							
						}
					],
					quantity: 0,
					value: 0,
					priceOverMax: False,
					quantityOverMax: False,
					quantityOverRequirement: False,
					serialNumber: String,
					batchCode: String,
					stockStatusId: 0,
					lotNumber: String,
					expiryDate: String,
					manufactureDate: String
				}
			],
			totalPrice: 0,
			totalQuantity: 0,
			netWeight: 0,
			grossWeight: 0,
			billableSeal: False,
			invalidAntelSealNumber: False
		}
	],
	unbaggedItems: 
	{
		unbagged: False,
		sealNumber: String,
		antelSealNumber: String,
		products: 
		[
			{
				upliftProductId: 0,
				upliftId: 0,
				productId: 0,
				unitPrice: 0,
				name: String,
				category: String,
				unitBarcode: String,
				unitSize: String,
				unitWeight: 0,
				code: String,
				upliftImages: 
				[
					{
						
					}
				],
				quantity: 0,
				value: 0,
				priceOverMax: False,
				quantityOverMax: False,
				quantityOverRequirement: False,
				serialNumber: String,
				batchCode: String,
				stockStatusId: 0,
				lotNumber: String,
				expiryDate: String,
				manufactureDate: String
			}
		],
		totalPrice: 0,
		totalQuantity: 0,
		netWeight: 0,
		grossWeight: 0,
		billableSeal: False,
		invalidAntelSealNumber: False
	},
	claims: 
	[
		{
			upliftClaimId: 0,
			claimUnits: 0,
			claimNumber: String,
			claimValue: 0,
			claimDocumentImages: 
			[
				{
					
				}
			],
			returnOrderNumber: String,
			lineCount: 0
		}
	],
	deleteFromDevice: False,
	imageIds: 
	[
		String
	],
	invalidAntelSeal: False,
	description: String,
	heading: String,
	wasSuccessful: False,
	responseStatus: 
	{
		errorCode: String,
		message: String,
		stackTrace: String,
		errors: 
		[
			{
				errorCode: String,
				fieldName: String,
				message: String,
				meta: 
				{
					String: String
				}
			}
		],
		meta: 
		{
			String: String
		}
	}
}