Developer Portal & Navigation API

Developer Documentation &
Deep Linking Hub.

Seamlessly redirect delivery couriers, taxi drivers, and online customers into RazeGo with turn-by-turn GPS navigation, voice guidance, and verified fallback support.

Universal Basehttps://razego.adoliy.com/location
Custom Schemeraze://location
iOS Schemeraze
Android Packagecom.raze.app.raze
App Store IDid6821764558
Seamless Integration

Overview & Architecture

RazeGo is built from the ground up as Iraq's premier map and navigation platform. Integrating your delivery app, ride-hailing service, store locator, or messaging bot with RazeGo provides a frictionless one-click driving experience for couriers and users across Iraq.

GET https://razego.adoliy.com/location?lat=33.3152&lng=44.3661&name=Baghdad&navigate=1

Instant Turn-by-Turn Navigation

Pass navigate=1 to immediately plot routes and start voice-guided navigation (in Iraqi dialect or MSA) the moment the app opens.

Two Destinations / Delivery Mode (الوجهتين)

Built for courier, food delivery, and taxi apps. Send Stop 1 (Pickup) and Stop 2 (Dropoff) in a single URL. RazeGo navigates to Stop 1, announces arrival, and automatically switches to Stop 2.

Smart Fallback & Web Landing

If RazeGo is installed, it opens natively. If not, it opens an interactive web preview with one-tap App Store and Google Play download badges.

Offline Maps Capability

Drivers with downloaded provincial map packs can navigate continuously even when mobile network coverage drops in remote areas.

LIFECYCLEArchitecture & Deep Link Lifecycle

When an end user or driver clicks a RazeGo deep link, the operating system verifies if the application is installed. If installed, RazeGo receives the coordinates, focuses the destination on the map, and immediately triggers navigation routing.

Two-Stop Delivery Workflow: When both Stop 1 (lat, lng) and Stop 2 (lat2, lng2) are supplied, RazeGo pre-calculates both route legs in the background. It guides the driver to Stop 1 with Iraqi voice prompts. The moment the vehicle enters the arrival radius of Stop 1, RazeGo announces arrival ("وصلت إلى الوجهة الأولى، جاري بدء التوجيه إلى الوجهة التالية") and immediately begins navigation toward Stop 2 without requiring the courier to touch the screen while driving.

If RazeGo is not installed, the Universal Link opens our high-performance mobile landing card at https://razego.adoliy.com/location, displaying both stops on an interactive map with direct download links for the Apple App Store and Google Play Store.

Three Supported Protocols

Supported URL Protocols

RazeGo supports three industry-standard protocols. Choose the optimal scheme for your tech stack:

Recommended for All Platforms & Chat Apps

1. Universal Link (HTTPS)

Works natively across iOS, Android, web browsers, WhatsApp, Telegram, and SMS. Launches the app when installed or displays the web landing card.

https://razego.adoliy.com/location?lat=33.3152&lng=44.3661&name=Baghdad&navigate=1
Native App-to-App Scheme

2. Custom App Scheme

Direct deep link protocol for mobile apps that have confirmed RazeGo installation via platform visibility queries.

raze://location?lat=33.3152&lng=44.3661&name=Baghdad&navigate=1
Standard RFC 5870 Geo Protocol

3. Standard Geo URI

Android system standard recognized by the OS app chooser and automatically intercepted by RazeGo (single destination).

geo:33.3152,44.3661?q=33.3152,44.3661(Baghdad)
SPECSProtocol Decision Matrix & Best Practices

Universal Links (Recommended): Use for 95% of use cases. They prevent broken links if the user doesn't have the app yet, and open WhatsApp / SMS locations effortlessly.

Custom Scheme (raze://): Optimal for internal courier apps (delivery driver apps, taxi driver consoles) when you have already checked RazeGo installation via canLaunchUrl.

Geo URI (geo:): Supported for standard Android platform intents when you want the Android OS app picker to offer RazeGo alongside generic map handlers.

Query Schema Reference

Parameters Reference

All parameters are passed as standard URI query parameters:

Parameter Type Requirement Description Example
lat Float Required Stop 1 / Pickup latitude in decimal degrees (-90 to +90). Aliases: lat1, pickup_lat.
33.3152
lng Float Required Stop 1 / Pickup longitude in decimal degrees (-180 to +180). Aliases: lng1, pickup_lng.
44.3661
name or q String Optional Stop 1 label, store name, or pickup address. Aliases: name1, pickup_name.
Restaurant%20Pickup
lat2 Float Optional Stop 2 / Dropoff latitude coordinate (-90 to +90). Enables two-destination delivery mode. Aliases: dropoff_lat, dest_lat.
33.3010
lng2 Float Optional Stop 2 / Dropoff longitude coordinate (-180 to +180). Aliases: dropoff_lng, dest_lng.
44.3780
name2 String Optional Stop 2 label or customer delivery address. Aliases: dropoff_name.
Customer%20Dropoff
navigate or nav String / Boolean Optional Set to 1 or true to immediately start turn-by-turn driving guidance. Defaults to 0 (pin preview).
1
INTERFACETypeScript Interface & Type Schema

Copy this strict TypeScript interface directly into your frontend or mobile codebase for type-safe query construction:

RazeNavigationRequest.ts
/**
 * RazeGo Navigation Query Request Schema
 * Supports single destinations and two-destination delivery routes (Pickup -> Dropoff).
 */
export interface RazeNavigationRequest {
  /** Stop 1 / Pickup latitude in decimal degrees (-90.0 to +90.0) */
  lat: number;

  /** Stop 1 / Pickup longitude in decimal degrees (-180.0 to +180.0) */
  lng: number;

  /** Stop 1 label, store name, or pickup address (URL-encoded) */
  name?: string;

  /** Optional Stop 2 / Dropoff latitude in decimal degrees (-90.0 to +90.0) */
  lat2?: number;

  /** Optional Stop 2 / Dropoff longitude in decimal degrees (-180.0 to +180.0) */
  lng2?: number;

  /** Optional Stop 2 label, customer name, or dropoff address (URL-encoded) */
  name2?: string;

  /** Set to 1 to immediately start Turn-by-Turn GPS guidance (default: 0) */
  navigate?: 1 | 0 | '1' | '0' | boolean;
}
DELIVERYTwo-Destination Delivery Workflow Details

How Delivery Mode Works: When food delivery apps (e.g. Toters, Alsaree3), taxi apps (Careem, Baly), or courier logistics platforms send both Stop 1 and Stop 2:

  1. Navigation Start: RazeGo calculates the fastest driving route to Stop 1 (Pickup/Restaurant) and immediately starts voice-guided Turn-by-Turn navigation.
  2. Background Leg Calculation: Leg 2 (from Stop 1 to Stop 2 / Customer) is computed simultaneously in the background.
  3. Arrival & Auto-Transition: As soon as the driver reaches Stop 1, RazeGo announces arrival ("وصلت إلى الوجهة الأولى، جاري بدء التوجيه إلى الوجهة التالية") and automatically transitions guidance to Stop 2 without driver interaction.
VALIDATIONParameter Encodings & Coordinate Guidelines

Coordinate Precision: We recommend 4 to 6 decimal places (e.g., 33.315248, 44.366184) for sub-meter accuracy to driver doorways.

Arabic Destination Names: Always wrap destination labels in standard UTF-8 URL encoding. For example, encodeURIComponent('مطعم الزيتون') produces %D9%85%D8%B7%D8%B9%D9%85%20%D8%A7%D9%84%D8%B2%D9%8A%D8%AA%D9%88%D9%86.

Iraq Geofencing Bounds: Latitude roughly spans 29.0° to 37.5°N, and Longitude spans 38.5° to 49.0°E.

AI Assistant Prompt
Cursor · Claude · ChatGPT · GitHub Copilot

Implement with AI

Copy this comprehensive specification prompt directly into your AI coding assistant. It instructs the model to build a robust, production-ready RazeGo integration function matching your project's architecture.

prompt-for-ai-assistants.md
You are an expert mobile and full-stack software engineer. Your task is to integrate "Open in RazeGo" (فتح في RazeGo) navigation deep linking into our application.

### 1. Context & Objective:
RazeGo is the premier community-driven Iraqi GPS navigation app supporting Turn-by-Turn voice guidance, offline maps, Iraqi dialect audio instructions, and real-time community road hazards.
Whenever a destination or delivery journey is displayed in our app (order tracking, courier tasks, taxi dispatch, store locator, customer address), provide a button that allows the user or driver to open the coordinates in RazeGo with 1 click.

### 2. Framework-Agnostic Detection:
First, inspect our project codebase and determine the framework/language we are using:
- Flutter / Dart
- React Native / Expo (TypeScript or JavaScript)
- iOS Native (Swift / SwiftUI or UIKit)
- Android Native (Kotlin / Jetpack Compose or XML Views)
- Web Application (Next.js, React, Vue, Svelte, or Vanilla JS)
- Backend / Notification Service (Node.js, PHP/Laravel, Python for WhatsApp/SMS location links)
Generate production-ready, type-safe code tailored specifically to our detected stack.

### 3. Protocol Specifications:
- Native App Scheme (Direct Launch into RazeGo):
  raze://location?lat={LAT1}&lng={LNG1}&name={NAME1}&lat2={LAT2}&lng2={LNG2}&name2={NAME2}&navigate=1
- Universal Link (Recommended Fallback & Web):
  https://razego.adoliy.com/location?lat={LAT1}&lng={LNG1}&name={NAME1}&lat2={LAT2}&lng2={LNG2}&name2={NAME2}&navigate=1
- Standard Geo URI (Android Single-Stop Alternative):
  geo:{LAT1},{LNG1}?q={LAT1},{LNG1}({NAME1})

### 4. Query Parameters:
Primary Destination (Stop 1 / Pickup / Store):
- lat (required, number): Latitude between -90.0 and +90.0 (e.g. 33.3152).
- lng (required, number): Longitude between -180.0 and +180.0 (e.g. 44.3661).
- name (optional, string): Human-readable label or store name, URL-encoded (e.g. "Restaurant Pickup" or "نقطة الاستلام").
- navigate (optional, "1" or "0"): Set to "1" to immediately initiate turn-by-turn GPS navigation and voice guidance upon app opening. Set to "0" to just preview the pin on the map.

Two-Destination & Delivery Mode (Stop 2 / Dropoff / Customer Address):
- lat2 (optional, number): Second stop / dropoff latitude (e.g. 33.3010).
- lng2 (optional, number): Second stop / dropoff longitude (e.g. 44.3780).
- name2 (optional, string): Second stop label or customer name (e.g. "Customer Dropoff" or "نقطة التسليم").
* Delivery & Taxi Workflow: When lat2 and lng2 are provided, RazeGo immediately routes leg 1 (Current Location -> Stop 1 / Pickup). As soon as the courier arrives at Stop 1, RazeGo speaks an Iraqi dialect arrival prompt and automatically transitions turn-by-turn guidance to Stop 2 (Dropoff) with zero manual taps required by the driver. Aliases supported: pickup_lat / pickup_lng and dropoff_lat / dropoff_lng.

### 5. Two-Step Bulletproof Fallback Strategy:
- Step 1 (Primary): Attempt to launch the native RazeGo app via "raze://location?...".
- Step 2 (Graceful Fallback): If RazeGo is NOT installed on the device, catch the error and immediately open the Universal Link "https://razego.adoliy.com/location?...". This web card renders an interactive map preview of the route with 1-tap download buttons for Apple App Store and Google Play Store.

### 6. Official App Store Identifiers:
- Apple App Store ID: id6821764558
  URL: https://apps.apple.com/iq/app/razego-iraq-gps-maps/id6821764558
- Google Play Package Name: com.raze.app.raze
  URL: https://play.google.com/store/apps/details?id=com.raze.app.raze

### 7. OS Manifest Configurations:
- iOS (Info.plist): Add "raze" to LSApplicationQueriesSchemes so canOpenURL works.
- Android (AndroidManifest.xml): Add <queries> declaration for package "com.raze.app.raze" and scheme "raze".

### 8. Deliverables Expected in your response:
1. Complete, copy-paste ready helper function (e.g. openInRazeGo) supporting optional lat2, lng2, name2.
2. Ready-to-use UI Button component with label "فتح في RazeGo" (or "Open in RazeGo" if English), navigation icon, styled with primary brand color #0284C7.
3. The exact lines to add to Info.plist or AndroidManifest.xml if our project is mobile.
4. Input validation ensuring latitude and longitude are valid numbers within geographic boundaries.
AI GUIDEHow to Use This Prompt with AI Coding Assistants
  1. Click Copy AI Prompt above to copy the complete specification to your clipboard.
  2. Open your AI editor or chat tool (Cursor Composer, Claude Code, ChatGPT, GitHub Copilot).
  3. Paste the prompt along with the file path where you want the utility placed (e.g. lib/services/raze_launcher.dart or src/utils/navigation.ts).
  4. Your AI assistant will generate a fully typed, tested implementation with scheme detection, two-destination support, and fallback logic in seconds.
Real-Time Playground

Interactive Link Builder

Enter coordinates and destination details to generate live testable URLs for all supported protocols:

Stop 1 (Pickup / Store / Main Destination)
Universal Link (Recommended)
https://razego.adoliy.com/location?lat=33.3152&lng=44.3661&name=Restaurant%20Pickup&navigate=1
Custom App Scheme
raze://location?lat=33.3152&lng=44.3661&name=Restaurant%20Pickup&navigate=1
Standard Geo URI
geo:33.3152,44.3661?q=33.3152,44.3661(Restaurant%20Pickup)
Production-Ready Code

Multi-Framework Code Snippets

Select your framework or programming language to copy battle-tested implementation code:

raze_navigation_launcher.dart
import 'package:url_launcher/url_launcher.dart';

/// Launches RazeGo Turn-by-Turn GPS navigation.
/// Supports single destinations and two-destination delivery routes (Pickup -> Dropoff).
Future<void> openInRazeGo({
  required double lat,
  required double lng,
  String? name,
  // Optional Second Destination (Dropoff / Customer Delivery)
  double? lat2,
  double? lng2,
  String? name2,
  bool navigate = true,
}) async {
  final query = <String, String>{
    'lat': lat.toString(),
    'lng': lng.toString(),
    if (name != null && name.trim().isNotEmpty) 'name': name.trim(),
    if (lat2 != null && lng2 != null) ...{
      'lat2': lat2.toString(),
      'lng2': lng2.toString(),
      if (name2 != null && name2.trim().isNotEmpty) 'name2': name2.trim(),
    },
    if (navigate) 'navigate': '1',
  };

  final appUri = Uri(scheme: 'raze', host: 'location', queryParameters: query);
  final universalUri = Uri.https('razego.adoliy.com', '/location', queryParameters);

  // 1. Try launching native RazeGo app directly
  try {
    final launched = await launchUrl(appUri, mode: LaunchMode.externalApplication);
    if (launched) return;
  } catch (_) {
    // If native scheme fails or app not installed, fallback to Universal Link
  }

  // 2. Universal Link fallback (opens interactive web card with App Store & Google Play buttons)
  await launchUrl(universalUri, mode: LaunchMode.externalApplication);
}
SHELLCLI & Terminal Quick-Test Commands

Test deep link resolution and simulator handling directly from your development machine:

test-deep-links.sh
# 1. Test Single Destination Universal Link via macOS Terminal
open "https://razego.adoliy.com/location?lat=33.3152&lng=44.3661&name=Baghdad%20Tower&navigate=1"

# 2. Test Two-Destination Delivery Route (Pickup -> Dropoff) via Universal Link
open "https://razego.adoliy.com/location?lat=33.3152&lng=44.3661&name=Restaurant%20Pickup&lat2=33.3010&lng=44.3780&name2=Customer%20Dropoff&navigate=1"

# 3. Test Custom Scheme in iOS Simulator (Two Destinations)
xcrun simctl openurl booted "raze://location?lat=33.3152&lng=44.3661&name=Pickup&lat2=33.3010&lng=44.3780&name2=Dropoff&navigate=1"

# 4. Test on Android Device / Emulator via ADB (Two Destinations)
adb shell am start -a android.intent.action.VIEW -d "raze://location?lat=33.3152&lng=44.3661&name=Pickup&lat2=33.3010&lng=44.3780&name2=Dropoff&navigate=1"

# 5. Test Standard Geo URI on Android (Single Destination)
adb shell am start -a android.intent.action.VIEW -d "geo:33.3152,44.3661?q=33.3152,44.3661(Baghdad%20Tower)"
Platform Visibility

OS Manifest & Scheme Registration

To safely test whether RazeGo is installed before launching (via canLaunchUrl or canOpenURL), register these platform declarations:

IOSiOS: Register Scheme in Info.plist

Add the raze scheme under LSApplicationQueriesSchemes to prevent iOS query errors:

ios/Runner/Info.plist
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>raze</string>
</array>
ANDROIDAndroid: Package Visibility in AndroidManifest.xml

For Android 11+ (API level 30+), declare the package or scheme inside the <queries> element:

android/app/src/main/AndroidManifest.xml
<manifest>
    <queries>
        <!-- Allows querying RazeGo app availability on Android 11+ (API 30+) -->
        <package android:name="com.raze.app.raze" />
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="raze" />
        </intent>
    </queries>
</manifest>
Store Identifiers

Official Store Fallback Identifiers

Use these verified IDs to direct users who do not yet have RazeGo installed to the official stores:

Apple App Store

iOS
id6821764558
https://apps.apple.com/iq/app/razego-iraq-gps-maps/id6821764558

Google Play Store

Android
com.raze.app.raze
https://play.google.com/store/apps/details?id=com.raze.app.raze
CONFIGStore Identifiers Configuration (JSON)

Use this configuration object in your dynamic store redirect logic or remote config service:

raze-store-config.json
{
  "ios": {
    "appStoreId": "id6821764558",
    "url": "https://apps.apple.com/iq/app/razego-iraq-gps-maps/id6821764558",
    "scheme": "raze",
    "bundleIdentifier": "com.raze.app.raze"
  },
  "android": {
    "packageName": "com.raze.app.raze",
    "url": "https://play.google.com/store/apps/details?id=com.raze.app.raze",
    "scheme": "raze",
    "intentAction": "android.intent.action.VIEW"
  },
  "endpoints": {
    "universal": "https://razego.adoliy.com/location",
    "customScheme": "raze://location",
    "geoScheme": "geo:"
  }
}
Frequently Asked Questions

Developer FAQ

Answers to common integration questions from engineers, logistics teams, and app publishers:

API KEYDo I need an API key or developer account to integrate RazeGo?

No API key is required! The deep linking endpoints, Universal Links, and app schemes are completely open, public, and free. You can integrate them into your production applications immediately without provisioning credentials or rate limits.

OFFLINEDoes RazeGo support offline navigation when mobile data is unavailable?

Yes! If the driver or user has downloaded the provincial offline map pack (e.g., Baghdad, Basra, Erbil, Nineveh) from RazeGo settings, the application computes routes, recalibrates navigation, and speaks voice instructions without requiring any cellular data connection.

ENCODINGHow does RazeGo handle Arabic and foreign character destination names?

RazeGo fully supports international and Arabic character sets. Always pass strings wrapped in UTF-8 URL encoding (e.g. name=%D8%A8%D8%B1%D8%AC%20%D8%A8%D8%BA%D8%AF%D8%A7%D8%AF). RazeGo automatically decodes this on receipt and displays the clean text on the destination pin and navigation banner.

NAVIGATIONWhat is the difference between navigate=1 and navigate=0?

When navigate=1 is passed, RazeGo immediately calculates the optimal driving route and starts turn-by-turn voice guidance as soon as the app launches.

When navigate=0 (or omitted), RazeGo drops a destination pin on the map and displays the location card, allowing the driver to review arrival details or select alternative routes before starting.

المشوار الجاي

خلّ الدرب علينا.

RazeGo معك، من اختيار الوجهة إلى لحظة الوصول.