Project

kiriminaja

0.0
The project is in a healthy, maintained state
Ruby SDK for the KiriminAja logistics API. Supports address lookup, coverage area pricing, order management (express & instant), courier services, pickup scheduling, and payments.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies
 Project Readme

KiriminAja Ruby SDK

Gem Version license

Official Ruby SDK for the KiriminAja logistics API. Zero external dependencies — uses only Ruby's standard library (net/http, json).

Requirements

  • Ruby 3.0+

Installation

Add to your Gemfile:

gem "kiriminaja"

Or install directly:

gem install kiriminaja

Quick Start

Create a client with your API key, then call any service method.

require "kiriminaja"

client = KiriminAja::Client.new(
  env: KiriminAja::Config::ENV_SANDBOX,  # or ENV_PRODUCTION
  api_key: ENV["KIRIMINAJA_API_KEY"],
)

# Use any service
provinces = client.address.provinces

Config Options

Option Type Default Description
env String ENV_SANDBOX Target environment
api_key String Your KiriminAja API key
base_url String Derived from env Override the base URL
http_client duck-typed auto-created Custom HTTP client (proxy / test mock)
# Custom base URL
client = KiriminAja::Client.new(
  base_url: "https://tdev.kiriminaja.com",
  api_key: ENV["KIRIMINAJA_API_KEY"],
)

# Custom HTTP client (e.g. with a specific timeout)
require "net/http"

http = Net::HTTP.new("tdev.kiriminaja.com", 443)
http.use_ssl = true
http.open_timeout = 10
http.read_timeout = 10

client = KiriminAja::Client.new(
  api_key: "...",
  http_client: http,
)

Services

Address

# List all provinces
client.address.provinces

# Cities in a province (provinsi_id)
client.address.cities(5)

# Districts in a city (kabupaten_id)
client.address.districts(12)

# Sub-districts in a district (kecamatan_id)
client.address.sub_districts(77)

# Search districts by name
client.address.districts_by_name("jakarta")

Coverage Area & Pricing

# Express shipping rates
client.coverage_area.pricing_express(
  KiriminAja::Types::PricingExpressPayload.new(
    origin: 1,
    destination: 2,
    weight: 1000,       # grams
    item_value: 50000,
    insurance: 0,
    courier: ["jne", "jnt"],
  )
)

# Instant (same-day) rates
client.coverage_area.pricing_instant(
  KiriminAja::Types::PricingInstantPayload.new(
    service: [KiriminAja::Types::InstantService::GOSEND],
    item_price: 10000,
    origin: KiriminAja::Types::PricingInstantLocationPayload.new(
      lat: -6.2, long: 106.8, address: "Jl. Sudirman No.1",
    ),
    destination: KiriminAja::Types::PricingInstantLocationPayload.new(
      lat: -6.21, long: 106.81, address: "Jl. Thamrin No.5",
    ),
    weight: 1000,
    vehicle: KiriminAja::Types::InstantVehicle::BIKE,
    timezone: "Asia/Jakarta",
  )
)

Order — Express

# Track by order ID
client.order.express.track("ORDER123")

# Cancel by AWB
client.order.express.cancel("AWB123456", "Customer request")

# Request pickup
client.order.express.request_pickup(
  KiriminAja::Types::RequestPickupPayload.new(
    address: "Jl. Jodipati No.29",
    phone: "08133345678",
    name: "Tokotries",
    kecamatan_id: 548,
    schedule: "2021-11-30 22:00:00",
    packages: [
      KiriminAja::Types::RequestPickupPackage.new(
        order_id: "YGL-000000019",
        destination_name: "Flag Test",
        destination_phone: "082223323333",
        destination_address: "Jl. Magelang KM 11",
        destination_kecamatan_id: 548,
        weight: 520,
        width: 8,
        length: 8,
        height: 8,
        item_value: 275000,
        shipping_cost: 65000,
        service: "jne",
        service_type: "REG23",
        cod: 0,
        package_type_id: 7,
        item_name: "TEST Item name",
      ),
    ],
  )
)

Order — Instant

# Create instant pickup
client.order.instant.create(
  KiriminAja::Types::InstantPickupPayload.new(
    service: KiriminAja::Types::InstantService::GOSEND,
    service_type: "instant",
    vehicle: KiriminAja::Types::InstantVehicle::BIKE,
    order_prefix: "BDI",
    packages: [
      KiriminAja::Types::InstantPickupPackage.new(
        origin_name: "Rizky",
        origin_phone: "081280045616",
        origin_lat: -7.854584,
        origin_long: 110.331154,
        origin_address: "Wirobrajan, Yogyakarta",
        origin_address_note: "Dekat Kantor",
        destination_name: "Okka",
        destination_phone: "081280045616",
        destination_lat: -7.776192,
        destination_long: 110.325053,
        destination_address: "Godean, Sleman",
        destination_address_note: "Dekat Pasar",
        shipping_price: 34000,
        item: KiriminAja::Types::InstantPickupItem.new(
          name: "Barang 1",
          description: "Barang 1 Description",
          price: 20000,
          weight: 1000,
        ),
      ),
    ],
  )
)

# Find a new driver for an existing order
client.order.instant.find_new_driver("ORDER123")

# Cancel instant order
client.order.instant.cancel("ORDER123")

# Track instant order
client.order.instant.track("ORDER123")

Courier

# List available couriers
client.courier.list

# Courier groups
client.courier.group

# Courier service detail
client.courier.detail("jne")

# Set whitelist services
client.courier.set_whitelist_services(["jne_reg", "jne_yes"])

Pickup Schedules

client.pickup.schedules

Payment

client.payment.get_payment("PAY123")

Rails Integration

The SDK works seamlessly in any Ruby application, including Rails.

Initializer

# config/initializers/kiriminaja.rb
KIRIMINAJA = KiriminAja::Client.new(
  env: KiriminAja::Config::ENV_PRODUCTION,
  api_key: Rails.application.credentials.kiriminaja_api_key,
)

Controller usage

class ShippingController < ApplicationController
  def rates
    result = KIRIMINAJA.coverage_area.pricing_express(
      KiriminAja::Types::PricingExpressPayload.new(
        origin: params[:origin].to_i,
        destination: params[:destination].to_i,
        weight: params[:weight].to_i,
        item_value: params[:item_value].to_i,
        insurance: 0,
        courier: params[:courier],
      )
    )
    render json: result
  end
end

Contributing

For any requests, bugs, or comments, please open an issue or submit a pull request.

Development

bundle install      # install dependencies
bundle exec rake    # run tests