skills/shiprocket/SKILL.md
--- name: shiprocket description: Use this skill whenever the user wants to integrate Shiprocket logistics APIs. Triggers include: creating shipment orders, generating AWB numbers, tracking parcels by AWB or order ID, checking courier serviceability between pincodes, calculating shipping rates, generating shipping labels, handling NDR (Non-Delivery Reports), cancelling orders, requesting pickups, or building any eCommerce shipping workflow using Shiprocket. Also trigger when user mentions Shipro
npx skillsauth add ankitjh4/indic-ai-skills skills/shiprocketInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
https://apiv2.shiprocket.in/v1/external/| File | Purpose |
|---|---|
| scripts/shiprocket_client.py | Reusable Python client — import in any project |
| scripts/test_shiprocket.py | Smoke-test script |
| scripts/requirements.txt | Python dependencies |
| references/endpoints.md | Full endpoint reference table |
[email protected]
SHIPROCKET_PASSWORD=your_api_password
Every request needs a Bearer token. Token expires in 24 hours.
POST https://apiv2.shiprocket.in/v1/external/auth/login
import requests, os
BASE = "https://apiv2.shiprocket.in/v1/external"
def get_token(email: str, password: str) -> str:
res = requests.post(f"{BASE}/auth/login", json={
"email": email,
"password": password
})
return res.json()["token"]
TOKEN = get_token(os.environ["SHIPROCKET_EMAIL"], os.environ["SHIPROCKET_PASSWORD"])
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
⚠️ Token is valid for 24 hrs. Cache it; don't generate a new one per request.
1. Check Serviceability → Is delivery possible between 2 pincodes?
2. Create Order → Register order in Shiprocket
3. Generate AWB → Assign courier + get AWB number
4. Request Pickup → Schedule courier to collect
5. Generate Label → Print shipping label (PDF)
6. Track Shipment → Live tracking by AWB or order ID
7. Handle NDR → Re-attempt failed deliveries
GET https://apiv2.shiprocket.in/v1/external/courier/serviceability/
params = {
"pickup_postcode": "110001", # seller pincode
"delivery_postcode": "400001", # buyer pincode
"weight": 0.5, # kg
"cod": 0 # 0=prepaid, 1=COD
}
res = requests.get(f"{BASE}/courier/serviceability/", headers=HEADERS, params=params)
couriers = res.json()["data"]["available_courier_companies"]
# Pick cheapest:
best = min(couriers, key=lambda c: c["rate"])
courier_id = best["courier_company_id"]
print(f"Best courier: {best['courier_name']} @ ₹{best['rate']}")
POST https://apiv2.shiprocket.in/v1/external/orders/create/adhoc
order_data = {
# Order info
"order_id": "ORD-001", # your unique ID
"order_date": "2025-04-25 10:00", # YYYY-MM-DD HH:MM
"pickup_location": "Primary", # warehouse name in Shiprocket
# Billing / Customer
"billing_customer_name": "Rahul Sharma",
"billing_last_name": "Sharma",
"billing_address": "123 MG Road",
"billing_city": "Mumbai",
"billing_pincode": "400001",
"billing_state": "Maharashtra",
"billing_country": "India",
"billing_email": "[email protected]",
"billing_phone": "9876543210",
# Shipping = billing if same address
"shipping_is_billing": True,
# Items
"order_items": [
{
"name": "Cotton Kurta",
"sku": "KURTA-001",
"units": 2,
"selling_price": 499,
"discount": "",
"tax": "",
"hsn": 620469 # HSN code for apparel
}
],
# Payment
"payment_method": "Prepaid", # or "COD"
"sub_total": 998,
# Package dimensions
"length": 30, # cm
"breadth": 20,
"height": 5,
"weight": 0.5 # kg
}
res = requests.post(f"{BASE}/orders/create/adhoc", json=order_data, headers=HEADERS)
data = res.json()
order_id = data["order_id"]
shipment_id = data["shipment_id"]
print(f"Order created: {order_id} | Shipment: {shipment_id}")
POST https://apiv2.shiprocket.in/v1/external/courier/assign/awb
res = requests.post(f"{BASE}/courier/assign/awb", headers=HEADERS, json={
"shipment_id": shipment_id,
"courier_id": str(courier_id) # from serviceability check
})
awb_code = res.json()["response"]["data"]["awb_code"]
print(f"AWB: {awb_code}")
POST https://apiv2.shiprocket.in/v1/external/courier/generate/pickup
res = requests.post(f"{BASE}/courier/generate/pickup", headers=HEADERS, json={
"shipment_id": [shipment_id] # list — can batch multiple
})
print(res.json())
POST https://apiv2.shiprocket.in/v1/external/courier/generate/label
res = requests.post(f"{BASE}/courier/generate/label", headers=HEADERS, json={
"shipment_id": [shipment_id]
})
label_url = res.json()["label_url"] # PDF download URL
print(f"Label: {label_url}")
GET https://apiv2.shiprocket.in/v1/external/courier/track/awb/{awb}
res = requests.get(f"{BASE}/courier/track/awb/{awb_code}", headers=HEADERS)
tracking = res.json()["tracking_data"]
print(tracking["shipment_track"][0]["current_status"])
GET https://apiv2.shiprocket.in/v1/external/orders/show/{order_id}
res = requests.get(f"{BASE}/orders/show/{order_id}", headers=HEADERS)
GET https://apiv2.shiprocket.in/v1/external/courier/track?awb=AWB1,AWB2,AWB3
POST https://apiv2.shiprocket.in/v1/external/orders/cancel
res = requests.post(f"{BASE}/orders/cancel", headers=HEADERS, json={
"ids": [order_id] # list of order IDs
})
# Get all NDR shipments
res = requests.get(f"{BASE}/ndr/all", headers=HEADERS)
# Get specific AWB in NDR
res = requests.get(f"{BASE}/ndr/{awb_code}", headers=HEADERS)
# Re-attempt delivery with updated address
res = requests.post(f"{BASE}/ndr/reattempt", headers=HEADERS, params={
"awb": awb_code,
"address1": "New Address Line 1",
"address2": "Landmark",
"phone": "9876543210",
"deferred_date": "2025-04-30" # YYYY-MM-DD
})
| Rule | Detail |
|---|---|
| Token expiry | 24 hours — cache it, use env vars or Redis |
| shipment_id vs order_id | Shiprocket creates both; AWB needs shipment_id |
| Weight unit | Always kilograms (kg), not grams |
| Dimensions | Always centimetres (cm) |
| payment_method values | "Prepaid" or "COD" (case-sensitive) |
| pickup_location | Must match exact warehouse name in your Shiprocket panel |
| HSN code | Required for GST compliance on order items |
| COD charge | Shiprocket deducts COD fee from remittance automatically |
development
--- name: cashfree description: Use this skill whenever the user wants to integrate Cashfree payment APIs. Triggers include: creating orders or payment sessions, accepting payments via UPI/cards/netbanking/wallets, generating payment links to share via SMS/email, handling refunds, verifying webhook signatures, fetching payment or settlement status, building a checkout flow, writing Python code for Cashfree, switching between test and production environments, or understanding Cashfree error codes
development
Interact with Zoho CRM, Projects, and Meeting APIs. Use when managing deals, contacts, leads, tasks, projects, milestones, meeting recordings, or any Zoho workspace data.
testing
Access Vedic scriptures including Rig Veda, Yajur Veda, Atharva Veda, and Puranas. Use when user asks for "Vedas", "Rig Veda", "Vedic hymns", "ancient Indian scriptures", or wants Hindu religious/philosophical content.
testing
Complete Vedic astrology chart generation and interpretation. Generate birth charts (D1-D60), calculate Panchanga, Shadbala, Vimshottari Dasha, Ashtakavarga, and provide interpretations using Krishnamurthi Paddhati (KP) system, classical Parashara principles, and traditional texts. Supports both natal and horary (Prasna) charts.