diff --git a/README.md b/README.md
index 41c32b0..fd806f0 100644
--- a/README.md
+++ b/README.md
@@ -30,154 +30,9 @@ Package Laravel atau Lumen yang menyimpan data provinsi, kota, kecamatan, dan ne
composer require dipantry/rajaongkir
```
-## Integrasi
-### Lumen
-Dalam file `bootstrap/app.php`, uncomment baris berikut
-```php
-$app->withFacades();
-$app->withEloquent();
-```
-dan daftarkan service provider dan alias/facade dengan menambahkan kode berikut
-```php
-$app->register(Dipantry\Rajaongkir\ServiceProvider::class);
-
-// class_aliases
-class_alias(Dipantry\Rajaongkir\Facade::class, 'Rajaongkir');
-```
-
-### Laravel
-Dalam file `config/app.php`, masukkan baris berikut pada bagian `providers`
-```php
-'providers' => [
- ...
- Dipantry\Rajaongkir\ServiceProvider::class,
-],
-```
-dan tambahkan baris berikut pada bagian `aliases`
-```php
-'aliases' => [
- 'Rajaongkir' => Dipantry\Rajaongkir\Facade::class,
-],
-```
-
-## Konfigurasi
-```sh
-php artisan vendor:publish --provider="Dipantry\Rajaongkir\ServiceProvider"
-```
-
-File konfigurasi terletak pada `config/rajaongkir.php`
-```php
-return [
- 'api_key' => 'Masukkan API Key Anda',
- 'package' => 'Masukkan Tipe Akun Anda (Basic, Starter, Pro)',
- 'table_prefix' => 'Untuk migrasi dan seeding data',
- 'timeout' => 'Waktu timeout untuk API RajaOngkir',
-]
-```
-
-### Jalankan migrasi
-```sh
-php artisan migrate
-```
-
-### Jalankan seeder untuk mengisi data provinsi, kota, kecamatan, dan negara
-```sh
-php artisan rajaongkir:seed
-```
-
----
-# Cara menggunakan
-## Data Provinsi, Kota, Kecamatan, dan Negara
-Untuk mengambil data provinsi, kota, kecamatan, dan negara dapat menggunakan model yang sudah disediakan
-
-```php
-use Dipantry\Rajaongkir\Models\ROProvince;
-use Dipantry\Rajaongkir\Models\ROCity;
-use Dipantry\Rajaongkir\Models\ROSubDistrict;
-use Dipantry\Rajaongkir\Models\ROCountry;
-
-ROProvince::all();
-ROCity::all();
-ROSubDistrict::all();
-ROCountry::all();
-```
-
-## Biaya Pengiriman Lokal
-
-```php
-use Dipantry\Rajaongkir\Constants\RajaongkirCourier;
-
-\Rajaongkir::getOngkirCost(
- int $origin, int $destination, int $weight, string $courier,
- string $originType = 'city', string $destinationType = 'city',
- int $length = null, int $width = null, int $height = null, int $diameter = null
-)
-
-// Contoh Starter
-\Rajaongkir::getOngkirCost(
- $origin = 1, $destination = 200, $weight = 300, $courier = RajaongkirCourier::JNE
-);
-
-// Contoh Pro
-\Rajaongkir::getOngkirCost(
- $origin = 1, $destination = 200, $weight = 300, $courier = RajaongkirCourier::JNE,
- $originType = 'subdistrict', $destinationType = 'subdistrict'
-);
-```
-
-## Biaya Pengiriman Internasional
-
-```php
-use Dipantry\Rajaongkir\Constants\RajaongkirCourier;
-
-\Rajaongkir::getInternationalOngkirCost(
- int $origin, int $destination, int $weight, string $courier,
- int $length = null, int $width = null, int $height = null, int $diameter = null
-)
-
-// Contoh
-\Rajaongkir::getOngkirCost(
- $origin = 1, $destination = 200, $weight = 300, $courier = RajaongkirCourier::JNE,
- $length = 100, $width = 100, $height = 100, $diameter = 100
-);
-```
-
-## Nilai Tukar Rupiah
-```php
-\Rajaongkir::getCurrency()
-```
-
-## Melacak Status Pengiriman
-
-```php
-use Dipantry\Rajaongkir\Constants\RajaongkirCourier;
-
-\Rajaongkir::getWaybill(
- string $waybill, string $courier
-);
-
-// Contoh
-\Rajaongkir::getWaybill(
- $waybill = '123456789', $courier = RajaongkirCourier::JNE
-);
-```
-
-### Rajaongkir Courier
-Package ini menyediakan model `RajaongkirCourier` yang berisi data kurir yang terdaftar pada RajaOngkir. Model tersebut mengembalikan kode kurir untuk dikirimkan ke server RajaOngkir.
-*Disarankan untuk menggunakan model untuk mencegah kesalahan penulisan kode kurir.
-
-### Response
-Setiap method yang digunakan (kecuali models) mengembalikan response berupa array atau object bergantung pada isi `result` atau `results` yang diterima.
-
-### Exception
-Setiap kali sistem melakukan request ke API Raja Ongkir, jika terjadi kesalahan, maka sistem akan mengembalikan `APIResponseException` dengan pesan kesalahan yang diberikan oleh Raja Ongkir. Jika request berhasil, maka sistem akan mengembalikan hasil request yang diberikan oleh Raja Ongkir.
-`APIResponseException` memiliki 2 informasi yaitu `code` dan `message`
-
-#### Error Code
-- 400 Bad Request
-Kode ini biasanya dikirim dari API Raja Ongkir apabila terjadi kesalahan pada request, baik kesalahan pada parameter, HTTP Method, hingga API Key yang tidak valid.
-- 500 Internal Server Error
-Kode ini di generate otomatis oleh package ini ketika terjadi kesalahan pada server atau server tidak mengembalikan response yang valid.
+## Petunjuk Penggunaan
+### 1. [Laravel/Lumen](https://github.com/dipantry/rajaongkir/docs/HOWTO-Laravel.md)
+### 2. [Vanilla PHP](https://github.com/dipantry/rajaongkir/docs/HOWTO-Vanilla.md)
---
# Testing
diff --git a/docs/HOWTO-Laravel.md b/docs/HOWTO-Laravel.md
new file mode 100644
index 0000000..cbed348
--- /dev/null
+++ b/docs/HOWTO-Laravel.md
@@ -0,0 +1,149 @@
+# Petunjuk Penggunaan RajaOngkir API Wrapper untuk Laravel dan Lumen
+
+## Integrasi
+### Lumen
+Dalam file `bootstrap/app.php`, uncomment baris berikut
+```php
+$app->withFacades();
+$app->withEloquent();
+```
+dan daftarkan service provider dan alias/facade dengan menambahkan kode berikut
+```php
+$app->register(Dipantry\Rajaongkir\ServiceProvider::class);
+
+// class_aliases
+class_alias(Dipantry\Rajaongkir\Facade::class, 'Rajaongkir');
+```
+
+### Laravel
+Dalam file `config/app.php`, masukkan baris berikut pada bagian `providers`
+```php
+'providers' => [
+ ...
+ Dipantry\Rajaongkir\ServiceProvider::class,
+],
+```
+dan tambahkan baris berikut pada bagian `aliases`
+```php
+'aliases' => [
+ 'Rajaongkir' => Dipantry\Rajaongkir\Facade::class,
+],
+```
+
+## Konfigurasi
+```sh
+php artisan vendor:publish --provider="Dipantry\Rajaongkir\ServiceProvider"
+```
+
+File konfigurasi terletak pada `config/rajaongkir.php`
+```php
+return [
+ 'api_key' => 'Masukkan API Key Anda',
+ 'package' => 'Masukkan Tipe Akun Anda (Basic, Starter, Pro)',
+ 'table_prefix' => 'Untuk migrasi dan seeding data',
+ 'timeout' => 'Waktu timeout untuk API RajaOngkir',
+]
+```
+
+### Jalankan migrasi
+```sh
+php artisan migrate
+```
+
+### Jalankan seeder untuk mengisi data provinsi, kota, kecamatan, dan negara
+```sh
+php artisan rajaongkir:seed
+```
+
+---
+## Data Provinsi, Kota, Kecamatan, dan Negara
+Untuk mengambil data provinsi, kota, kecamatan, dan negara dapat menggunakan model yang sudah disediakan
+
+```php
+use Dipantry\Rajaongkir\Models\ROProvince;
+use Dipantry\Rajaongkir\Models\ROCity;
+use Dipantry\Rajaongkir\Models\ROSubDistrict;
+use Dipantry\Rajaongkir\Models\ROCountry;
+
+ROProvince::all();
+ROCity::all();
+ROSubDistrict::all();
+ROCountry::all();
+```
+
+## Biaya Pengiriman Lokal
+
+```php
+use Dipantry\Rajaongkir\Constants\RajaongkirCourier;
+
+\Rajaongkir::getOngkirCost(
+ int $origin, int $destination, int $weight, string $courier,
+ string $originType = 'city', string $destinationType = 'city',
+ int $length = null, int $width = null, int $height = null, int $diameter = null
+)
+
+// Contoh Starter
+\Rajaongkir::getOngkirCost(
+ $origin = 1, $destination = 200, $weight = 300, $courier = RajaongkirCourier::JNE
+);
+
+// Contoh Pro
+\Rajaongkir::getOngkirCost(
+ $origin = 1, $destination = 200, $weight = 300, $courier = RajaongkirCourier::JNE,
+ $originType = 'subdistrict', $destinationType = 'subdistrict'
+);
+```
+
+## Biaya Pengiriman Internasional
+
+```php
+use Dipantry\Rajaongkir\Constants\RajaongkirCourier;
+
+\Rajaongkir::getInternationalOngkirCost(
+ int $origin, int $destination, int $weight, string $courier,
+ int $length = null, int $width = null, int $height = null, int $diameter = null
+)
+
+// Contoh
+\Rajaongkir::getInternationalOngkirCost(
+ $origin = 1, $destination = 200, $weight = 300, $courier = RajaongkirCourier::JNE,
+ $length = 100, $width = 100, $height = 100, $diameter = 100
+);
+```
+
+## Nilai Tukar Rupiah
+```php
+\Rajaongkir::getCurrency()
+```
+
+## Melacak Status Pengiriman
+
+```php
+use Dipantry\Rajaongkir\Constants\RajaongkirCourier;
+
+\Rajaongkir::getWaybill(
+ string $waybill, string $courier
+);
+
+// Contoh
+\Rajaongkir::getWaybill(
+ $waybill = '123456789', $courier = RajaongkirCourier::JNE
+);
+```
+
+### Rajaongkir Courier
+Package ini menyediakan model `RajaongkirCourier` yang berisi data kurir yang terdaftar pada RajaOngkir. Model tersebut mengembalikan kode kurir untuk dikirimkan ke server RajaOngkir.
+*Disarankan untuk menggunakan model untuk mencegah kesalahan penulisan kode kurir.
+
+### Response
+Setiap method yang digunakan (kecuali models) mengembalikan response berupa array atau object bergantung pada isi `result` atau `results` yang diterima.
+
+### Exception
+Setiap kali sistem melakukan request ke API Raja Ongkir, jika terjadi kesalahan, maka sistem akan mengembalikan `APIResponseException` dengan pesan kesalahan yang diberikan oleh Raja Ongkir. Jika request berhasil, maka sistem akan mengembalikan hasil request yang diberikan oleh Raja Ongkir.
+`APIResponseException` memiliki 2 informasi yaitu `code` dan `message`
+
+#### Error Code
+- 400 Bad Request
+ Kode ini biasanya dikirim dari API Raja Ongkir apabila terjadi kesalahan pada request, baik kesalahan pada parameter, HTTP Method, hingga API Key yang tidak valid.
+- 500 Internal Server Error
+ Kode ini di generate otomatis oleh package ini ketika terjadi kesalahan pada server atau server tidak mengembalikan response yang valid.
\ No newline at end of file
diff --git a/docs/HOWTO-Vanilla.md b/docs/HOWTO-Vanilla.md
new file mode 100644
index 0000000..8b36595
--- /dev/null
+++ b/docs/HOWTO-Vanilla.md
@@ -0,0 +1,138 @@
+# Petunjuk Penggunaan RajaOngkir API Wrapper untuk Vanilla PHP
+
+## Inisialisasi
+```php
+use Dipantry\Rajaongkir\Rajaongkir;
+
+$rajaongkir = new Rajaongkir('API_KEY', 'PACKAGE', 'TIMEOUT')
+```
+- `API_KEY` adalah API Key yang didapat dari RajaOngkir
+- `PACKAGE` adalah tipe akun RajaOngkir (starter, pro)
+- `TIMEOUT` adalah waktu timeout (dalam detik) untuk API RajaOngkir, default data 30 detik
+
+---
+## Daftar Provinsi
+```php
+$rajaongkir->getProvince(
+ int $provinceId = 0
+);
+
+// Contoh
+$rajaongkir->getProvince();
+$rajaongkir->getProvince($provinceId = 1);
+```
+
+## Daftar Kota
+```php
+$rajaongkir->getCity(
+ int $cityId = 0, int $provinceId = 0
+);
+
+// Contoh
+$rajaongkir->getCity();
+$rajaongkir->getCity($cityId = 1);
+$rajaongkir->getCity($provinceId = 2);
+$rajaongkir->getCity($cityId = 1, $provinceId = 2);
+```
+
+## Daftar Kecamatan
+```php
+$rajaongkir->getSubDistrict(
+ int $cityId, int $subDistrictId = 0
+);
+
+// Contoh
+$rajaongkir->getSubDistrict($cityId = 1);
+$rajaongkir->getSubDistrict($cityId = 1, $provinceId = 1);
+```
+
+## Biaya Pengiriman Lokal
+```php
+$rajaongkir->getOngkirCost(
+ int $origin, int $destination, int $weight, string $courier,
+ string $originType = 'city', string $destinationType = 'city',
+ int $length = null, int $width = null, int $height = null, int $diameter = null
+)
+
+// Contoh Starter
+$rajaongkir->getOngkirCost(
+ $origin = 1, $destination = 200, $weight = 300, $courier = RajaongkirCourier::JNE
+);
+
+// Contoh Pro
+$rajaongkir->getOngkirCost(
+ $origin = 1, $destination = 200, $weight = 300, $courier = RajaongkirCourier::JNE,
+ $originType = 'subdistrict', $destinationType = 'subdistrict'
+);
+```
+
+## Daftar Kota Asal untuk Pengiriman Internasional
+```php
+$rajaongkir->getInternationalOrigin(
+ int $cityId = 0, int $provinceId = 0
+);
+
+// Contoh
+$rajaongkir->getInternationalOrigin();
+$rajaongkir->getInternationalOrigin($cityId = 1);
+$rajaongkir->getInternationalOrigin($provinceId = 2);
+$rajaongkir->getInternationalOrigin($cityId = 1, $provinceId = 2);
+```
+
+## Daftar Negara Tujuan untuk Pengiriman Internasional
+```php
+$rajaongkir->getInternationalDestination(
+ int $countryId = 0
+);
+
+// Contoh
+$rajaongkir->getInternationalDestination();
+$rajaongkir->getInternationalDestination($countryId = 1);
+```
+
+## Biaya Pengiriman Internasional
+```php
+$rajaongkir->getInternationalOngkirCost(
+ int $origin, int $destination, int $weight, string $courier,
+ int $length = null, int $width = null, int $height = null, int $diameter = null
+);
+
+// Contoh
+$rajaongkir->getInternationalOngkirCost(
+ $origin = 1, $destination = 200, $weight = 300, $courier = RajaongkirCourier::JNE,
+ $length = 100, $width = 100, $height = 100, $diameter = 100
+);
+```
+
+## Nilai Tukar Rupiah
+```php
+$rajaongkir->getCurrency();
+```
+
+## Melacak Status Pengiriman
+```php
+$rajaongkir->getWaybill(
+ string $waybill, string $courier
+);
+
+// Contoh
+$rajaongkir->getWaybill($waybill = '123456789', $courier = RajaongkirCourier::JNE);
+```
+
+---
+### Rajaongkir Courier
+Package ini menyediakan model `RajaongkirCourier` yang berisi data kurir yang terdaftar pada RajaOngkir. Model tersebut mengembalikan kode kurir untuk dikirimkan ke server RajaOngkir.
+*Disarankan untuk menggunakan model untuk mencegah kesalahan penulisan kode kurir.
+
+### Response
+Setiap method yang digunakan (kecuali models) mengembalikan response berupa array atau object bergantung pada isi `result` atau `results` yang diterima.
+
+### Exception
+Setiap kali sistem melakukan request ke API Raja Ongkir, jika terjadi kesalahan, maka sistem akan mengembalikan `APIResponseException` dengan pesan kesalahan yang diberikan oleh Raja Ongkir. Jika request berhasil, maka sistem akan mengembalikan hasil request yang diberikan oleh Raja Ongkir.
+`APIResponseException` memiliki 2 informasi yaitu `code` dan `message`
+
+#### Error Code
+- 400 Bad Request
+ Kode ini biasanya dikirim dari API Raja Ongkir apabila terjadi kesalahan pada request, baik kesalahan pada parameter, HTTP Method, hingga API Key yang tidak valid.
+- 500 Internal Server Error
+ Kode ini di generate otomatis oleh package ini ketika terjadi kesalahan pada server atau server tidak mengembalikan response yang valid.
\ No newline at end of file