S Spwig Marketplace
Australia Post
Shipping Provider

Australia Post

by Spwig ✓ Verified · v2.1.0
0 installs
Free

Install directly from your Spwig admin → Don't have Spwig yet?

Screenshots

About this component

Production-ready Australia Post shipping integration meeting full lodgement validation requirements. Supports order management, basket management (10,000 items), validation services, all product features (ATL, Safe Drop, DG), and 4 account types (eParcel, StarTrack, Same Day, On Demand). Complete workflow from validation to manifest generation.

Versions

v2.1.0
2026-08-01

- SECURITY/FIX: buy_label now implements the base (shipment_id, rate, options) signature — label purchase was previously broken (TypeError) when invoked by the platform.
- SECURITY: the billable create-shipment POST is no longer auto-retried, preventing duplicate paid shipments after an ambiguous network failure; shipment_reference is set from the platform shipment id for reconciliation.
- cancel_label now requires the Australia Post shipment id and refuses to void the wrong identifier (previously a tracking number was mislabelled as the shipment id).
- Refund honesty: cancellation reports a refund only when the API confirms it (no fabricated refunded=true / refund amount).
- Purchased-label cost is taken from the shipment response, not the rate quote.

v2.0.2
2025-11-06

# Changelog

All notable changes to the Australia Post Shipping Provider will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.0.0] - 2025-11-06

**Major Release: Production-Ready with Full Lodgement Validation Support**

This release implements complete Australia Post lodgement validation requirements and introduces comprehensive order management, basket management, validation services, and product feature support for all 4 account types.

### Added

#### Order Management (New Module)
- **OrderManager** class for complete order lifecycle management
- Create orders from shipments (PUT /orders endpoint)
- Automatic order splitting when exceeding 2,000 items per order
- Order size validation with configurable limits:
- Hard limit: 2,000 items per order (lodgement requirement)
- Warning threshold: 1,800 items
- Order retrieval with caching (GET /orders/{id})
- Order summary/manifest generation (GET /orders/{id}/summary)
- Order status tracking and state management
- Split order creation with sequential numbering
- Order metadata and reference support
- Order validation before creation

#### Basket Management (New Module)
- **BasketManager** class for pre-order shipment tracking
- Track up to 10,000 items before order creation
- Add/remove shipments with item count tracking
- Basket capacity validation:
- Hard limit: 10,000 items
- Warning threshold: 8,000 items
- Basket locking mechanism to prevent modifications during order creation
- Basket statistics (average items per shipment, largest/smallest shipments)
- Basket snapshots for state persistence
- Restore from snapshot capability
- Basket status reporting with remaining capacity
- Clear basket operation with lock validation

#### Enhanced Shipment Management (New Module)
- **ShipmentManager** class for advanced shipment operations
- Retrieve individual shipment details (GET /shipments/{id})
- List and filter shipments (GET /shipments)
- Update shipments before order creation (PUT /shipments/{id})
- Delete items from shipments (DELETE /shipments/{id}/items/{item_id})
- Update individual items (PUT /shipments/{id}/items/{item_id})
- Shipment caching for performance
- Shipment filtering by status, date range, and reference

#### Validation Services (New Module)
- **ValidationService** class for pre-flight validation
- Suburb and postcode validation (POST /postcode/validate)
- Address serviceability lookup (POST /serviceability)
- Pre-flight shipment validation (POST /shipments/validate)
- Batch shipment validation support
- Validation result caching with MD5 hash keys
- Configurable cache TTL (default: 1 hour)
- Validation suggestions for incorrect addresses
- Cache status reporting
- Cache clearing capability

#### Enhanced Pricing Service (New Module)
- **PricingService** class for detailed pricing operations
- Individual shipment pricing (POST /prices/items)
- Estimated Time of Arrival calculation (POST /eta)
- Service comparison with pricing breakdown
- Decimal precision for accurate calculations
- Price caching for performance
- Detailed surcharge breakdown (fuel, handling, etc.)
- Tax calculation (GST)
- Currency support

#### Product Features Support (New Module)
- **ShipmentFeatures** class for product feature management
- Authority To Leave (ATL) support with location specification
- Safe Drop support with instructions
- Signature on Delivery (standard and adult signature)
- Dangerous Goods declarations (class, UN number, packing group)
- SSCC barcode support (18-digit validation)
- Returns management with reference tracking
- Delivery instructions (250 character limit)
- Feature compatibility validation per product code
- Complete FEATURE_COMPATIBILITY matrix for all product codes
- Get supported features by product code
- Feature conflict detection
- SSCC formatting helper

#### Adhoc Pickup Scheduling (New Module)
- **PickupService** class for pickup management
- Schedule adhoc pickups (POST /pickups)
- Three time slot options:
- Morning (8:00-12:00)
- Afternoon (12:00-17:00)
- All day (8:00-17:00)
- Pickup date validation (not in past, max 30 days future)
- Retrieve pickup details (GET /pickups/{id})
- Cancel scheduled pickups (DELETE /pickups/{id})
- Update pickup details (PUT /pickups/{id})
- Pickup address specification
- Multiple shipment IDs per pickup

#### Account Type Support
- Full support for 4 distinct account types:
- **eParcel** (10-digit, prefix 2): Domestic parcels with ATL, Safe Drop
- **StarTrack** (8-digit): Premium services with transfers, book-ins, transit cover
- **Same Day** (10-digit, prefix 3): Metro same-day delivery
- **On Demand** (10-digit, prefix 1): Flexible delivery services
- Account type detection from account number format
- Service code restrictions by account type
- Feature compatibility per account type

#### Exception Handling
- New exception types:
- **AustraliaPostOrderError**: Order creation and management failures
- **AustraliaPostBasketError**: Basket operation failures
- **AustraliaPostPickupError**: Pickup scheduling failures
- Enhanced error codes:
- ORDER_CREATION_FAILED
- ORDER_SIZE_EXCEEDED
- ORDER_NOT_FOUND
- BASKET_LIMIT_EXCEEDED
- BASKET_LOCKED
- BASKET_EMPTY
- SHIPMENT_NOT_IN_BASKET
- PICKUP_NOT_FOUND
- INVALID_TIME_SLOT
- INVALID_PICKUP_DATE
- PAST_DATE
- DATE_TOO_FAR
- Error code to exception mapping for new errors

#### Provider Integration
- 33 new public methods added to AustraliaPostProvider:
- **Order Methods** (4): create_order, create_order_with_split, get_order, get_order_summary
- **Basket Methods** (5): add_to_basket, remove_from_basket, clear_basket, get_basket_status, get_basket_snapshot
- **Shipment Methods** (6): get_shipment, list_shipments, update_shipment, delete_shipment_item, update_shipment_item, get_shipment_items
- **Validation Methods** (5): validate_suburb, lookup_serviceability, validate_shipments, clear_validation_cache, get_validation_cache_status
- **Pricing Methods** (3): get_individual_shipment_price, calculate_eta, compare_service_prices
- **Feature Methods** (6): add_authority_to_leave, add_safe_drop, add_signature_required, add_dangerous_goods, add_delivery_instructions, validate_shipment_features
- **Pickup Methods** (4): schedule_adhoc_pickup, get_pickup_details, cancel_pickup, update_pickup
- All managers initialized in provider constructor
- Manager instances accessible via provider attributes

#### Capabilities
- 15 new capabilities added (total 24):
- **orders**: Order creation and management
- **order_summary**: Order summary/manifest generation
- **order_splitting**: Automatic order splitting
- **basket_management**: Pre-order basket tracking
- **shipment_retrieval**: Get shipment details
- **shipment_update**: Update shipments before order
- **address_validation**: Suburb/postcode validation
- **serviceability**: Address serviceability checks
- **individual_pricing**: Per-shipment pricing
- **eta_calculation**: Delivery time estimates
- **authority_to_leave**: ATL feature support
- **safe_drop**: Safe Drop feature support
- **dangerous_goods**: DG declarations
- **sscc_barcode**: SSCC barcode support
- **adhoc_pickup**: Pickup scheduling

#### Configuration
- New credential field: **account_type**
- Options: eparcel, startrack, same_day, on_demand
- Used for service code and feature validation
- New configuration options:
- basket_max_size (default: 10000)
- order_max_size (default: 2000)
- validation_cache_ttl (default: 3600 seconds)
- enable_auto_order_split (default: true)

#### Testing
- Comprehensive test suite with 70+ test cases:
- **fixtures.py**: Test data for all 4 account types
- **test_basket_manager.py**: 30+ unit tests for basket operations
- **test_features.py**: 40+ unit tests for feature management
- **test_integration.py**: Integration tests for all 4 account types
- Test coverage includes:
- Complete production workflows per account type
- Account type detection and validation
- Order splitting at 2,000 items
- Basket capacity limits
- Validation caching
- Feature compatibility validation
- Pickup scheduling
- Error handling

#### Documentation
- Completely rewritten README.md (775 lines) with:
- Production workflow documentation (7-step process)
- All 4 account types explained
- Service codes by account type with feature matrix
- Complete usage examples for all 33 new methods
- 24 capabilities documented
- 15 new API endpoints listed
- Best practices for production use
- Comprehensive error handling guide
- Rate limiting documentation
- ENHANCEMENT_IMPLEMENTATION_PLAN.md with 640+ checkboxes tracking all features
- Enhanced inline documentation with detailed docstrings

### Changed

#### Provider Class
- Provider now initializes 7 manager instances
- Constructor accepts expanded config dictionary
- Capabilities property returns 24 capabilities (up from 9)
- Enhanced error handling across all operations

#### Account Number Handling
- Enhanced detect_service_type() for 4 account types
- Improved account number validation
- Service type detection based on account prefix

#### Error Messages
- More detailed error messages with context
- Error codes included in all exceptions
- Suggestions provided for validation errors

#### Caching Strategy
- MD5 hash cache keys for consistent lookups
- Separate caches for different operation types
- Configurable cache TTL
- Cache validation before returning cached results

### Fixed

- Order size validation now enforces 2,000 item limit
- Basket capacity properly enforced at 10,000 items
- Account number padding for all account types
- SSCC barcode validation (18 digits exactly)
- Feature compatibility validation per product code
- Pickup date validation (past dates rejected)
- Cache key collision prevention via MD5 hashing

### Technical Details

#### New API Endpoints
- PUT /shipping/v1/orders - Create order from shipments
- GET /shipping/v1/orders/{id} - Retrieve order details
- GET /shipping/v1/orders/{id}/summary - Get order manifest
- GET /shipping/v1/shipments/{id} - Get shipment details
- GET /shipping/v1/shipments - List shipments
- PUT /shipping/v1/shipments/{id} - Update shipment
- DELETE /shipping/v1/shipments/{id}/items/{item_id} - Delete item
- POST /shipping/v1/postcode/validate - Validate suburb/postcode
- POST /shipping/v1/serviceability - Check serviceability
- POST /shipping/v1/shipments/validate - Pre-flight validation
- POST /shipping/v1/prices/items - Individual pricing
- POST /shipping/v1/eta - Calculate ETA
- POST /shipping/v1/pickups - Schedule pickup
- GET /shipping/v1/pickups/{id} - Get pickup details
- DELETE /shipping/v1/pickups/{id} - Cancel pickup

#### Lodgement Validation Requirements
- Order size limit: 2,000 items maximum per order ✓
- Automatic order splitting for larger batches ✓
- Pre-flight validation before order creation ✓
- Address validation with suggestions ✓
- Product feature compatibility validation ✓
- SSCC barcode format validation ✓
- Dangerous goods declaration support ✓

#### Architecture
- Modular design with separate manager classes
- Dependency injection for auth client
- Clean separation of concerns
- Caching at service level
- State management in basket
- Thread-safe operations

#### Performance
- Result caching reduces API calls
- Connection pooling via requests.Session
- MD5 hash cache keys for fast lookups
- Batch validation support
- Efficient order splitting algorithm

### Deprecated

- None (backward compatible with v1.0.1 for core operations)

### Removed

- "Planned for 2.0.0" section from CHANGELOG (now implemented)

### Security

- Enhanced input validation across all modules
- Cache key hashing prevents injection attacks
- Account number format validation
- SSCC barcode strict validation
- Date validation for pickup scheduling

### Migration from v1.0.1

For existing implementations:
1. Add `account_type` to credentials configuration
2. Optionally configure basket/order limits in config
3. Use new manager methods via provider instance
4. Update error handling for new exception types
5. Test with all 4 account types if applicable

Backward compatibility maintained for:
- Rate calculation (get_rates)
- Label generation (create_shipment, create_labels)
- Tracking (track_shipment)
- Shipment void (void_shipment)

### Notes

- This release meets all Australia Post lodgement validation requirements
- Tested with test/development API credentials for all 4 account types
- Production-ready for immediate deployment
- Comprehensive test coverage with integration tests
- All modules fully documented with examples

### References

- Australia Post API Documentation: https://developers.auspost.com.au/
- Lodgement Integration Validation Requirements (internal)
- Test credentials and endpoints (internal)

---

## [1.0.1] - 2025-10-24

### Added
- Provider logo (SVG/PNG format, 200x200px) for display in provider browse interface
- Logo metadata in manifest.json

## [1.0.0] - 2025-10-24

### Added

#### Authentication & Security
- HTTP Basic Authentication using API Key (UUID format) and password
- API Key format validation (UUID pattern: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
- Secure credential handling with base64 encoding
- Account number format validation (8 or 10 digits)
- Automatic account number padding (10-digit Australia Post, 8-digit StarTrack)
- Service type auto-detection based on account number format

#### Rate Calculation
- Rate quote support for domestic shipments
- Rate quote support for international shipments
- Multiple service options (Regular, Express, Courier, etc.)
- JSON request/response format
- Weight and dimension conversion utilities
- Address formatting for Australia Post API
- Product code mappings for service names

#### Label Generation
- Two-step label generation process:
- Step 1: POST /shipping/v1/shipments (create shipment)
- Step 2: POST /shipping/v1/labels (create labels)
- Synchronous label generation for <250 parcels (wait_for_label_url=true)
- Asynchronous label generation with polling for >=250 parcels
- PDF label format support
- Shipment void/refund capability (DELETE /shipping/v1/shipments)
- Tracking number assignment
- Total charge calculation

#### Tracking
- Real-time tracking lookup (GET /shipping/v1/track)
- Rate limiting for tracking API (10 requests per 60 seconds)
- Token bucket rate limiter implementation
- Thread-safe rate limiting with automatic waiting
- Event history with timestamps and locations
- Status mapping from descriptive text to platform codes
- Multiple tracking number support

#### Rate Limiting
- RateLimiter class with token bucket algorithm
- TrackingRateLimiter pre-configured for tracking API
- Global rate limiter instance with thread safety
- Automatic token refill based on elapsed time
- Configurable strict/non-strict modes
- Rate limiter status reporting

#### Error Handling
- Comprehensive exception hierarchy:
- AustraliaPostError (base exception)
- AustraliaPostAuthenticationError (401)
- AustraliaPostValidationError (400, 40002)
- AustraliaPostAccountError (40001, 41001, 41002, 41003)
- AustraliaPostShipmentError (44013)
- AustraliaPostRateLimitError (429)
- AustraliaPostServiceUnavailableError (503)
- AustraliaPostAPIError (500, 502)
- AustraliaPostTimeoutError (504)
- AustraliaPostTrackingError
- AustraliaPostLabelError
- AustraliaPostNetworkError
- Error code to exception mapping
- JSON error response parsing (multiple formats)
- Detailed error messages with error codes
- Request exception handling (timeouts, connection errors)

#### Retry Logic
- Exponential backoff retry decorator
- Configurable retry parameters:
- Maximum attempts (default: 3)
- Base delay (default: 1.0s)
- Maximum delay (default: 60.0s)
- Exponential base (default: 2.0)
- Jitter enabled (±25%)
- Retry on specific HTTP status codes (429, 500, 502, 503, 504)
- Retry on specific exceptions (Timeout, ConnectionError, ServiceUnavailable, RateLimit)
- Respect Retry-After header for rate limit errors
- BackoffPolicy class implementing Australia Post recommendations
- Elevated error tracking (>5 minutes triggers backoff mode)
- Recovery detection (5 minutes without errors exits backoff)

#### Utilities
- Account number padding (pad_account_number)
- Service type detection (detect_service_type)
- Address formatting (format_address)
- Parcel formatting (format_parcel)
- Tracking status mapping (map_tracking_status)
- Postcode cleaning and validation
- Phone number cleaning and formatting
- Date/datetime parsing
- Tracking number validation
- Product name lookup
- Money formatting
- Unit conversion functions:
- kg_to_grams, grams_to_kg
- cm_to_mm, mm_to_cm
- pounds_to_kg, kg_to_pounds
- inches_to_cm, cm_to_inches
- Error message extraction

#### Configuration
- Environment support (test/production)
- Base URL selection based on environment
- Credential schema definition
- Capability declaration
- Service code definitions
- Connection pooling via requests.Session

#### Documentation
- Comprehensive README.md with:
- API Key format explanation
- Account number padding guide
- Two-step label generation process
- Rate limiting documentation
- Service code reference
- Error code reference
- Request/response examples
- Setup instructions
- Usage examples
- Troubleshooting guide
- 8-step setup wizard (setup_instructions.html):
- Introduction with capability overview
- API Key generation instructions
- UUID format explanation
- Credential entry guidance
- Account number format guide
- Connection testing
- Service configuration
- Advanced configuration tab
- Troubleshooting tab
- Component manifest.json with:
- Credential schema with validation patterns
- Supported services list
- API information
- Error codes reference
- Feature descriptions
- CHANGELOG.md following Keep a Changelog format
- Docstrings with examples throughout codebase

#### Internationalization
- Django i18n support (gettext_lazy)
- All user-facing text translatable
- Font Awesome icons for UI elements
- Bootstrap styling for setup wizard
- Admin tabs with proper CSS classes

#### Testing & Validation
- Credential format validation
- Connection testing (GET /shipping/v1/accounts)
- API Key UUID validation
- Account number length validation
- Postcode format validation
- Tracking number format validation

### Technical Details

#### API Information
- Base URL (Production): https://digitalapi.auspost.com.au
- Base URL (Test): https://digitalapi-test.auspost.com.au
- API Version: v1
- Format: JSON (not XML)
- Authentication: HTTP Basic (API Key:Password)

#### Required Headers
- Authorization: Basic {base64(api_key:password)}
- Account-Number: {10-digit padded or 8-digit}
- Content-Type: application/json
- Accept: application/json

#### Supported Countries
- AU (Australia) - domestic
- INTL (International)

#### Capabilities
- rates: true
- labels: true
- tracking: true
- international: true
- returns: true
- pickup: true
- insurance: true
- signature: true
- dangerous_goods: true

#### Dependencies
- Python: >=3.8
- Django: >=4.2
- requests: >=2.31.0
- python-dateutil: >=2.8.0

### Known Limitations

- Tracking API rate limit: 10 requests per 60 seconds (enforced by rate limiter)
- Synchronous label generation recommended for <250 parcels only
- Asynchronous label generation requires polling (not implemented in v1.0.0)
- API Key must be UUID format (no traditional username support)
- Account numbers must be properly formatted (8 or 10 digits)

### Notes

- This is the initial release of the Australia Post provider
- Follows Australia Post REST API documentation
- Implements recommended backoff policy for elevated errors
- Thread-safe rate limiting for concurrent requests
- Connection pooling for improved performance
- Comprehensive error handling with specific error codes

### References

- Australia Post Developer Portal: https://developers.auspost.com.au/
- API Documentation: https://developers.auspost.com.au/apis/shipping
- REST Authentication: HTTP Basic with UUID API Key
- Rate Limiting: 10 requests per 60 seconds (tracking)

---

## Future Versions

### Planned for 1.1.0
- Pickup scheduling implementation
- Customs declaration support for international shipments
- Dangerous goods declaration support
- Address validation API integration
- Manifest generation for batch shipping
- Enhanced logging with request/response debugging
- Webhook support for tracking updates

### Planned for 1.2.0
- Async label generation with polling implementation
- Batch label generation for >250 parcels
- Label reprinting capability
- Shipment history reporting
- Cost analysis and reporting
- Service level agreement (SLA) tracking

### Planned for 2.0.0
- GraphQL API support (if available)
- Enhanced caching strategies
- Bulk operations optimization
- Advanced rate shopping algorithms
- Multi-account support
- Comprehensive test suite with mocks

---

[1.0.0]: https://github.com/spwig/australiapost-provider/releases/tag/v1.0.0

v2.0.1
2025-11-06

# Changelog

All notable changes to the Australia Post Shipping Provider will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.0.0] - 2025-11-06

**Major Release: Production-Ready with Full Lodgement Validation Support**

This release implements complete Australia Post lodgement validation requirements and introduces comprehensive order management, basket management, validation services, and product feature support for all 4 account types.

### Added

#### Order Management (New Module)
- **OrderManager** class for complete order lifecycle management
- Create orders from shipments (PUT /orders endpoint)
- Automatic order splitting when exceeding 2,000 items per order
- Order size validation with configurable limits:
- Hard limit: 2,000 items per order (lodgement requirement)
- Warning threshold: 1,800 items
- Order retrieval with caching (GET /orders/{id})
- Order summary/manifest generation (GET /orders/{id}/summary)
- Order status tracking and state management
- Split order creation with sequential numbering
- Order metadata and reference support
- Order validation before creation

#### Basket Management (New Module)
- **BasketManager** class for pre-order shipment tracking
- Track up to 10,000 items before order creation
- Add/remove shipments with item count tracking
- Basket capacity validation:
- Hard limit: 10,000 items
- Warning threshold: 8,000 items
- Basket locking mechanism to prevent modifications during order creation
- Basket statistics (average items per shipment, largest/smallest shipments)
- Basket snapshots for state persistence
- Restore from snapshot capability
- Basket status reporting with remaining capacity
- Clear basket operation with lock validation

#### Enhanced Shipment Management (New Module)
- **ShipmentManager** class for advanced shipment operations
- Retrieve individual shipment details (GET /shipments/{id})
- List and filter shipments (GET /shipments)
- Update shipments before order creation (PUT /shipments/{id})
- Delete items from shipments (DELETE /shipments/{id}/items/{item_id})
- Update individual items (PUT /shipments/{id}/items/{item_id})
- Shipment caching for performance
- Shipment filtering by status, date range, and reference

#### Validation Services (New Module)
- **ValidationService** class for pre-flight validation
- Suburb and postcode validation (POST /postcode/validate)
- Address serviceability lookup (POST /serviceability)
- Pre-flight shipment validation (POST /shipments/validate)
- Batch shipment validation support
- Validation result caching with MD5 hash keys
- Configurable cache TTL (default: 1 hour)
- Validation suggestions for incorrect addresses
- Cache status reporting
- Cache clearing capability

#### Enhanced Pricing Service (New Module)
- **PricingService** class for detailed pricing operations
- Individual shipment pricing (POST /prices/items)
- Estimated Time of Arrival calculation (POST /eta)
- Service comparison with pricing breakdown
- Decimal precision for accurate calculations
- Price caching for performance
- Detailed surcharge breakdown (fuel, handling, etc.)
- Tax calculation (GST)
- Currency support

#### Product Features Support (New Module)
- **ShipmentFeatures** class for product feature management
- Authority To Leave (ATL) support with location specification
- Safe Drop support with instructions
- Signature on Delivery (standard and adult signature)
- Dangerous Goods declarations (class, UN number, packing group)
- SSCC barcode support (18-digit validation)
- Returns management with reference tracking
- Delivery instructions (250 character limit)
- Feature compatibility validation per product code
- Complete FEATURE_COMPATIBILITY matrix for all product codes
- Get supported features by product code
- Feature conflict detection
- SSCC formatting helper

#### Adhoc Pickup Scheduling (New Module)
- **PickupService** class for pickup management
- Schedule adhoc pickups (POST /pickups)
- Three time slot options:
- Morning (8:00-12:00)
- Afternoon (12:00-17:00)
- All day (8:00-17:00)
- Pickup date validation (not in past, max 30 days future)
- Retrieve pickup details (GET /pickups/{id})
- Cancel scheduled pickups (DELETE /pickups/{id})
- Update pickup details (PUT /pickups/{id})
- Pickup address specification
- Multiple shipment IDs per pickup

#### Account Type Support
- Full support for 4 distinct account types:
- **eParcel** (10-digit, prefix 2): Domestic parcels with ATL, Safe Drop
- **StarTrack** (8-digit): Premium services with transfers, book-ins, transit cover
- **Same Day** (10-digit, prefix 3): Metro same-day delivery
- **On Demand** (10-digit, prefix 1): Flexible delivery services
- Account type detection from account number format
- Service code restrictions by account type
- Feature compatibility per account type

#### Exception Handling
- New exception types:
- **AustraliaPostOrderError**: Order creation and management failures
- **AustraliaPostBasketError**: Basket operation failures
- **AustraliaPostPickupError**: Pickup scheduling failures
- Enhanced error codes:
- ORDER_CREATION_FAILED
- ORDER_SIZE_EXCEEDED
- ORDER_NOT_FOUND
- BASKET_LIMIT_EXCEEDED
- BASKET_LOCKED
- BASKET_EMPTY
- SHIPMENT_NOT_IN_BASKET
- PICKUP_NOT_FOUND
- INVALID_TIME_SLOT
- INVALID_PICKUP_DATE
- PAST_DATE
- DATE_TOO_FAR
- Error code to exception mapping for new errors

#### Provider Integration
- 33 new public methods added to AustraliaPostProvider:
- **Order Methods** (4): create_order, create_order_with_split, get_order, get_order_summary
- **Basket Methods** (5): add_to_basket, remove_from_basket, clear_basket, get_basket_status, get_basket_snapshot
- **Shipment Methods** (6): get_shipment, list_shipments, update_shipment, delete_shipment_item, update_shipment_item, get_shipment_items
- **Validation Methods** (5): validate_suburb, lookup_serviceability, validate_shipments, clear_validation_cache, get_validation_cache_status
- **Pricing Methods** (3): get_individual_shipment_price, calculate_eta, compare_service_prices
- **Feature Methods** (6): add_authority_to_leave, add_safe_drop, add_signature_required, add_dangerous_goods, add_delivery_instructions, validate_shipment_features
- **Pickup Methods** (4): schedule_adhoc_pickup, get_pickup_details, cancel_pickup, update_pickup
- All managers initialized in provider constructor
- Manager instances accessible via provider attributes

#### Capabilities
- 15 new capabilities added (total 24):
- **orders**: Order creation and management
- **order_summary**: Order summary/manifest generation
- **order_splitting**: Automatic order splitting
- **basket_management**: Pre-order basket tracking
- **shipment_retrieval**: Get shipment details
- **shipment_update**: Update shipments before order
- **address_validation**: Suburb/postcode validation
- **serviceability**: Address serviceability checks
- **individual_pricing**: Per-shipment pricing
- **eta_calculation**: Delivery time estimates
- **authority_to_leave**: ATL feature support
- **safe_drop**: Safe Drop feature support
- **dangerous_goods**: DG declarations
- **sscc_barcode**: SSCC barcode support
- **adhoc_pickup**: Pickup scheduling

#### Configuration
- New credential field: **account_type**
- Options: eparcel, startrack, same_day, on_demand
- Used for service code and feature validation
- New configuration options:
- basket_max_size (default: 10000)
- order_max_size (default: 2000)
- validation_cache_ttl (default: 3600 seconds)
- enable_auto_order_split (default: true)

#### Testing
- Comprehensive test suite with 70+ test cases:
- **fixtures.py**: Test data for all 4 account types
- **test_basket_manager.py**: 30+ unit tests for basket operations
- **test_features.py**: 40+ unit tests for feature management
- **test_integration.py**: Integration tests for all 4 account types
- Test coverage includes:
- Complete production workflows per account type
- Account type detection and validation
- Order splitting at 2,000 items
- Basket capacity limits
- Validation caching
- Feature compatibility validation
- Pickup scheduling
- Error handling

#### Documentation
- Completely rewritten README.md (775 lines) with:
- Production workflow documentation (7-step process)
- All 4 account types explained
- Service codes by account type with feature matrix
- Complete usage examples for all 33 new methods
- 24 capabilities documented
- 15 new API endpoints listed
- Best practices for production use
- Comprehensive error handling guide
- Rate limiting documentation
- ENHANCEMENT_IMPLEMENTATION_PLAN.md with 640+ checkboxes tracking all features
- Enhanced inline documentation with detailed docstrings

### Changed

#### Provider Class
- Provider now initializes 7 manager instances
- Constructor accepts expanded config dictionary
- Capabilities property returns 24 capabilities (up from 9)
- Enhanced error handling across all operations

#### Account Number Handling
- Enhanced detect_service_type() for 4 account types
- Improved account number validation
- Service type detection based on account prefix

#### Error Messages
- More detailed error messages with context
- Error codes included in all exceptions
- Suggestions provided for validation errors

#### Caching Strategy
- MD5 hash cache keys for consistent lookups
- Separate caches for different operation types
- Configurable cache TTL
- Cache validation before returning cached results

### Fixed

- Order size validation now enforces 2,000 item limit
- Basket capacity properly enforced at 10,000 items
- Account number padding for all account types
- SSCC barcode validation (18 digits exactly)
- Feature compatibility validation per product code
- Pickup date validation (past dates rejected)
- Cache key collision prevention via MD5 hashing

### Technical Details

#### New API Endpoints
- PUT /shipping/v1/orders - Create order from shipments
- GET /shipping/v1/orders/{id} - Retrieve order details
- GET /shipping/v1/orders/{id}/summary - Get order manifest
- GET /shipping/v1/shipments/{id} - Get shipment details
- GET /shipping/v1/shipments - List shipments
- PUT /shipping/v1/shipments/{id} - Update shipment
- DELETE /shipping/v1/shipments/{id}/items/{item_id} - Delete item
- POST /shipping/v1/postcode/validate - Validate suburb/postcode
- POST /shipping/v1/serviceability - Check serviceability
- POST /shipping/v1/shipments/validate - Pre-flight validation
- POST /shipping/v1/prices/items - Individual pricing
- POST /shipping/v1/eta - Calculate ETA
- POST /shipping/v1/pickups - Schedule pickup
- GET /shipping/v1/pickups/{id} - Get pickup details
- DELETE /shipping/v1/pickups/{id} - Cancel pickup

#### Lodgement Validation Requirements
- Order size limit: 2,000 items maximum per order ✓
- Automatic order splitting for larger batches ✓
- Pre-flight validation before order creation ✓
- Address validation with suggestions ✓
- Product feature compatibility validation ✓
- SSCC barcode format validation ✓
- Dangerous goods declaration support ✓

#### Architecture
- Modular design with separate manager classes
- Dependency injection for auth client
- Clean separation of concerns
- Caching at service level
- State management in basket
- Thread-safe operations

#### Performance
- Result caching reduces API calls
- Connection pooling via requests.Session
- MD5 hash cache keys for fast lookups
- Batch validation support
- Efficient order splitting algorithm

### Deprecated

- None (backward compatible with v1.0.1 for core operations)

### Removed

- "Planned for 2.0.0" section from CHANGELOG (now implemented)

### Security

- Enhanced input validation across all modules
- Cache key hashing prevents injection attacks
- Account number format validation
- SSCC barcode strict validation
- Date validation for pickup scheduling

### Migration from v1.0.1

For existing implementations:
1. Add `account_type` to credentials configuration
2. Optionally configure basket/order limits in config
3. Use new manager methods via provider instance
4. Update error handling for new exception types
5. Test with all 4 account types if applicable

Backward compatibility maintained for:
- Rate calculation (get_rates)
- Label generation (create_shipment, create_labels)
- Tracking (track_shipment)
- Shipment void (void_shipment)

### Notes

- This release meets all Australia Post lodgement validation requirements
- Tested with test/development API credentials for all 4 account types
- Production-ready for immediate deployment
- Comprehensive test coverage with integration tests
- All modules fully documented with examples

### References

- Australia Post API Documentation: https://developers.auspost.com.au/
- Lodgement Integration Validation Requirements (internal)
- Test credentials and endpoints (internal)

---

## [1.0.1] - 2025-10-24

### Added
- Provider logo (SVG/PNG format, 200x200px) for display in provider browse interface
- Logo metadata in manifest.json

## [1.0.0] - 2025-10-24

### Added

#### Authentication & Security
- HTTP Basic Authentication using API Key (UUID format) and password
- API Key format validation (UUID pattern: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
- Secure credential handling with base64 encoding
- Account number format validation (8 or 10 digits)
- Automatic account number padding (10-digit Australia Post, 8-digit StarTrack)
- Service type auto-detection based on account number format

#### Rate Calculation
- Rate quote support for domestic shipments
- Rate quote support for international shipments
- Multiple service options (Regular, Express, Courier, etc.)
- JSON request/response format
- Weight and dimension conversion utilities
- Address formatting for Australia Post API
- Product code mappings for service names

#### Label Generation
- Two-step label generation process:
- Step 1: POST /shipping/v1/shipments (create shipment)
- Step 2: POST /shipping/v1/labels (create labels)
- Synchronous label generation for <250 parcels (wait_for_label_url=true)
- Asynchronous label generation with polling for >=250 parcels
- PDF label format support
- Shipment void/refund capability (DELETE /shipping/v1/shipments)
- Tracking number assignment
- Total charge calculation

#### Tracking
- Real-time tracking lookup (GET /shipping/v1/track)
- Rate limiting for tracking API (10 requests per 60 seconds)
- Token bucket rate limiter implementation
- Thread-safe rate limiting with automatic waiting
- Event history with timestamps and locations
- Status mapping from descriptive text to platform codes
- Multiple tracking number support

#### Rate Limiting
- RateLimiter class with token bucket algorithm
- TrackingRateLimiter pre-configured for tracking API
- Global rate limiter instance with thread safety
- Automatic token refill based on elapsed time
- Configurable strict/non-strict modes
- Rate limiter status reporting

#### Error Handling
- Comprehensive exception hierarchy:
- AustraliaPostError (base exception)
- AustraliaPostAuthenticationError (401)
- AustraliaPostValidationError (400, 40002)
- AustraliaPostAccountError (40001, 41001, 41002, 41003)
- AustraliaPostShipmentError (44013)
- AustraliaPostRateLimitError (429)
- AustraliaPostServiceUnavailableError (503)
- AustraliaPostAPIError (500, 502)
- AustraliaPostTimeoutError (504)
- AustraliaPostTrackingError
- AustraliaPostLabelError
- AustraliaPostNetworkError
- Error code to exception mapping
- JSON error response parsing (multiple formats)
- Detailed error messages with error codes
- Request exception handling (timeouts, connection errors)

#### Retry Logic
- Exponential backoff retry decorator
- Configurable retry parameters:
- Maximum attempts (default: 3)
- Base delay (default: 1.0s)
- Maximum delay (default: 60.0s)
- Exponential base (default: 2.0)
- Jitter enabled (±25%)
- Retry on specific HTTP status codes (429, 500, 502, 503, 504)
- Retry on specific exceptions (Timeout, ConnectionError, ServiceUnavailable, RateLimit)
- Respect Retry-After header for rate limit errors
- BackoffPolicy class implementing Australia Post recommendations
- Elevated error tracking (>5 minutes triggers backoff mode)
- Recovery detection (5 minutes without errors exits backoff)

#### Utilities
- Account number padding (pad_account_number)
- Service type detection (detect_service_type)
- Address formatting (format_address)
- Parcel formatting (format_parcel)
- Tracking status mapping (map_tracking_status)
- Postcode cleaning and validation
- Phone number cleaning and formatting
- Date/datetime parsing
- Tracking number validation
- Product name lookup
- Money formatting
- Unit conversion functions:
- kg_to_grams, grams_to_kg
- cm_to_mm, mm_to_cm
- pounds_to_kg, kg_to_pounds
- inches_to_cm, cm_to_inches
- Error message extraction

#### Configuration
- Environment support (test/production)
- Base URL selection based on environment
- Credential schema definition
- Capability declaration
- Service code definitions
- Connection pooling via requests.Session

#### Documentation
- Comprehensive README.md with:
- API Key format explanation
- Account number padding guide
- Two-step label generation process
- Rate limiting documentation
- Service code reference
- Error code reference
- Request/response examples
- Setup instructions
- Usage examples
- Troubleshooting guide
- 8-step setup wizard (setup_instructions.html):
- Introduction with capability overview
- API Key generation instructions
- UUID format explanation
- Credential entry guidance
- Account number format guide
- Connection testing
- Service configuration
- Advanced configuration tab
- Troubleshooting tab
- Component manifest.json with:
- Credential schema with validation patterns
- Supported services list
- API information
- Error codes reference
- Feature descriptions
- CHANGELOG.md following Keep a Changelog format
- Docstrings with examples throughout codebase

#### Internationalization
- Django i18n support (gettext_lazy)
- All user-facing text translatable
- Font Awesome icons for UI elements
- Bootstrap styling for setup wizard
- Admin tabs with proper CSS classes

#### Testing & Validation
- Credential format validation
- Connection testing (GET /shipping/v1/accounts)
- API Key UUID validation
- Account number length validation
- Postcode format validation
- Tracking number format validation

### Technical Details

#### API Information
- Base URL (Production): https://digitalapi.auspost.com.au
- Base URL (Test): https://digitalapi-test.auspost.com.au
- API Version: v1
- Format: JSON (not XML)
- Authentication: HTTP Basic (API Key:Password)

#### Required Headers
- Authorization: Basic {base64(api_key:password)}
- Account-Number: {10-digit padded or 8-digit}
- Content-Type: application/json
- Accept: application/json

#### Supported Countries
- AU (Australia) - domestic
- INTL (International)

#### Capabilities
- rates: true
- labels: true
- tracking: true
- international: true
- returns: true
- pickup: true
- insurance: true
- signature: true
- dangerous_goods: true

#### Dependencies
- Python: >=3.8
- Django: >=4.2
- requests: >=2.31.0
- python-dateutil: >=2.8.0

### Known Limitations

- Tracking API rate limit: 10 requests per 60 seconds (enforced by rate limiter)
- Synchronous label generation recommended for <250 parcels only
- Asynchronous label generation requires polling (not implemented in v1.0.0)
- API Key must be UUID format (no traditional username support)
- Account numbers must be properly formatted (8 or 10 digits)

### Notes

- This is the initial release of the Australia Post provider
- Follows Australia Post REST API documentation
- Implements recommended backoff policy for elevated errors
- Thread-safe rate limiting for concurrent requests
- Connection pooling for improved performance
- Comprehensive error handling with specific error codes

### References

- Australia Post Developer Portal: https://developers.auspost.com.au/
- API Documentation: https://developers.auspost.com.au/apis/shipping
- REST Authentication: HTTP Basic with UUID API Key
- Rate Limiting: 10 requests per 60 seconds (tracking)

---

## Future Versions

### Planned for 1.1.0
- Pickup scheduling implementation
- Customs declaration support for international shipments
- Dangerous goods declaration support
- Address validation API integration
- Manifest generation for batch shipping
- Enhanced logging with request/response debugging
- Webhook support for tracking updates

### Planned for 1.2.0
- Async label generation with polling implementation
- Batch label generation for >250 parcels
- Label reprinting capability
- Shipment history reporting
- Cost analysis and reporting
- Service level agreement (SLA) tracking

### Planned for 2.0.0
- GraphQL API support (if available)
- Enhanced caching strategies
- Bulk operations optimization
- Advanced rate shopping algorithms
- Multi-account support
- Comprehensive test suite with mocks

---

[1.0.0]: https://github.com/spwig/australiapost-provider/releases/tag/v1.0.0

v2.0.0
2025-11-06

# Changelog

All notable changes to the Australia Post Shipping Provider will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.0.0] - 2025-11-06

**Major Release: Production-Ready with Full Lodgement Validation Support**

This release implements complete Australia Post lodgement validation requirements and introduces comprehensive order management, basket management, validation services, and product feature support for all 4 account types.

### Added

#### Order Management (New Module)
- **OrderManager** class for complete order lifecycle management
- Create orders from shipments (PUT /orders endpoint)
- Automatic order splitting when exceeding 2,000 items per order
- Order size validation with configurable limits:
- Hard limit: 2,000 items per order (lodgement requirement)
- Warning threshold: 1,800 items
- Order retrieval with caching (GET /orders/{id})
- Order summary/manifest generation (GET /orders/{id}/summary)
- Order status tracking and state management
- Split order creation with sequential numbering
- Order metadata and reference support
- Order validation before creation

#### Basket Management (New Module)
- **BasketManager** class for pre-order shipment tracking
- Track up to 10,000 items before order creation
- Add/remove shipments with item count tracking
- Basket capacity validation:
- Hard limit: 10,000 items
- Warning threshold: 8,000 items
- Basket locking mechanism to prevent modifications during order creation
- Basket statistics (average items per shipment, largest/smallest shipments)
- Basket snapshots for state persistence
- Restore from snapshot capability
- Basket status reporting with remaining capacity
- Clear basket operation with lock validation

#### Enhanced Shipment Management (New Module)
- **ShipmentManager** class for advanced shipment operations
- Retrieve individual shipment details (GET /shipments/{id})
- List and filter shipments (GET /shipments)
- Update shipments before order creation (PUT /shipments/{id})
- Delete items from shipments (DELETE /shipments/{id}/items/{item_id})
- Update individual items (PUT /shipments/{id}/items/{item_id})
- Shipment caching for performance
- Shipment filtering by status, date range, and reference

#### Validation Services (New Module)
- **ValidationService** class for pre-flight validation
- Suburb and postcode validation (POST /postcode/validate)
- Address serviceability lookup (POST /serviceability)
- Pre-flight shipment validation (POST /shipments/validate)
- Batch shipment validation support
- Validation result caching with MD5 hash keys
- Configurable cache TTL (default: 1 hour)
- Validation suggestions for incorrect addresses
- Cache status reporting
- Cache clearing capability

#### Enhanced Pricing Service (New Module)
- **PricingService** class for detailed pricing operations
- Individual shipment pricing (POST /prices/items)
- Estimated Time of Arrival calculation (POST /eta)
- Service comparison with pricing breakdown
- Decimal precision for accurate calculations
- Price caching for performance
- Detailed surcharge breakdown (fuel, handling, etc.)
- Tax calculation (GST)
- Currency support

#### Product Features Support (New Module)
- **ShipmentFeatures** class for product feature management
- Authority To Leave (ATL) support with location specification
- Safe Drop support with instructions
- Signature on Delivery (standard and adult signature)
- Dangerous Goods declarations (class, UN number, packing group)
- SSCC barcode support (18-digit validation)
- Returns management with reference tracking
- Delivery instructions (250 character limit)
- Feature compatibility validation per product code
- Complete FEATURE_COMPATIBILITY matrix for all product codes
- Get supported features by product code
- Feature conflict detection
- SSCC formatting helper

#### Adhoc Pickup Scheduling (New Module)
- **PickupService** class for pickup management
- Schedule adhoc pickups (POST /pickups)
- Three time slot options:
- Morning (8:00-12:00)
- Afternoon (12:00-17:00)
- All day (8:00-17:00)
- Pickup date validation (not in past, max 30 days future)
- Retrieve pickup details (GET /pickups/{id})
- Cancel scheduled pickups (DELETE /pickups/{id})
- Update pickup details (PUT /pickups/{id})
- Pickup address specification
- Multiple shipment IDs per pickup

#### Account Type Support
- Full support for 4 distinct account types:
- **eParcel** (10-digit, prefix 2): Domestic parcels with ATL, Safe Drop
- **StarTrack** (8-digit): Premium services with transfers, book-ins, transit cover
- **Same Day** (10-digit, prefix 3): Metro same-day delivery
- **On Demand** (10-digit, prefix 1): Flexible delivery services
- Account type detection from account number format
- Service code restrictions by account type
- Feature compatibility per account type

#### Exception Handling
- New exception types:
- **AustraliaPostOrderError**: Order creation and management failures
- **AustraliaPostBasketError**: Basket operation failures
- **AustraliaPostPickupError**: Pickup scheduling failures
- Enhanced error codes:
- ORDER_CREATION_FAILED
- ORDER_SIZE_EXCEEDED
- ORDER_NOT_FOUND
- BASKET_LIMIT_EXCEEDED
- BASKET_LOCKED
- BASKET_EMPTY
- SHIPMENT_NOT_IN_BASKET
- PICKUP_NOT_FOUND
- INVALID_TIME_SLOT
- INVALID_PICKUP_DATE
- PAST_DATE
- DATE_TOO_FAR
- Error code to exception mapping for new errors

#### Provider Integration
- 33 new public methods added to AustraliaPostProvider:
- **Order Methods** (4): create_order, create_order_with_split, get_order, get_order_summary
- **Basket Methods** (5): add_to_basket, remove_from_basket, clear_basket, get_basket_status, get_basket_snapshot
- **Shipment Methods** (6): get_shipment, list_shipments, update_shipment, delete_shipment_item, update_shipment_item, get_shipment_items
- **Validation Methods** (5): validate_suburb, lookup_serviceability, validate_shipments, clear_validation_cache, get_validation_cache_status
- **Pricing Methods** (3): get_individual_shipment_price, calculate_eta, compare_service_prices
- **Feature Methods** (6): add_authority_to_leave, add_safe_drop, add_signature_required, add_dangerous_goods, add_delivery_instructions, validate_shipment_features
- **Pickup Methods** (4): schedule_adhoc_pickup, get_pickup_details, cancel_pickup, update_pickup
- All managers initialized in provider constructor
- Manager instances accessible via provider attributes

#### Capabilities
- 15 new capabilities added (total 24):
- **orders**: Order creation and management
- **order_summary**: Order summary/manifest generation
- **order_splitting**: Automatic order splitting
- **basket_management**: Pre-order basket tracking
- **shipment_retrieval**: Get shipment details
- **shipment_update**: Update shipments before order
- **address_validation**: Suburb/postcode validation
- **serviceability**: Address serviceability checks
- **individual_pricing**: Per-shipment pricing
- **eta_calculation**: Delivery time estimates
- **authority_to_leave**: ATL feature support
- **safe_drop**: Safe Drop feature support
- **dangerous_goods**: DG declarations
- **sscc_barcode**: SSCC barcode support
- **adhoc_pickup**: Pickup scheduling

#### Configuration
- New credential field: **account_type**
- Options: eparcel, startrack, same_day, on_demand
- Used for service code and feature validation
- New configuration options:
- basket_max_size (default: 10000)
- order_max_size (default: 2000)
- validation_cache_ttl (default: 3600 seconds)
- enable_auto_order_split (default: true)

#### Testing
- Comprehensive test suite with 70+ test cases:
- **fixtures.py**: Test data for all 4 account types
- **test_basket_manager.py**: 30+ unit tests for basket operations
- **test_features.py**: 40+ unit tests for feature management
- **test_integration.py**: Integration tests for all 4 account types
- Test coverage includes:
- Complete production workflows per account type
- Account type detection and validation
- Order splitting at 2,000 items
- Basket capacity limits
- Validation caching
- Feature compatibility validation
- Pickup scheduling
- Error handling

#### Documentation
- Completely rewritten README.md (775 lines) with:
- Production workflow documentation (7-step process)
- All 4 account types explained
- Service codes by account type with feature matrix
- Complete usage examples for all 33 new methods
- 24 capabilities documented
- 15 new API endpoints listed
- Best practices for production use
- Comprehensive error handling guide
- Rate limiting documentation
- ENHANCEMENT_IMPLEMENTATION_PLAN.md with 640+ checkboxes tracking all features
- Enhanced inline documentation with detailed docstrings

### Changed

#### Provider Class
- Provider now initializes 7 manager instances
- Constructor accepts expanded config dictionary
- Capabilities property returns 24 capabilities (up from 9)
- Enhanced error handling across all operations

#### Account Number Handling
- Enhanced detect_service_type() for 4 account types
- Improved account number validation
- Service type detection based on account prefix

#### Error Messages
- More detailed error messages with context
- Error codes included in all exceptions
- Suggestions provided for validation errors

#### Caching Strategy
- MD5 hash cache keys for consistent lookups
- Separate caches for different operation types
- Configurable cache TTL
- Cache validation before returning cached results

### Fixed

- Order size validation now enforces 2,000 item limit
- Basket capacity properly enforced at 10,000 items
- Account number padding for all account types
- SSCC barcode validation (18 digits exactly)
- Feature compatibility validation per product code
- Pickup date validation (past dates rejected)
- Cache key collision prevention via MD5 hashing

### Technical Details

#### New API Endpoints
- PUT /shipping/v1/orders - Create order from shipments
- GET /shipping/v1/orders/{id} - Retrieve order details
- GET /shipping/v1/orders/{id}/summary - Get order manifest
- GET /shipping/v1/shipments/{id} - Get shipment details
- GET /shipping/v1/shipments - List shipments
- PUT /shipping/v1/shipments/{id} - Update shipment
- DELETE /shipping/v1/shipments/{id}/items/{item_id} - Delete item
- POST /shipping/v1/postcode/validate - Validate suburb/postcode
- POST /shipping/v1/serviceability - Check serviceability
- POST /shipping/v1/shipments/validate - Pre-flight validation
- POST /shipping/v1/prices/items - Individual pricing
- POST /shipping/v1/eta - Calculate ETA
- POST /shipping/v1/pickups - Schedule pickup
- GET /shipping/v1/pickups/{id} - Get pickup details
- DELETE /shipping/v1/pickups/{id} - Cancel pickup

#### Lodgement Validation Requirements
- Order size limit: 2,000 items maximum per order ✓
- Automatic order splitting for larger batches ✓
- Pre-flight validation before order creation ✓
- Address validation with suggestions ✓
- Product feature compatibility validation ✓
- SSCC barcode format validation ✓
- Dangerous goods declaration support ✓

#### Architecture
- Modular design with separate manager classes
- Dependency injection for auth client
- Clean separation of concerns
- Caching at service level
- State management in basket
- Thread-safe operations

#### Performance
- Result caching reduces API calls
- Connection pooling via requests.Session
- MD5 hash cache keys for fast lookups
- Batch validation support
- Efficient order splitting algorithm

### Deprecated

- None (backward compatible with v1.0.1 for core operations)

### Removed

- "Planned for 2.0.0" section from CHANGELOG (now implemented)

### Security

- Enhanced input validation across all modules
- Cache key hashing prevents injection attacks
- Account number format validation
- SSCC barcode strict validation
- Date validation for pickup scheduling

### Migration from v1.0.1

For existing implementations:
1. Add `account_type` to credentials configuration
2. Optionally configure basket/order limits in config
3. Use new manager methods via provider instance
4. Update error handling for new exception types
5. Test with all 4 account types if applicable

Backward compatibility maintained for:
- Rate calculation (get_rates)
- Label generation (create_shipment, create_labels)
- Tracking (track_shipment)
- Shipment void (void_shipment)

### Notes

- This release meets all Australia Post lodgement validation requirements
- Tested with test/development API credentials for all 4 account types
- Production-ready for immediate deployment
- Comprehensive test coverage with integration tests
- All modules fully documented with examples

### References

- Australia Post API Documentation: https://developers.auspost.com.au/
- Lodgement Integration Validation Requirements (internal)
- Test credentials and endpoints (internal)

---

## [1.0.1] - 2025-10-24

### Added
- Provider logo (SVG/PNG format, 200x200px) for display in provider browse interface
- Logo metadata in manifest.json

## [1.0.0] - 2025-10-24

### Added

#### Authentication & Security
- HTTP Basic Authentication using API Key (UUID format) and password
- API Key format validation (UUID pattern: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
- Secure credential handling with base64 encoding
- Account number format validation (8 or 10 digits)
- Automatic account number padding (10-digit Australia Post, 8-digit StarTrack)
- Service type auto-detection based on account number format

#### Rate Calculation
- Rate quote support for domestic shipments
- Rate quote support for international shipments
- Multiple service options (Regular, Express, Courier, etc.)
- JSON request/response format
- Weight and dimension conversion utilities
- Address formatting for Australia Post API
- Product code mappings for service names

#### Label Generation
- Two-step label generation process:
- Step 1: POST /shipping/v1/shipments (create shipment)
- Step 2: POST /shipping/v1/labels (create labels)
- Synchronous label generation for <250 parcels (wait_for_label_url=true)
- Asynchronous label generation with polling for >=250 parcels
- PDF label format support
- Shipment void/refund capability (DELETE /shipping/v1/shipments)
- Tracking number assignment
- Total charge calculation

#### Tracking
- Real-time tracking lookup (GET /shipping/v1/track)
- Rate limiting for tracking API (10 requests per 60 seconds)
- Token bucket rate limiter implementation
- Thread-safe rate limiting with automatic waiting
- Event history with timestamps and locations
- Status mapping from descriptive text to platform codes
- Multiple tracking number support

#### Rate Limiting
- RateLimiter class with token bucket algorithm
- TrackingRateLimiter pre-configured for tracking API
- Global rate limiter instance with thread safety
- Automatic token refill based on elapsed time
- Configurable strict/non-strict modes
- Rate limiter status reporting

#### Error Handling
- Comprehensive exception hierarchy:
- AustraliaPostError (base exception)
- AustraliaPostAuthenticationError (401)
- AustraliaPostValidationError (400, 40002)
- AustraliaPostAccountError (40001, 41001, 41002, 41003)
- AustraliaPostShipmentError (44013)
- AustraliaPostRateLimitError (429)
- AustraliaPostServiceUnavailableError (503)
- AustraliaPostAPIError (500, 502)
- AustraliaPostTimeoutError (504)
- AustraliaPostTrackingError
- AustraliaPostLabelError
- AustraliaPostNetworkError
- Error code to exception mapping
- JSON error response parsing (multiple formats)
- Detailed error messages with error codes
- Request exception handling (timeouts, connection errors)

#### Retry Logic
- Exponential backoff retry decorator
- Configurable retry parameters:
- Maximum attempts (default: 3)
- Base delay (default: 1.0s)
- Maximum delay (default: 60.0s)
- Exponential base (default: 2.0)
- Jitter enabled (±25%)
- Retry on specific HTTP status codes (429, 500, 502, 503, 504)
- Retry on specific exceptions (Timeout, ConnectionError, ServiceUnavailable, RateLimit)
- Respect Retry-After header for rate limit errors
- BackoffPolicy class implementing Australia Post recommendations
- Elevated error tracking (>5 minutes triggers backoff mode)
- Recovery detection (5 minutes without errors exits backoff)

#### Utilities
- Account number padding (pad_account_number)
- Service type detection (detect_service_type)
- Address formatting (format_address)
- Parcel formatting (format_parcel)
- Tracking status mapping (map_tracking_status)
- Postcode cleaning and validation
- Phone number cleaning and formatting
- Date/datetime parsing
- Tracking number validation
- Product name lookup
- Money formatting
- Unit conversion functions:
- kg_to_grams, grams_to_kg
- cm_to_mm, mm_to_cm
- pounds_to_kg, kg_to_pounds
- inches_to_cm, cm_to_inches
- Error message extraction

#### Configuration
- Environment support (test/production)
- Base URL selection based on environment
- Credential schema definition
- Capability declaration
- Service code definitions
- Connection pooling via requests.Session

#### Documentation
- Comprehensive README.md with:
- API Key format explanation
- Account number padding guide
- Two-step label generation process
- Rate limiting documentation
- Service code reference
- Error code reference
- Request/response examples
- Setup instructions
- Usage examples
- Troubleshooting guide
- 8-step setup wizard (setup_instructions.html):
- Introduction with capability overview
- API Key generation instructions
- UUID format explanation
- Credential entry guidance
- Account number format guide
- Connection testing
- Service configuration
- Advanced configuration tab
- Troubleshooting tab
- Component manifest.json with:
- Credential schema with validation patterns
- Supported services list
- API information
- Error codes reference
- Feature descriptions
- CHANGELOG.md following Keep a Changelog format
- Docstrings with examples throughout codebase

#### Internationalization
- Django i18n support (gettext_lazy)
- All user-facing text translatable
- Font Awesome icons for UI elements
- Bootstrap styling for setup wizard
- Admin tabs with proper CSS classes

#### Testing & Validation
- Credential format validation
- Connection testing (GET /shipping/v1/accounts)
- API Key UUID validation
- Account number length validation
- Postcode format validation
- Tracking number format validation

### Technical Details

#### API Information
- Base URL (Production): https://digitalapi.auspost.com.au
- Base URL (Test): https://digitalapi-test.auspost.com.au
- API Version: v1
- Format: JSON (not XML)
- Authentication: HTTP Basic (API Key:Password)

#### Required Headers
- Authorization: Basic {base64(api_key:password)}
- Account-Number: {10-digit padded or 8-digit}
- Content-Type: application/json
- Accept: application/json

#### Supported Countries
- AU (Australia) - domestic
- INTL (International)

#### Capabilities
- rates: true
- labels: true
- tracking: true
- international: true
- returns: true
- pickup: true
- insurance: true
- signature: true
- dangerous_goods: true

#### Dependencies
- Python: >=3.8
- Django: >=4.2
- requests: >=2.31.0
- python-dateutil: >=2.8.0

### Known Limitations

- Tracking API rate limit: 10 requests per 60 seconds (enforced by rate limiter)
- Synchronous label generation recommended for <250 parcels only
- Asynchronous label generation requires polling (not implemented in v1.0.0)
- API Key must be UUID format (no traditional username support)
- Account numbers must be properly formatted (8 or 10 digits)

### Notes

- This is the initial release of the Australia Post provider
- Follows Australia Post REST API documentation
- Implements recommended backoff policy for elevated errors
- Thread-safe rate limiting for concurrent requests
- Connection pooling for improved performance
- Comprehensive error handling with specific error codes

### References

- Australia Post Developer Portal: https://developers.auspost.com.au/
- API Documentation: https://developers.auspost.com.au/apis/shipping
- REST Authentication: HTTP Basic with UUID API Key
- Rate Limiting: 10 requests per 60 seconds (tracking)

---

## Future Versions

### Planned for 1.1.0
- Pickup scheduling implementation
- Customs declaration support for international shipments
- Dangerous goods declaration support
- Address validation API integration
- Manifest generation for batch shipping
- Enhanced logging with request/response debugging
- Webhook support for tracking updates

### Planned for 1.2.0
- Async label generation with polling implementation
- Batch label generation for >250 parcels
- Label reprinting capability
- Shipment history reporting
- Cost analysis and reporting
- Service level agreement (SLA) tracking

### Planned for 2.0.0
- GraphQL API support (if available)
- Enhanced caching strategies
- Bulk operations optimization
- Advanced rate shopping algorithms
- Multi-account support
- Comprehensive test suite with mocks

---

[1.0.0]: https://github.com/spwig/australiapost-provider/releases/tag/v1.0.0

v1.0.1
2025-10-23

# Changelog

All notable changes to the Australia Post Shipping Provider will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.0.1] - 2025-10-24

### Added
- Provider logo (SVG/PNG format, 200x200px) for display in provider browse interface
- Logo metadata in manifest.json

## [1.0.0] - 2025-10-24

### Added

#### Authentication & Security
- HTTP Basic Authentication using API Key (UUID format) and password
- API Key format validation (UUID pattern: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
- Secure credential handling with base64 encoding
- Account number format validation (8 or 10 digits)
- Automatic account number padding (10-digit Australia Post, 8-digit StarTrack)
- Service type auto-detection based on account number format

#### Rate Calculation
- Rate quote support for domestic shipments
- Rate quote support for international shipments
- Multiple service options (Regular, Express, Courier, etc.)
- JSON request/response format
- Weight and dimension conversion utilities
- Address formatting for Australia Post API
- Product code mappings for service names

#### Label Generation
- Two-step label generation process:
- Step 1: POST /shipping/v1/shipments (create shipment)
- Step 2: POST /shipping/v1/labels (create labels)
- Synchronous label generation for <250 parcels (wait_for_label_url=true)
- Asynchronous label generation with polling for >=250 parcels
- PDF label format support
- Shipment void/refund capability (DELETE /shipping/v1/shipments)
- Tracking number assignment
- Total charge calculation

#### Tracking
- Real-time tracking lookup (GET /shipping/v1/track)
- Rate limiting for tracking API (10 requests per 60 seconds)
- Token bucket rate limiter implementation
- Thread-safe rate limiting with automatic waiting
- Event history with timestamps and locations
- Status mapping from descriptive text to platform codes
- Multiple tracking number support

#### Rate Limiting
- RateLimiter class with token bucket algorithm
- TrackingRateLimiter pre-configured for tracking API
- Global rate limiter instance with thread safety
- Automatic token refill based on elapsed time
- Configurable strict/non-strict modes
- Rate limiter status reporting

#### Error Handling
- Comprehensive exception hierarchy:
- AustraliaPostError (base exception)
- AustraliaPostAuthenticationError (401)
- AustraliaPostValidationError (400, 40002)
- AustraliaPostAccountError (40001, 41001, 41002, 41003)
- AustraliaPostShipmentError (44013)
- AustraliaPostRateLimitError (429)
- AustraliaPostServiceUnavailableError (503)
- AustraliaPostAPIError (500, 502)
- AustraliaPostTimeoutError (504)
- AustraliaPostTrackingError
- AustraliaPostLabelError
- AustraliaPostNetworkError
- Error code to exception mapping
- JSON error response parsing (multiple formats)
- Detailed error messages with error codes
- Request exception handling (timeouts, connection errors)

#### Retry Logic
- Exponential backoff retry decorator
- Configurable retry parameters:
- Maximum attempts (default: 3)
- Base delay (default: 1.0s)
- Maximum delay (default: 60.0s)
- Exponential base (default: 2.0)
- Jitter enabled (±25%)
- Retry on specific HTTP status codes (429, 500, 502, 503, 504)
- Retry on specific exceptions (Timeout, ConnectionError, ServiceUnavailable, RateLimit)
- Respect Retry-After header for rate limit errors
- BackoffPolicy class implementing Australia Post recommendations
- Elevated error tracking (>5 minutes triggers backoff mode)
- Recovery detection (5 minutes without errors exits backoff)

#### Utilities
- Account number padding (pad_account_number)
- Service type detection (detect_service_type)
- Address formatting (format_address)
- Parcel formatting (format_parcel)
- Tracking status mapping (map_tracking_status)
- Postcode cleaning and validation
- Phone number cleaning and formatting
- Date/datetime parsing
- Tracking number validation
- Product name lookup
- Money formatting
- Unit conversion functions:
- kg_to_grams, grams_to_kg
- cm_to_mm, mm_to_cm
- pounds_to_kg, kg_to_pounds
- inches_to_cm, cm_to_inches
- Error message extraction

#### Configuration
- Environment support (test/production)
- Base URL selection based on environment
- Credential schema definition
- Capability declaration
- Service code definitions
- Connection pooling via requests.Session

#### Documentation
- Comprehensive README.md with:
- API Key format explanation
- Account number padding guide
- Two-step label generation process
- Rate limiting documentation
- Service code reference
- Error code reference
- Request/response examples
- Setup instructions
- Usage examples
- Troubleshooting guide
- 8-step setup wizard (setup_instructions.html):
- Introduction with capability overview
- API Key generation instructions
- UUID format explanation
- Credential entry guidance
- Account number format guide
- Connection testing
- Service configuration
- Advanced configuration tab
- Troubleshooting tab
- Component manifest.json with:
- Credential schema with validation patterns
- Supported services list
- API information
- Error codes reference
- Feature descriptions
- CHANGELOG.md following Keep a Changelog format
- Docstrings with examples throughout codebase

#### Internationalization
- Django i18n support (gettext_lazy)
- All user-facing text translatable
- Font Awesome icons for UI elements
- Bootstrap styling for setup wizard
- Admin tabs with proper CSS classes

#### Testing & Validation
- Credential format validation
- Connection testing (GET /shipping/v1/accounts)
- API Key UUID validation
- Account number length validation
- Postcode format validation
- Tracking number format validation

### Technical Details

#### API Information
- Base URL (Production): https://digitalapi.auspost.com.au
- Base URL (Test): https://digitalapi-test.auspost.com.au
- API Version: v1
- Format: JSON (not XML)
- Authentication: HTTP Basic (API Key:Password)

#### Required Headers
- Authorization: Basic {base64(api_key:password)}
- Account-Number: {10-digit padded or 8-digit}
- Content-Type: application/json
- Accept: application/json

#### Supported Countries
- AU (Australia) - domestic
- INTL (International)

#### Capabilities
- rates: true
- labels: true
- tracking: true
- international: true
- returns: true
- pickup: true
- insurance: true
- signature: true
- dangerous_goods: true

#### Dependencies
- Python: >=3.8
- Django: >=4.2
- requests: >=2.31.0
- python-dateutil: >=2.8.0

### Known Limitations

- Tracking API rate limit: 10 requests per 60 seconds (enforced by rate limiter)
- Synchronous label generation recommended for <250 parcels only
- Asynchronous label generation requires polling (not implemented in v1.0.0)
- API Key must be UUID format (no traditional username support)
- Account numbers must be properly formatted (8 or 10 digits)

### Notes

- This is the initial release of the Australia Post provider
- Follows Australia Post REST API documentation
- Implements recommended backoff policy for elevated errors
- Thread-safe rate limiting for concurrent requests
- Connection pooling for improved performance
- Comprehensive error handling with specific error codes

### References

- Australia Post Developer Portal: https://developers.auspost.com.au/
- API Documentation: https://developers.auspost.com.au/apis/shipping
- REST Authentication: HTTP Basic with UUID API Key
- Rate Limiting: 10 requests per 60 seconds (tracking)

---

## Future Versions

### Planned for 1.1.0
- Pickup scheduling implementation
- Customs declaration support for international shipments
- Dangerous goods declaration support
- Address validation API integration
- Manifest generation for batch shipping
- Enhanced logging with request/response debugging
- Webhook support for tracking updates

### Planned for 1.2.0
- Async label generation with polling implementation
- Batch label generation for >250 parcels
- Label reprinting capability
- Shipment history reporting
- Cost analysis and reporting
- Service level agreement (SLA) tracking

### Planned for 2.0.0
- GraphQL API support (if available)
- Enhanced caching strategies
- Bulk operations optimization
- Advanced rate shopping algorithms
- Multi-account support
- Comprehensive test suite with mocks

---

[1.0.0]: https://github.com/spwig/australiapost-provider/releases/tag/v1.0.0

v1.0.0
2025-10-23

# Changelog

All notable changes to the Australia Post Shipping Provider will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.0.0] - 2025-10-24

### Added

#### Authentication & Security
- HTTP Basic Authentication using API Key (UUID format) and password
- API Key format validation (UUID pattern: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
- Secure credential handling with base64 encoding
- Account number format validation (8 or 10 digits)
- Automatic account number padding (10-digit Australia Post, 8-digit StarTrack)
- Service type auto-detection based on account number format

#### Rate Calculation
- Rate quote support for domestic shipments
- Rate quote support for international shipments
- Multiple service options (Regular, Express, Courier, etc.)
- JSON request/response format
- Weight and dimension conversion utilities
- Address formatting for Australia Post API
- Product code mappings for service names

#### Label Generation
- Two-step label generation process:
- Step 1: POST /shipping/v1/shipments (create shipment)
- Step 2: POST /shipping/v1/labels (create labels)
- Synchronous label generation for <250 parcels (wait_for_label_url=true)
- Asynchronous label generation with polling for >=250 parcels
- PDF label format support
- Shipment void/refund capability (DELETE /shipping/v1/shipments)
- Tracking number assignment
- Total charge calculation

#### Tracking
- Real-time tracking lookup (GET /shipping/v1/track)
- Rate limiting for tracking API (10 requests per 60 seconds)
- Token bucket rate limiter implementation
- Thread-safe rate limiting with automatic waiting
- Event history with timestamps and locations
- Status mapping from descriptive text to platform codes
- Multiple tracking number support

#### Rate Limiting
- RateLimiter class with token bucket algorithm
- TrackingRateLimiter pre-configured for tracking API
- Global rate limiter instance with thread safety
- Automatic token refill based on elapsed time
- Configurable strict/non-strict modes
- Rate limiter status reporting

#### Error Handling
- Comprehensive exception hierarchy:
- AustraliaPostError (base exception)
- AustraliaPostAuthenticationError (401)
- AustraliaPostValidationError (400, 40002)
- AustraliaPostAccountError (40001, 41001, 41002, 41003)
- AustraliaPostShipmentError (44013)
- AustraliaPostRateLimitError (429)
- AustraliaPostServiceUnavailableError (503)
- AustraliaPostAPIError (500, 502)
- AustraliaPostTimeoutError (504)
- AustraliaPostTrackingError
- AustraliaPostLabelError
- AustraliaPostNetworkError
- Error code to exception mapping
- JSON error response parsing (multiple formats)
- Detailed error messages with error codes
- Request exception handling (timeouts, connection errors)

#### Retry Logic
- Exponential backoff retry decorator
- Configurable retry parameters:
- Maximum attempts (default: 3)
- Base delay (default: 1.0s)
- Maximum delay (default: 60.0s)
- Exponential base (default: 2.0)
- Jitter enabled (±25%)
- Retry on specific HTTP status codes (429, 500, 502, 503, 504)
- Retry on specific exceptions (Timeout, ConnectionError, ServiceUnavailable, RateLimit)
- Respect Retry-After header for rate limit errors
- BackoffPolicy class implementing Australia Post recommendations
- Elevated error tracking (>5 minutes triggers backoff mode)
- Recovery detection (5 minutes without errors exits backoff)

#### Utilities
- Account number padding (pad_account_number)
- Service type detection (detect_service_type)
- Address formatting (format_address)
- Parcel formatting (format_parcel)
- Tracking status mapping (map_tracking_status)
- Postcode cleaning and validation
- Phone number cleaning and formatting
- Date/datetime parsing
- Tracking number validation
- Product name lookup
- Money formatting
- Unit conversion functions:
- kg_to_grams, grams_to_kg
- cm_to_mm, mm_to_cm
- pounds_to_kg, kg_to_pounds
- inches_to_cm, cm_to_inches
- Error message extraction

#### Configuration
- Environment support (test/production)
- Base URL selection based on environment
- Credential schema definition
- Capability declaration
- Service code definitions
- Connection pooling via requests.Session

#### Documentation
- Comprehensive README.md with:
- API Key format explanation
- Account number padding guide
- Two-step label generation process
- Rate limiting documentation
- Service code reference
- Error code reference
- Request/response examples
- Setup instructions
- Usage examples
- Troubleshooting guide
- 8-step setup wizard (setup_instructions.html):
- Introduction with capability overview
- API Key generation instructions
- UUID format explanation
- Credential entry guidance
- Account number format guide
- Connection testing
- Service configuration
- Advanced configuration tab
- Troubleshooting tab
- Component manifest.json with:
- Credential schema with validation patterns
- Supported services list
- API information
- Error codes reference
- Feature descriptions
- CHANGELOG.md following Keep a Changelog format
- Docstrings with examples throughout codebase

#### Internationalization
- Django i18n support (gettext_lazy)
- All user-facing text translatable
- Font Awesome icons for UI elements
- Bootstrap styling for setup wizard
- Admin tabs with proper CSS classes

#### Testing & Validation
- Credential format validation
- Connection testing (GET /shipping/v1/accounts)
- API Key UUID validation
- Account number length validation
- Postcode format validation
- Tracking number format validation

### Technical Details

#### API Information
- Base URL (Production): https://digitalapi.auspost.com.au
- Base URL (Test): https://digitalapi-test.auspost.com.au
- API Version: v1
- Format: JSON (not XML)
- Authentication: HTTP Basic (API Key:Password)

#### Required Headers
- Authorization: Basic {base64(api_key:password)}
- Account-Number: {10-digit padded or 8-digit}
- Content-Type: application/json
- Accept: application/json

#### Supported Countries
- AU (Australia) - domestic
- INTL (International)

#### Capabilities
- rates: true
- labels: true
- tracking: true
- international: true
- returns: true
- pickup: true
- insurance: true
- signature: true
- dangerous_goods: true

#### Dependencies
- Python: >=3.8
- Django: >=4.2
- requests: >=2.31.0
- python-dateutil: >=2.8.0

### Known Limitations

- Tracking API rate limit: 10 requests per 60 seconds (enforced by rate limiter)
- Synchronous label generation recommended for <250 parcels only
- Asynchronous label generation requires polling (not implemented in v1.0.0)
- API Key must be UUID format (no traditional username support)
- Account numbers must be properly formatted (8 or 10 digits)

### Notes

- This is the initial release of the Australia Post provider
- Follows Australia Post REST API documentation
- Implements recommended backoff policy for elevated errors
- Thread-safe rate limiting for concurrent requests
- Connection pooling for improved performance
- Comprehensive error handling with specific error codes

### References

- Australia Post Developer Portal: https://developers.auspost.com.au/
- API Documentation: https://developers.auspost.com.au/apis/shipping
- REST Authentication: HTTP Basic with UUID API Key
- Rate Limiting: 10 requests per 60 seconds (tracking)

---

## Future Versions

### Planned for 1.1.0
- Pickup scheduling implementation
- Customs declaration support for international shipments
- Dangerous goods declaration support
- Address validation API integration
- Manifest generation for batch shipping
- Enhanced logging with request/response debugging
- Webhook support for tracking updates

### Planned for 1.2.0
- Async label generation with polling implementation
- Batch label generation for >250 parcels
- Label reprinting capability
- Shipment history reporting
- Cost analysis and reporting
- Service level agreement (SLA) tracking

### Planned for 2.0.0
- GraphQL API support (if available)
- Enhanced caching strategies
- Bulk operations optimization
- Advanced rate shopping algorithms
- Multi-account support
- Comprehensive test suite with mocks

---

[1.0.0]: https://github.com/spwig/australiapost-provider/releases/tag/v1.0.0

Ready to install Australia Post?

Install from your Spwig admin → Marketplace tab. Don't have a Spwig install yet? The commerce platform is free and open source.

Get Spwig → Browse more