Skip to content
Demo — fictional dataDesigned by Algeria Agency

Integrations

Plug your shop into the network

A REST API in JSON to create shipments, track every parcel, book a pick-up and read your payouts; signed webhooks to be told; modules for online shops; an import template for everything else.

Start in three calls

Everything goes through the test address below, as UTF-8 JSON. Amounts are whole dinars; dates are Algiers time.

Base address
https://algeriaagency.com/api/demos/logistique/v1
Authentication
Every request carries your key in the X-Api-Key header. Keys are created in the seller space, under API; they start with kh_test_ and are shown once.X-Api-Key: kh_test_••••••••••••••••••••7Q2m
Safe retries
Add an Idempotency-Key header to every POST: the same key within 24 hours returns the same answer without creating a second parcel. The same header with a different body is refused with 409.
What the sandbox does
In the demonstration every recipient is replaced on arrival by a demo recipient with a masked number, and only a hash of the number is kept. Webhooks are written to your space’s log, never sent out. Everything is erased after 24 hours.
  1. Create a test key in the seller space.
  2. Ask for a price with GET /tariffs/quote to show delivery in your basket.
  3. Create the shipment with POST /shipments when the order is confirmed, then print the label.
  4. Listen for shipment.status_changed to update the order without polling the API.

Endpoints

Six endpoints cover an order’s journey, from the price shown in the basket to the money paid out.

POST/api/demos/logistique/v1/shipments

Create a shipment

Records a parcel, works out its price, delivery window and refusal risk, and returns the tracking number and the label.

Accepts Idempotency-KeyPossible errors :400 · 401 · 409 · 422 · 429

Request body
FieldTypeRequiredDescription
referencestring≤ 40noYour order number, returned as is.
recipientobjectyesThe recipient.
recipient.namestring2–80yesTheir name. Replaced by a demo name in the sandbox.
recipient.phonestringyesAn Algerian mobile. Masked and replaced in the sandbox; only a hash is kept.
destinationobjectyesWhere to deliver.
destination.wilayainteger1–69yesThe wilaya code, 1 to 69.
destination.communestring2–60yesA commune of that wilaya: its id or its name, in Arabic, French or Latin letters.
destination.landmarkstring≤ 160noA landmark rather than an address: « opposite the mosque », « behind the post office ».
modestringhomestop-deskyeshome or stop-desk (collected at an agency).
agencystringnoThe pick-up agency for a stop-desk; by default the wilaya’s own.
weight_kgnumber0.05–70yesWeight in kilograms.
dimensions_cmobjectnoDimensions in centimetres, for the volumetric weight.
dimensions_cm.lengthinteger1–300yesLength.
dimensions_cm.widthinteger1–300yesWidth.
dimensions_cm.heightinteger1–300yesHeight.
cod_amountinteger0–1000000yesCash to collect at the door, in dinars; 0 for a prepaid parcel.
declared_valueinteger0–5000000noDeclared value for insurance; by default the amount collected.
productstring2–120yesWhat the parcel holds, in a few words.
quantityinteger1–99noNumber of items.
optionsarray≤ 6insurancefragileexchangeconfirmationopen-on-deliveryexpressnoOptions: insurance, fragile, exchange, confirmation, open before paying, express.
notestring≤ 200noAn instruction for the courier.
Response 201
FieldTypeRequiredDescription
tracking_numberstringyesTracking number: KH and ten digits, the last a check digit.
referencestringnoYour order number, returned as is.
statestring
Values (19)pending-confirmationconfirmedawaiting-pickuppicked-upat-origin-hubin-line-haulat-destination-hubout-for-deliverydeliveredattempt-failedrescheduledat-stop-deskcollected-from-stop-deskrefusedreturn-in-transitreturnedexchangelostcancelled
yesThe parcel’s state.
priceobjectyesThe shipment’s price.
price.htintegeryesBefore tax.
price.tvaintegeryesVAT.
price.ttcintegeryesIncluding tax.
price.lines[]arrayyesThe breakdown, line by line.
price.lines[].keystringyesWhat the line is: transport, collection fee, an option…
price.lines[].amountintegeryesIts amount including tax.
price.indicativebooleanyesAlways true: the rate is indicative.
slaobjectyesThe promised delivery window, in hours after pick-up.
sla.min_hoursintegeryesAt the earliest.
sla.max_hoursintegeryesAt the latest.
riskobjectyesThe estimated refusal risk, with its reasons in the seller space.
risk.scoreinteger0–100yes0 to 100.
risk.bandstringlowmediumhighyesLow, medium or high.
label_urlstringyesThe 10 × 15 label as a PDF (a specimen in the demonstration).
tracking_urlstringyesThe tracking page to send the buyer.
created_atdatetimeyesWhen it was created.
Request — curl
curl -X POST 'https://algeriaagency.com/api/demos/logistique/v1/shipments' \
  -H 'X-Api-Key: kh_test_••••••••••••••••••••7Q2m' \
  -H 'Idempotency-Key: 6f1c2d0e-commande-0412' \
  -H 'Content-Type: application/json' \
  -d '{
    "reference": "CMD-2026-0412",
    "recipient": {
      "name": "Destinataire démo n° 42",
      "phone": "06 •• •• 48 17"
    },
    "destination": {
      "wilaya": 16,
      "commune": "Bab Ezzouar",
      "landmark": "en face de la mosquée El Feth"
    },
    "mode": "home",
    "weight_kg": 0.8,
    "cod_amount": 2500,
    "product": "Coffret soins visage",
    "options": [
      "confirmation"
    ]
  }'
Response 201
{
  "tracking_number": "KH4831200573",
  "reference": "CMD-2026-0412",
  "state": "pending-confirmation",
  "price": {
    "ht": 437,
    "tva": 83,
    "ttc": 520,
    "lines": [
      {
        "key": "transport",
        "amount": 400
      },
      {
        "key": "cod-fee",
        "amount": 50
      },
      {
        "key": "confirmation",
        "amount": 70
      }
    ],
    "indicative": true
  },
  "sla": {
    "min_hours": 12,
    "max_hours": 24
  },
  "risk": {
    "score": 21,
    "band": "low"
  },
  "label_url": "/api/demos/logistique/v1/shipments/KH4831200573/label.pdf",
  "tracking_url": "/demos/logistique/suivi/KH4831200573",
  "created_at": "2026-10-19T10:42:00+01:00"
}

GET/api/demos/logistique/v1/shipments/{tracking}

Read a shipment

A parcel’s state, its steps, its cash collection and, once out for delivery, its arrival window.

Possible errors :401 · 404 · 429

Path parameter
FieldTypeRequiredDescription
trackingstringyesTracking number: KH and ten digits, the last a check digit.
Response 200
FieldTypeRequiredDescription
tracking_numberstringyesTracking number: KH and ten digits, the last a check digit.
statestring
Values (19)pending-confirmationconfirmedawaiting-pickuppicked-upat-origin-hubin-line-haulat-destination-hubout-for-deliverydeliveredattempt-failedrescheduledat-stop-deskcollected-from-stop-deskrefusedreturn-in-transitreturnedexchangelostcancelled
yesThe parcel’s state.
modestringhomestop-deskyeshome or stop-desk (collected at an agency).
destinationobjectyesWhere to deliver.
destination.wilayainteger1–69yesThe wilaya code, 1 to 69.
destination.communestring2–60yesA commune of that wilaya: its id or its name, in Arabic, French or Latin letters.
cod_amountintegeryesCash to collect at the door, in dinars; 0 for a prepaid parcel.
cod_statestring
Values (8)pendingcollectedin-transit-to-hubreconciledpaid-outpartialdisputedrefunded
yesWhere the collected cash stands.
attemptsinteger0–3yesDelivery attempts, three at most.
etaobjectnoThe arrival window, once the parcel is out for delivery.
eta.earliestdatetimeyesWindow start.
eta.latestdatetimeyesWindow end.
events[]arrayyesThe steps, oldest first.
events[].statestring
Values (19)pending-confirmationconfirmedawaiting-pickuppicked-upat-origin-hubin-line-haulat-destination-hubout-for-deliverydeliveredattempt-failedrescheduledat-stop-deskcollected-from-stop-deskrefusedreturn-in-transitreturnedexchangelostcancelled
yesThe parcel’s state.
events[].atdatetimeyesWhen the step happened.
events[].placestringyesWhere: commune, hub code or agency.
events[].reasonstringabsentrefusedwrong-addressunreachablereschedulednoFor a failure, the reason.
Request — curl
curl -X GET 'https://algeriaagency.com/api/demos/logistique/v1/shipments/KH4831200573' \
  -H 'X-Api-Key: kh_test_••••••••••••••••••••7Q2m' \
  --compressed
Response 200
{
  "tracking_number": "KH4831200573",
  "state": "out-for-delivery",
  "mode": "home",
  "destination": {
    "wilaya": 16,
    "commune": "Bab Ezzouar"
  },
  "cod_amount": 2500,
  "cod_state": "pending",
  "attempts": 0,
  "eta": {
    "earliest": "2026-10-20T10:30:00+01:00",
    "latest": "2026-10-20T12:30:00+01:00"
  },
  "events": [
    {
      "state": "picked-up",
      "at": "2026-10-19T15:10:00+01:00",
      "place": "Bab Ezzouar"
    },
    {
      "state": "at-origin-hub",
      "at": "2026-10-19T19:45:00+01:00",
      "place": "RBA"
    },
    {
      "state": "out-for-delivery",
      "at": "2026-10-20T08:20:00+01:00",
      "place": "Bab Ezzouar"
    }
  ]
}

POST/api/demos/logistique/v1/shipments/bulk

Create shipments in bulk

Up to 500 parcels per call. Valid rows are created; the rest come back with the reason and, for a place, suggestions.

Accepts Idempotency-KeyPossible errors :400 · 401 · 409 · 413 · 429

Request body
FieldTypeRequiredDescription
shipments[]array1–500yesThe parcels, in the same shape as a single shipment.
shipments[].referencestring≤ 40noYour order number, returned as is.
shipments[].recipientobjectyesThe recipient.
shipments[].recipient.namestring2–80yesTheir name. Replaced by a demo name in the sandbox.
shipments[].recipient.phonestringyesAn Algerian mobile. Masked and replaced in the sandbox; only a hash is kept.
shipments[].destinationobjectyesWhere to deliver.
shipments[].destination.wilayainteger1–69yesThe wilaya code, 1 to 69.
shipments[].destination.communestring2–60yesA commune of that wilaya: its id or its name, in Arabic, French or Latin letters.
shipments[].destination.landmarkstring≤ 160noA landmark rather than an address: « opposite the mosque », « behind the post office ».
shipments[].modestringhomestop-deskyeshome or stop-desk (collected at an agency).
shipments[].agencystringnoThe pick-up agency for a stop-desk; by default the wilaya’s own.
shipments[].weight_kgnumber0.05–70yesWeight in kilograms.
shipments[].dimensions_cmobjectnoDimensions in centimetres, for the volumetric weight.
shipments[].dimensions_cm.lengthinteger1–300yesLength.
shipments[].dimensions_cm.widthinteger1–300yesWidth.
shipments[].dimensions_cm.heightinteger1–300yesHeight.
shipments[].cod_amountinteger0–1000000yesCash to collect at the door, in dinars; 0 for a prepaid parcel.
shipments[].declared_valueinteger0–5000000noDeclared value for insurance; by default the amount collected.
shipments[].productstring2–120yesWhat the parcel holds, in a few words.
shipments[].quantityinteger1–99noNumber of items.
shipments[].optionsarray≤ 6insurancefragileexchangeconfirmationopen-on-deliveryexpressnoOptions: insurance, fragile, exchange, confirmation, open before paying, express.
shipments[].notestring≤ 200noAn instruction for the courier.
Response 200
FieldTypeRequiredDescription
accepted[]arrayyesThe rows created.
accepted[].indexintegeryesThe row’s position in the batch, from 0.
accepted[].tracking_numberstringyesTracking number: KH and ten digits, the last a check digit.
rejected[]arrayyesThe rows refused.
rejected[].indexintegeryesThe row’s position in the batch, from 0.
rejected[].errors[]arrayyesWhat is wrong.
rejected[].errors[].pathstringyesThe field at fault.
rejected[].errors[].codestringyesA stable code.
rejected[].errors[].suggestionsarraynoFor a place, the closest names.
Request — curl
curl -X POST 'https://algeriaagency.com/api/demos/logistique/v1/shipments/bulk' \
  -H 'X-Api-Key: kh_test_••••••••••••••••••••7Q2m' \
  -H 'Idempotency-Key: 6f1c2d0e-commande-0412' \
  -H 'Content-Type: application/json' \
  -d '{
    "shipments": [
      {
        "reference": "CMD-2026-0412",
        "recipient": {
          "name": "Destinataire démo n° 42",
          "phone": "06 •• •• 48 17"
        },
        "destination": {
          "wilaya": 16,
          "commune": "Bab Ezzouar",
          "landmark": "en face de la mosquée El Feth"
        },
        "mode": "home",
        "weight_kg": 0.8,
        "cod_amount": 2500,
        "product": "Coffret soins visage",
        "options": [
          "confirmation"
        ]
      },
      {
        "reference": "CMD-2026-0413",
        "recipient": {
          "name": "Destinataire démo n° 42",
          "phone": "06 •• •• 48 17"
        },
        "destination": {
          "wilaya": 31,
          "commune": "Bir Djir"
        },
        "mode": "home",
        "weight_kg": 0.8,
        "cod_amount": 2500,
        "product": "Coffret soins visage",
        "options": [
          "confirmation"
        ]
      }
    ]
  }'
Response 200
{
  "accepted": [
    {
      "index": 0,
      "tracking_number": "KH4831200573"
    }
  ],
  "rejected": [
    {
      "index": 1,
      "errors": [
        {
          "path": "destination.commune",
          "code": "commune-unknown",
          "suggestions": [
            "Bir el-Djir"
          ]
        }
      ]
    }
  ]
}

GET/api/demos/logistique/v1/tariffs/quote

Get a rate

The all-in price and the delivery window between two wilayas, with options. The rate is indicative and follows management’s grid.

Possible errors :400 · 401 · 422 · 429

Query parameters
FieldTypeRequiredDescription
from_wilayainteger1–69yesOrigin wilaya.
to_wilayainteger1–69yesDestination wilaya.
to_communestringnoDestination commune, to tell parts of one city apart.
weight_kgnumber0.05–70yesWeight in kilograms.
modestringhomestop-deskyeshome or stop-desk (collected at an agency).
cod_amountinteger0≥ noCash to collect at the door, in dinars; 0 for a prepaid parcel.
optionsstringnoThe same options, comma-separated.
Response 200
FieldTypeRequiredDescription
bandstringyesThe rate band: same city, same wilaya or a pair of zones.
priceobjectyesThe shipment’s price.
price.htintegeryesBefore tax.
price.tvaintegeryesVAT.
price.ttcintegeryesIncluding tax.
price.lines[]arrayyesThe breakdown, line by line.
price.lines[].keystringyesWhat the line is: transport, collection fee, an option…
price.lines[].amountintegeryesIts amount including tax.
price.indicativebooleanyesAlways true: the rate is indicative.
slaobjectyesThe promised delivery window, in hours after pick-up.
sla.min_hoursintegeryesAt the earliest.
sla.max_hoursintegeryesAt the latest.
unavailablearrayyesRequested options not offered on this route.
Request — curl
curl -X GET 'https://algeriaagency.com/api/demos/logistique/v1/tariffs/quote?from_wilaya=16&to_wilaya=31&weight_kg=1.2&mode=home&cod_amount=3500&options=insurance,fragile' \
  -H 'X-Api-Key: kh_test_••••••••••••••••••••7Q2m' \
  --compressed
Response 200
{
  "band": "north>north",
  "price": {
    "ht": 882,
    "tva": 168,
    "ttc": 1050,
    "lines": [
      {
        "key": "transport",
        "amount": 750
      },
      {
        "key": "cod-fee",
        "amount": 50
      },
      {
        "key": "insurance",
        "amount": 100
      },
      {
        "key": "fragile",
        "amount": 150
      }
    ],
    "indicative": true
  },
  "sla": {
    "min_hours": 24,
    "max_hours": 48
  },
  "unavailable": []
}

POST/api/demos/logistique/v1/pickups

Book a pick-up

A courier calls at your place on the working day you choose, morning or afternoon. After 2 p.m. a same-day pick-up is no longer guaranteed.

Accepts Idempotency-KeyPossible errors :400 · 401 · 409 · 422 · 429

Request body
FieldTypeRequiredDescription
datedateyesA working day: not a Friday, not a public holiday.
slotstringmorningafternoonyesMorning or afternoon.
parcelsinteger1–500yesHow many parcels are waiting.
tracking_numbersarray≤ 500noTheir numbers, if you have them.
locationobjectyesWhere to call, with a landmark.
location.wilayainteger1–69yesThe wilaya code, 1 to 69.
location.communestring2–60yesA commune of that wilaya: its id or its name, in Arabic, French or Latin letters.
location.landmarkstring≤ 160noA landmark rather than an address: « opposite the mosque », « behind the post office ».
Response 201
FieldTypeRequiredDescription
pickup_refstringyesThe pick-up’s reference.
datedateyesA working day: not a Friday, not a public holiday.
slotstringmorningafternoonyesMorning or afternoon.
statestringscheduledcollectedmissedcancelledyesScheduled, collected, missed or cancelled.
Request — curl
curl -X POST 'https://algeriaagency.com/api/demos/logistique/v1/pickups' \
  -H 'X-Api-Key: kh_test_••••••••••••••••••••7Q2m' \
  -H 'Idempotency-Key: 6f1c2d0e-commande-0412' \
  -H 'Content-Type: application/json' \
  -d '{
    "date": "2026-10-20",
    "slot": "morning",
    "parcels": 14,
    "location": {
      "wilaya": 16,
      "commune": "Bab Ezzouar",
      "landmark": "à côté de la pharmacie de nuit"
    }
  }'
Response 201
{
  "pickup_ref": "KH-DEMO-RAM-01877",
  "date": "2026-10-20",
  "slot": "morning",
  "state": "scheduled"
}

GET/api/demos/logistique/v1/payouts

List payouts

Payouts of the cash collected, by bank or postal (CCP) transfer, with the fees withheld and the next payout day.

Possible errors :400 · 401 · 429

Query parameters
FieldTypeRequiredDescription
fromdatenoFrom this date.
todatenoUp to this date.
statestringscheduledsentnoScheduled or sent.
pageinteger1≥ noPage number.
per_pageinteger1–100noRows per page.
Response 200
FieldTypeRequiredDescription
payouts[]arrayyesPayouts, newest first.
payouts[].refstringyesThe payout statement.
payouts[].scheduled_fordateyesThe day planned.
payouts[].sent_atdatetimenoWhen it was sent.
payouts[].methodstringbankccpyesBank or CCP transfer.
payouts[].parcelsintegeryesParcels in the payout.
payouts[].collectedintegeryesTotal collected.
payouts[].feesintegeryesFees withheld: delivery, collection, options, returns.
payouts[].netintegeryesAmount paid.
payouts[].statestringscheduledsentyesScheduled or sent.
next_payout_daydateyesThe next payout day.
next_pageintegernoThe next page, or nothing.
Request — curl
curl -X GET 'https://algeriaagency.com/api/demos/logistique/v1/payouts?from=2026-10-01&state=sent' \
  -H 'X-Api-Key: kh_test_••••••••••••••••••••7Q2m' \
  --compressed
Response 200
{
  "payouts": [
    {
      "ref": "KH-DEMO-REL-00318",
      "scheduled_for": "2026-10-18",
      "sent_at": "2026-10-18T10:05:00+01:00",
      "method": "ccp",
      "parcels": 37,
      "collected": 112400,
      "fees": 18620,
      "net": 93780,
      "state": "sent"
    }
  ],
  "next_payout_day": "2026-10-21",
  "next_page": null
}

Signed webhooks

Register an address in the seller space and pick the events. Every delivery carries a signature you check before trusting its content.

Events

shipment.status_changed

A parcel changes state: picked up, at the hub, out for delivery, delivered, recipient absent, refused, returned.

Event payload
{
  "id": "evt_7Hc2Qm8LxP0aR4tN9kDz",
  "type": "shipment.status_changed",
  "created_at": "2026-10-20T11:02:13+01:00",
  "data": {
    "tracking_number": "KH4831200573",
    "reference": "CMD-2026-0412",
    "from": "out-for-delivery",
    "to": "delivered",
    "at": "2026-10-20T11:02:10+01:00",
    "place": "Bab Ezzouar"
  }
}

cod.collected

The courier collected the amount at the door, in full or in part.

Event payload
{
  "id": "evt_7Hc2Qm8LxP0aR4tN9kDz",
  "type": "cod.collected",
  "created_at": "2026-10-20T11:02:13+01:00",
  "data": {
    "tracking_number": "KH4831200573",
    "amount": 2500,
    "collected_at": "2026-10-20T11:02:10+01:00",
    "partial": false
  }
}

payout.sent

A payout left for your bank or CCP account.

Event payload
{
  "id": "evt_7Hc2Qm8LxP0aR4tN9kDz",
  "type": "payout.sent",
  "created_at": "2026-10-20T11:02:13+01:00",
  "data": {
    "ref": "KH-DEMO-REL-00318",
    "net": 93780,
    "method": "ccp",
    "parcels": 37,
    "sent_at": "2026-10-18T10:05:00+01:00"
  }
}

Checking a signature

The X-Khatt-Signature header holds t= (the send time in seconds) and v1= (the hex HMAC-SHA256 of t, a dot and the raw body, keyed with the address’s secret). Recompute it, compare in constant time and refuse anything older than five minutes.

X-Khatt-Signature: t=1760954533,v1=5f0c…e21a
Verification in JavaScript
import { createHmac, timingSafeEqual } from 'node:crypto'

export function verify(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(',').map((p) => p.split('=')))
  const age = Math.abs(Date.now() / 1000 - Number(parts.t))
  if (!parts.t || !parts.v1 || age > 300) return false
  const expected = createHmac('sha256', secret).update(`${parts.t}.${rawBody}`).digest('hex')
  return timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1))
}
  • Answer with a 2xx within ten seconds. Otherwise the delivery is retried after 1 min, 5 min, 30 min, 2 h and 6 h, then marked failed in the log.
  • The « Send a test » button in the seller space (or POST /webhooks/test) produces a sample of every event.

Limits and errors

  • At most 300 requests an hour per key. The X-RateLimit-Remaining and X-RateLimit-Reset headers tell you where you stand; beyond it the answer is 429 with Retry-After.
  • A bulk call counts as one request and takes at most 500 parcels. Lists are paged by 100 rows at most.
  • An error always has the same shape: a stable code, a readable message and, for a field, its path and reason.
422
{
  "error": {
    "code": "unprocessable",
    "message": "…",
    "fields": [
      {
        "path": "destination.commune",
        "code": "commune-other-wilaya"
      }
    ]
  }
}
HTTPcodeDescription
400invalid_requestUnreadable request: invalid JSON or a missing parameter.
401unauthorizedKey missing, unknown or revoked.
403forbiddenThe key has no access to this resource.
404not_foundNo parcel or payout with that number for this account.
409conflictIdempotency-Key already used with a different body.
413too_largeA bulk call of more than 500 parcels.
422unprocessableValid but refused: unknown wilaya, a commune from another wilaya, weight out of bounds.
429rate_limitedToo many requests: wait for the time given.
500internalOur error: retry with the same Idempotency-Key.

For online shops

No API to write: a module puts the rate in the basket, creates the shipment when the order is confirmed and updates the order at every step.

  • Shops on open-source CMSs

    A module installed from the shop’s admin: the rate by wilaya in the basket, home or stop-desk, the label straight from the order.

    Demonstration
  • Hosted shops

    An app you connect in two clicks with your key: orders land in the seller space, ready to confirm and label.

    Demonstration
  • Marketplaces

    A connector that reads orders from the marketplaces you sell on and sends the tracking number back to the buyer.

    Demonstration
  • Selling by message

    Selling in direct messages? Paste the order into the seller space: the address and amount are recognised, and you confirm every field.

    Demonstration

CSV and Excel import

To send a day of orders in one go, without the API: one file, one row per parcel, up to 500 rows.

Recognised columns

Order does not matter, and Arabic or English headers are recognised too. Name, phone, wilaya, commune and amount are required.

Each row is checked on import: a commune that is not in its wilaya is flagged with the nearby communes, and a blank weight counts as 1 kg.

In the demonstration the names and numbers in the file are replaced with demo values on import. The template’s numbers are masked.

ColumnRequired
Nomyes
Téléphoneyes
Wilayayes
Communeyes
Adresseno
Poidsno
Montantyes
Produitno
Remarqueno
Quantiténo
Modeno

E-commerce delivery, road freight and warehousing, across all 69 wilayas.

Reach us

Masked number06 •• •• 48 17

contact@exemple.dz

Message us on WhatsApp

Masked number and demonstration address. A simulated conversation inside the demonstration: nothing is sent.

The network

5 hubs · 69 agencies

Every agency

Agency hours

  • Saturday to Wednesday, 8:30 am – 6 pm
  • Thursday, 8:30 am – 1 pm
  • Closed on Friday; the hubs work three shifts and the line hauls keep running.

Demonstration A demonstration designed by Algeria Agency. Khatt does not exist: the company, its hubs, agencies, vehicles, characters, sellers, customers, parcels and reviews are fictional. Tariffs are indicative, no number can be dialled, no position is anyone’s real one, and nothing is collected, delivered or sent.

The people shown in the demonstration are fictional characters. Fictional character

RC 16/00-DEMO · NIF DEMO · NIS DEMO · Fictional demonstration company

Map and geography: © OpenStreetMap contributors, database under the Open Database Licence (ODbL). Map licence

Photo credits

Free-licence photographs, hosted by the demonstration; every other image is generated.

  • La vue la plus spectaculaire depuis l’autoroute Est Ouest Bouira AlgérieAuthor: Bouizriphotography · CC BY-SA 4.0 · Source
  • Autoroute est ouest ghomri2Author: Sandervalya · CC BY-SA 3.0 · Source
  • Route au milieu du sableAuthor: habib kaki 2 from Zeralda · Public domain · Source
  • Une route en pleine montagnes de DjurjuraAuthor: Zinou2go · CC BY-SA 3.0 · Source
  • Route d’El MfatehaAuthor: Habib kaki · CC0 1.0 · Source
  • Parc National du Tassili N’Ajjer (W. Illizi) 01Author: W.aliane9509 · CC BY-SA 4.0 · Source
  • Route OuarglaAuthor: Abdelkadermer · CC BY-SA 3.0 · Source
  • Wooden-pallets stacked 8Author: W.carter · CC0 1.0 · Source
  • Wooden-pallets stacked 7Author: W.carter · CC0 1.0 · Source
  • Highway light trains at night (Unsplash)Author: Jamie Street · CC0 1.0 · Source
  • KlisterpapirAuthor: Ditlev Petersen · CC BY-SA 3.0 · Source
  • Macro photography – barcode detailAuthor: Frettie · CC BY 3.0 · Source
  • Corrugated CardboardAuthor: Richard Wheeler (Zephyris) · CC BY-SA 3.0 · Source
Designed by Algeria Agency

We measure how this site is used with Google Analytics, to learn which pages actually help. You can stop that measurement at any time from the footer.We measure our audience. Cookie policyCookies