PHPackages                             meteor/shipper - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. meteor/shipper

ActiveLibrary

meteor/shipper
==============

Shipper Implementation

v1.0.8-beta(3y ago)490MITPHPPHP ^8.0

Since Nov 29Pushed 3y agoCompare

[ Source](https://github.com/meteorid-labs/laravel-shipper)[ Packagist](https://packagist.org/packages/meteor/shipper)[ RSS](/packages/meteor-shipper/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (4)Versions (23)Used By (0)

Shipper for Laravel
===================

[](#shipper-for-laravel)

[![Shipper tests](https://github.com/meteorid-labs/laravel-shipper/actions/workflows/tests.yml/badge.svg)](https://github.com/meteorid-labs/laravel-shipper/actions/workflows/tests.yml)[![Latest Stable Version](https://camo.githubusercontent.com/3ca11705b099510d87aa95d908d1140849b3b141480dd7ab5ca76f6d52ab1863/68747470733a2f2f706f7365722e707567782e6f72672f6d6574656f722f736869707065722f762f737461626c65)](https://packagist.org/packages/meteor/shipper)[![Total Downloads](https://camo.githubusercontent.com/8971f52adecbe8d4f6bf7526936a359f28762c365dbcd1f7756ea2c14929d164/68747470733a2f2f706f7365722e707567782e6f72672f6d6574656f722f736869707065722f646f776e6c6f616473)](https://packagist.org/packages/meteor/shipper)[![License](https://camo.githubusercontent.com/cca56c4631f61b8e81f27ca783ff30018b89f476a8b2550df00dda3275680368/68747470733a2f2f706f7365722e707567782e6f72672f6d6574656f722f736869707065722f6c6963656e7365)](https://packagist.org/packages/meteor/shipper)

Laravel Shipper is a wrapper around the [Shipper](https://shipper.id) API.

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require meteor/shipper
```

Migration Customization
-----------------------

[](#migration-customization)

If you are not going to use Shipper's default migrations, you should call the `Shipper::ignoreMigrations` method in the `register` method of your `App\Providers\AppServiceProvider` class. You may export the default migrations using the `vendor:publish` Artisan command:

```
php artisan vendor:publish --tag=meteor.shipper.migrations
```

Publishing the config file
--------------------------

[](#publishing-the-config-file)

You can publish the config file with:

```
php artisan vendor:publish --provider="Meteor\Shipper\ShipperServiceProvider" --tag="meteor.shipper.config"
```

### Configuration

[](#configuration)

Before you can use the Shipper API, you need to set your API key. You can do this by setting the `SHIPPER_API_KEY` environment variable in your `.env` file. if you don't have an API key, you can get one from [here](https://shipper.id).

```
SHIPPER_API_KEY=your-api-key
```

### Usage

[](#usage)

To initialize the Shipper API, you can use the `Shipper` facade.

```
use Meteor\Shipper\Facades\Shipper;

$shipper = Shipper::make();
```

`make()` accepts two optional parameters: `baseUrl` and `apiKey`. If you don't pass any parameters, it will use the `SHIPPER_API_KEY` environment variable.

```
$shipper = Shipper::make('your-api-key', 'https://api.shipper.id');
```

### Logistic

[](#logistic)

Create an instance of logistic:

```
$logistic = $shipper->logistic();
```

##### List all logistic

[](#list-all-logistic)

```
$logistic->list()->json();
```

### Location

[](#location)

Create an instance of location:

```
$location = $shipper->location();
```

##### Search location

[](#search-location)

```
$response = $location->search(
    keyword: '15510',
    admLevel: 5, // optional
    options: ['limit' => 5] // optional
)->json();
```

```
$location->getCountries()->json();
$location->getCountry()->json();
$location->getProvinces()->json();
$location->getProvince()->json();
$location->getProvincesByCountryId()->json();
$location->getCitiesByProvinceId()->json();
$location->getCities()->json();
$location->getCity()->json();
$location->getSuburbs()->json();
$location->getSuburbsByCityId()->json();
$location->getSuburb()->json();
$location->getAreasBySuburbId()->json();
$location->getAreas()->json();
$location->getArea()->json();
```

### Pricing

[](#pricing)

Create an instance of pricing:

```
$pricing = $shipper->pricing();
```

> Note: `lat` and `lng` must be in string format

```
$domesticBody = [
    'cod' => false,
    'destination' => [
        'area_id' => 12284,
        'lat' => '-6.9189281',
        'lng' => '107.617093',
    ],
    'origin' => [
        'area_id' => 12441,
        'lat' => '-6.3179073',
        'lng' => '106.9506175'
    ],
    'for_order' => true,
    'height' => 6.54,
    'length' => 6.54,
    'width' => 6.54,
    'weight' => 0.18,
    'item_value' => 134950,
    'sort_by' => ['final_price']
];

$internationalBody = [];
```

##### Domestic

[](#domestic)

```
$pricing->domestic(body: $domesticBody)->json();
```

##### Domestic by rate

[](#domestic-by-rate)

Available rates:

- `instant`
- `regular`
- `express`
- `trucking`
- `same-day`

```
$pricing->domesticByRate(rateType: 'instant', body: $domesticBody)->json();
```

##### International

[](#international)

```
$pricing->international(body: $internationalBody)->json();
```

### Order

[](#order)

Create an instance of order:

```
$location = $shipper->order();
```

##### Create Order

[](#create-order)

> Note: `phone_number` cannot contain `+` or `0` prefix. so if your phone number is `+6288112233443` or `08111223344` you should remove the `+` or `0` prefix. you can use `shipper_phone_format` helper function to format your phone number.

```
$response = $order->create([
    'consignee' =>  [
        'name' => 'Mr. Jonson H',
        'phone_number' => '6288112233443'
    ],
    'consigner' =>  [
        'name' => 'Aslam H',
        'phone_number' => '6281901560666'
    ],
    'courier' => [
        'cod' => false,
        'rate_id' => 15,
        'use_insurance' => false
    ],
    'coverage' => 'domestic',
    'destination' => [
        'address' => 'Jl. Joni Afternoon, gg. Jonwik no 100A RT 08 RW 07 Kec. Sumur Bawah, Kota Melati, Jawa Jonggol, 50112',
        'area_id' => 12284,
        'lat' => '-6.9189281',
        'lng' => '107.617093',
        'email_address' => 'stark@mail.me',
        'company_name' => 'Marvel'
    ],
    'origin' => [
        'address' => 'Jl monyet kp rangga rt 11 rw 12 no 55 kode pos 17445 kel. jatimakmur kec. jatisolo',
        'area_id' => 12441,
        'lat' => '-6.3179073',
        'lng' => '106.9506175',
        'email_address' => 'spiderman@mail.com',
        'company_name' => 'Foo'
    ],
    'package' => [
        'items' =>  [
            [
                'name' => 'Daging Ikan 1kg',
                'price' => 10000,
                'qty' => 1
            ]
        ],
        'package_type' => 2,
        'height' => 4.1,
        'length' => 4.1,
        'width' => 4.1,
        'weight' => 0.03,
        'price' => 2000
    ],
    'payment_type' => 'postpay'
])->json();
```

```
$order->detail('order-id')->json();
$order->trackingStatus('status-id')->json();
$order->availableOrders()->json();
$order->update('order-id', [])->json();
$order->cancel('order-id', [])->json();
```

##### Pickup

[](#pickup)

```
$pickup = $shipper->pickup();

$pickup->create([])->json();
$pickup->cancel([])->json();
$pickup->createWithTimeslot([])->json();
$pickup->getTimeSlots()->json();
```

### HELPERS

[](#helpers)

##### shipper\_phone\_format

[](#shipper_phone_format)

```
shipper_phone_format('08111223344'); // 628111223344
shipper_phone_format('+628111223344'); // 628111223344
```

##### shipper\_categories

[](#shipper_categories)

```
shipper_categories(); // ['domestic', 'international']
```

##### shipper\_rates

[](#shipper_rates)

```
shipper_rates(); // ['instant', 'regular', 'express', 'trucking', 'same-day']
```

###  Health Score

24

—

LowBetter than 32% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~4 days

Total

13

Last Release

1210d ago

Major Versions

v0.1.4-alpha → v1.0.1-beta2022-12-19

### Community

Maintainers

![](https://www.gravatar.com/avatar/0455bc42a86cd7312807b2f877e58f6064b7ad8fe52ab14c9cdde258e463a56a?d=identicon)[meteorid-labs](/maintainers/meteorid-labs)

---

Top Contributors

[![Aslam97](https://avatars.githubusercontent.com/u/25027592?v=4)](https://github.com/Aslam97 "Aslam97 (45 commits)")

---

Tags

laravellaravel-shipperlaravel-shipper-idlaravel-shippingshippershipper-integrationsshipping

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/meteor-shipper/health.svg)

```
[![Health](https://phpackages.com/badges/meteor-shipper/health.svg)](https://phpackages.com/packages/meteor-shipper)
```

###  Alternatives

[neuron-core/neuron-ai

The PHP Agentic Framework.

1.8k245.3k21](/packages/neuron-core-neuron-ai)[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3731.2M42](/packages/tencentcloud-tencentcloud-sdk-php)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
