cronixweb / streamline-sdk
PHP based SDK to access stramlinevrs.com apis
Installs: 27
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/cronixweb/streamline-sdk
Requires
- illuminate/http: ^12.31
This package is not auto-updated.
Last update: 2025-12-15 08:57:48 UTC
README
Streamline VRS PHP SDK
Laravel-ready, typed PHP SDK for the Streamline Vacation Rental Software (VRS) JSON API,
engineered by Cronix LLC, a full-service eCommerce & digital agency.
Need help integrating Streamline VRS into your Laravel or eCommerce stack?
Cronix LLC can architect, build, and maintain your integration from end-to-end.
👉 Talk to an expert or email sales@cronixweb.com.
Table of Contents
- Overview
- Features
- Requirements
- Installation
- Configuration
- Quick Start
- Usage
- Error Handling
- Date Formats & Common Parameters
- FAQ & Notes
- Cronix LLC · Services & Support
- Contributing
- License
- Resources & Bibliography
Overview
Streamline VRS PHP SDK is a thin, Laravel-friendly wrapper around the
Streamline VRS JSON API.
It focuses on:
- Handling authentication and token renewal
- Building and sending requests via Laravel’s HTTP client
- Parsing common response structures into small, predictable models
- Providing ergonomic, typed clients for the Streamline endpoints you use most
Namespaces follow:
Cronixweb\Streamline\...
For example:
use Cronixweb\Streamline\Streamline;
Note: This package is not officially affiliated with Streamline VRS.
It is maintained by Cronix LLC, an eCommerce and digital agency that frequently works with travel, hospitality, and property platforms.
Features
-
🔐 Simple Streamline authentication entry point
SingleStreamline::api($key, $secret)to bootstrap all clients against the Streamline VRS API. -
🔗 Convenient, typed clients for common resources
- Properties:
GetPropertyList,GetPropertyInfo - Amenities:
GetPropertyAmenities - Media:
GetPropertyGalleryImages - Reviews:
GetGuestReviews - Availability:
GetBlockedDaysForUnit - Rates:
GetPropertyRates - Auth:
RenewExpiredToken
- Properties:
-
🧩 Lightweight model parsing
- Normalizes typical response structures into model-like arrays/objects.
- Handles “single item vs list” response quirks defensively.
-
🧰 Laravel-native tooling
- Uses
Illuminate\Support\Facades\Httpinternally. - Fits naturally into Laravel services, controllers, jobs, and console commands.
- Uses
-
🚧 Actively evolving
- Designed to be extended with more endpoints and helpers over time.
Requirements
- PHP:
8.2or higher (aligned with Laravel / Illuminate 12.x) - Laravel (recommended)
- Or any environment where the Laravel HTTP client & facades are available.
- Composer
Namespace & autoload notes:
- SDK namespaces:
Cronixweb\Streamline\... - Ensure your Composer autoload maps:
{
"autoload": {
"psr-4": {
"Cronixweb\\Streamline\\": "src/"
}
}
}
If you install via Packagist, this will typically be preconfigured.
Installation
Install via Composer in your Laravel project:
composer require cronixweb/streamline-sdk
If you’re still developing locally or using this via a path repository, point your project’s
repositoriessection to your checkout and map the namespace tosrc/.
Example (path repository) in your app’s composer.json:
{
"repositories": [
{
"type": "path",
"url": "packages/cronixweb/streamline-sdk"
}
],
"require": {
"cronixweb/streamline-sdk": "*"
}
}
Then regenerate the autoloader:
composer dump-autoload
Configuration
The SDK requires your Streamline API credentials: token_key and token_secret.
1. Environment variables
# .env
STREAMLINE_TOKEN_KEY=your_token_key
STREAMLINE_TOKEN_SECRET=your_token_secret
2. Service configuration
// config/services.php return [ // ... 'streamline' => [ 'token_key' => env('STREAMLINE_TOKEN_KEY'), 'token_secret' => env('STREAMLINE_TOKEN_SECRET'), ], ];
You can override this with your own config file or secrets manager if needed.
Quick Start
In a Laravel controller, job, or service class:
use Cronixweb\Streamline\Streamline; $apiKey = config('services.streamline.token_key'); $apiSecret = config('services.streamline.token_secret'); $streamline = Streamline::api($apiKey, $apiSecret); // Fetch first page of properties $properties = $streamline->properties()->all(); // Fetch a single property by unit_id $property = $streamline->properties()->find(12345);
From here you can traverse into scoped clients (amenities, gallery images, etc.) or call dedicated top-level clients.
Usage
Unless otherwise noted, dates are in
MM/DD/YYYYformat as expected by Streamline.
All examples below assume you’ve already instantiated Streamline as shown in Quick Start.
Properties
List properties:
$properties = $streamline->properties()->all();
Get a single property by unit_id:
$property = $streamline->properties()->find(12345);
Traverse to related, property-scoped clients:
$propClient = $streamline->properties(); $amenities = $propClient->amenities(12345)->all(); // AmenitiesClient $galleryImages = $propClient->galleryImages(12345)->all(); // GalleryImagesClient $reviews = $propClient->reviews(12345)->all(); // ReviewsClient $rates = $propClient->propertyRates(12345)->all(); // PropertyRatesClient
Amenities
Get amenities for a unit:
$amenities = $streamline ->properties() ->amenities(12345) ->all(); // Or via a dedicated client: // $amenities = $streamline->amenities()->getPropertyAmenities(12345);
Gallery Images
Get gallery images for a unit:
$images = $streamline ->properties() ->galleryImages(12345) ->all(); // Or via a dedicated client: // $images = $streamline->galleryImages()->getPropertyGalleryImages(12345);
Each item is parsed into a gallery-image model (array/object), mirroring the underlying API fields.
Reviews
Get guest reviews, optionally scoped and filtered:
use Cronixweb\Streamline\Utils\ReviewsClient; // for type hints, if desired // Scoped to a unit via properties client $reviews = $streamline->properties()->reviews(12345)->all(); // Or using the method with filters $reviews = $streamline->reviews()->getGuestReviews( housekeeperId: null, // e.g. 789 unitId: 12345, returnAll: true );
Booked / Blocked Days
Fetch blocked days for one unit:
$blocked = $streamline->bookedDates()->getBlockedDaysForUnit( unitId: 12345, startdate: '01/01/2025', // optional enddate: '01/31/2025', // optional displayB2BBlocks: true, // optional allowInvalid: false, // optional owningId: null // optional, single unit only );
Fetch blocked days for multiple units (requires enddate):
$blocked = $streamline->bookedDates()->getBlockedDaysForUnit( unitId: [12345, 67890], startdate: '01/01/2025', enddate: '01/31/2025', displayB2BBlocks: true, allowInvalid: false );
Returns an array of booked/blocked date items parsed from the API.
Property Rates
There are two primary ways to fetch rates.
1. High-level all() helper
The all() method accepts an options array and handles validation + mapping:
$rates = $streamline->propertyRates()->all([ 'unit_id' => 12345, 'startdate' => '01/01/2025', 'enddate' => '01/31/2025', // Optional flags: 'use_room_type_logic' => true, 'dailyChangeOver' => false, 'use_homeaway_max_days_notice' => false, // Provide either of the following (not both): // 'rate_type_ids' => [1, 2, 3], // or nested: // 'rate_types' => ['id' => [1, 2, 3]], 'show_los_if_enabled' => true, 'max_los_stay' => 14, // requires show_los_if_enabled = true 'use_adv_logic_if_defined' => false, ]);
2. Explicit typed method
$rates = $streamline->propertyRates()->getPropertyRates( unitId: 12345, startdate: '01/01/2025', enddate: '01/31/2025', useRoomTypeLogic: null, dailyChangeOver: null, useHomeawayMaxDaysNotice: null, rateTypeIds: [1, 2], showLosIfEnabled: true, maxLosStay: 14, useAdvLogicIfDefined: null );
Validation rules enforced by the client:
unit_idmust be a positive integer.startdateandenddatemust be inMM/DD/YYYYformat.dailyChangeOveranduse_homeaway_max_days_noticecannot be used together.- If
max_los_stayis set:- Must be between
1and180. - Requires
show_los_if_enabled = true.
- Must be between
Returned items are parsed into PropertyRate model structures.
Token Renewal
Refresh/rotate your token pair:
$new = $streamline->refreshToken(); // Example response: // [ // 'apikey' => '...', // 'apiSecret' => '...', // ]
The Streamline instance automatically updates its internal client with the new credentials.
If you persist credentials externally (DB, secrets store, etc.), make sure to store the new values.
Error Handling
Most client methods may throw:
Cronixweb\Streamline\Exceptions\StreamlineApiException- When the API returns an error or an unexpected/malformed payload.
Illuminate\Http\Client\ConnectionException- For network/transport-level issues.
InvalidArgumentException- When you pass invalid inputs (e.g., bad dates, missing
unit_id, invalid flags).
- When you pass invalid inputs (e.g., bad dates, missing
Recommended pattern:
use Cronixweb\Streamline\Exceptions\StreamlineApiException; use Illuminate\Http\Client\ConnectionException; try { $rates = $streamline ->propertyRates() ->getPropertyRates(12345, '01/01/2025', '01/31/2025'); } catch (StreamlineApiException $e) { // Handle API-level error (log, alert, transform to domain exception, etc.) } catch (ConnectionException $e) { // Handle network/transport errors (timeouts, DNS issues, etc.) } catch (\InvalidArgumentException $e) { // Handle invalid input before hitting the API }
Date Formats & Common Parameters
- Dates
- Always
MM/DD/YYYYstrings. - The SDK does basic validation where appropriate.
- Always
- Boolean flags
- Sent as
1/0integers per Streamline conventions.
- Sent as
- Multiple IDs
- Some endpoints accept multiple
unit_ids. - Arrays are automatically translated to comma-separated strings.
- Some endpoints accept multiple
FAQ & Notes
Is this Laravel-only?
- The SDK uses
Illuminate\Support\Facades\Http.
It’s designed with Laravel in mind, but any framework/bootstrap that provides the necessary Illuminate components can work.
What about pagination?
- If a Streamline endpoint supports pagination, pass the pagination parameters through the relevant
all($body)or method calls. - This SDK doesn’t currently abstract pagination; you control page size and offsets directly.
Why does the SDK sometimes flatten or wrap data differently from the raw API?
- The Streamline API sometimes returns:
- A single object for one result, or
- An array for multiple.
- The SDK normalizes common cases to consistent lists/collections to simplify your application code.
Namespace reminder
- All code is under
Cronixweb\Streamline\....
Ensure your autoloader maps that namespace tosrc/(or equivalent) when consuming the package.
Cronix LLC · Services & Support
This SDK is built and maintained by Cronix LLC — a full-service digital marketing and eCommerce development agency specializing in custom eCommerce websites, apps, and integrations.
If you’re using Streamline Vacation Rental Software for:
- Vacation rentals
- Travel & hospitality
- Property management platforms
- Custom B2B booking portals
…Cronix can help you:
- Architect Streamline-backed Laravel or headless storefronts
- Build performance-optimized APIs and dashboards
- Design beautiful, conversion-oriented frontends
- Maintain and evolve your integration over time
📞 Let’s talk about your project
- Website: https://cronixweb.com
- Contact: https://cronixweb.com/contact-us
- Request a quote: https://cronixweb.com/request-a-quote
- Email:
sales@cronixweb.com
Ignite your ideas. Let’s chat and turn them into reality.
Contributing
Contributions are welcome!
- Fork the repository
- Create your feature branch:
git checkout -b feature/my-awesome-feature - Commit your changes:
git commit -m "Add my awesome feature" - Push the branch:
git push origin feature/my-awesome-feature - Open a Pull Request describing:
- The problem
- Your changes
- Any breaking impacts or migration notes
Please include reproducible examples or failing tests whenever possible.
License
This SDK is released under the MIT License.
See the LICENSE file for full details.
Resources & Bibliography
- Streamline VRS API JSON Docs:
https://partner.streamlinevrs.com/apidocs/api-group - Streamline VRS JSON API endpoint:
https://web.streamlinevrs.com/api/json - Streamline VRS website:
https://www.streamlinevrs.com - Laravel HTTP Client (Illuminate 12.x):
https://laravel.com/docs/12.x/http-client - PSR-4 Autoloading (Composer):
https://getcomposer.org/doc/04-schema.md#psr-4 - PHP Manual:
https://www.php.net/manual/en/
Last updated: 2025-11-14