Hire a nearby peer shipper for any parcel, even one sold outside Snuggoo (your own store, Instagram, WhatsApp). Your fee sits in escrow, the shipper posts the item's value as an insurance deposit, and a one-time delivery code settles the handoff.
Enter your delivery id (it looks like DLV-…). Shows the stage and city route only, never names, phones, or addresses.
Every step moves money only through escrow. Nobody is paid until the parcel is where it should be.
Add pickup and receiver contacts, item details, the declared value, and the fee you'll pay. The fee is frozen from your Snuggoo wallet the moment you post.
Shippers covering your route are alerted. To accept, a shipper must freeze the FULL declared item value from their own wallet as an insurance deposit.
The shipper collects the parcel and uploads pickup proof (a photo or a short clip) before the job moves in transit.
You share the 6-digit code with the receiver. The shipper enters it at handoff: they get the fee plus their deposit back, instantly. No code? Confirm from your delivery page instead.
Both sides have real money at stake, held by Snuggoo, so honesty is the only profitable strategy.
Your delivery fee is held by Snuggoo at posting. The shipper is paid only when the delivery settles. Cancel while the job is still open and the fee returns in full.
The shipper freezes the parcel's declared value before they can touch it. If the delivery fails, the deposit is forfeited to you and your fee refunds, so a lost parcel is covered up to the value you declared.
A 6-digit code only you (the poster) can see. Hand it to the recipient; the shipper settles only by entering it at handoff. A wrong code changes nothing.
Photo or video proof is required at pickup, so there's a record of the parcel's condition when it left your hands.
Anyone with a Snuggoo account can earn by delivering on routes they already travel.
Selling on your own website or another marketplace? Create deliveries programmatically and track them from your system. Same product: escrowed fee, insurance deposit, delivery code, pickup proof.
You need a Snuggoo API key with the deliveries.create permission (create one under Settings → Developer on snuggoo.com). Keys support IP allowlists and per-currency spend caps, so a leaked key has a bounded blast radius. Full reference: developers.snuggoo.com.
Create a delivery: pickup + dropoff contact blocks, a parcel, the declared value, your fee, and useDeliveryCode (on by default). Returns the delivery plus the deliveryCode, readable on every later GET, for your system only, never the shipper.
Track it: stage (open → pickup → in-transit → delivered → completed), the shipper once accepted, pickup proof, and the event timeline.
Confirm receipt: pays the shipper's fee and thaws their deposit. Only needed when the delivery code wasn't used at handoff.
Cancel while still open (no shipper yet). The escrowed fee refunds in full. Mutual-cancel and return-leg endpoints cover the later stages.
Set a webhookUrl on your API key and Snuggoo pushes signed events as your deliveries move. Each POST carries X-Snuggoo-Signature: t=…,v1=…, an HMAC-SHA256 of <t>.<rawBody> with your webhook secret.
| Event | Fired when |
|---|---|
delivery.accepted | A shipper accepted and froze the insurance deposit. |
delivery.picked_up | Pickup proof uploaded; parcel is in transit. |
delivery.delivered | Marked delivered without a code; your confirmation is awaited. |
delivery.reopened | The shipper withdrew before pickup; the job is open again. |
delivery.returning | A mutual cancel was agreed in transit; the parcel is coming back. |
delivery.completed | Settled: fee paid, deposit thawed. |
delivery.failed | Failed: deposit forfeited to you, fee refunded. |
delivery.cancelled | You cancelled an open delivery; fee refunded. |
2xx quickly. Snuggoo retries twice on network errors and 5xx; a 4xx is treated as a rejection and not retried. Events are best-effort: keep GET /v1/deliveries/:id as your source of truth.# 1. Create a delivery (fee is escrowed from your wallet) curl -X POST https://api.snuggoo.com/v1/deliveries \ -H "Authorization: Bearer sk_live_…" \ -H "Content-Type: application/json" \ -d '{ "pickup": { "name": "Ada Store", "phone": "+2348010000001", "country": "ng", "state": "Lagos", "city": "Ikeja", "address": "Warehouse 4" }, "dropoff": { "name": "Chidi Okafor", "phone": "+2348010000002", "country": "ng", "state": "Lagos", "city": "Lekki", "address": "Block 12, Admiralty Way" }, "parcel": { "description": "Sneakers, boxed", "weight": "1.2kg" }, "value": 45000, "fee": 2500 }' # → { "ok": true, # "delivery": { "id": "DLV-…", "stage": "open", … }, # "deliveryCode": "482913" } # Give the deliveryCode to your buyer; the # shipper enters it at handoff. # 2. Track it curl https://api.snuggoo.com/v1/deliveries/DLV-… \ -H "Authorization: Bearer sk_live_…"Verify a webhook · Node.js
const crypto = require('crypto'); function verifySnuggoo(rawBody, sigHeader, secret) { const parts = Object.fromEntries( sigHeader.split(',').map(p => p.split('='))); const expected = crypto .createHmac('sha256', secret) .update(parts.t + '.' + rawBody) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(parts.v1 || '')); }
You (the poster) pay the delivery fee. The shipper earns it at settlement. Snuggoo holds both the fee and the shipper's deposit in escrow while the job runs.
Your local Snuggoo wallet currency. The fee, the deposit, and every refund move in that one currency.
The shipper marks the job failed (or you dispute it): their deposit, equal to the value you declared, is forfeited to you, and your fee is refunded.
Yes, by mutual agreement. Either side can request a cancel and the other accepts or declines. Before pickup the job simply reopens or unwinds; in transit the parcel is returned to you, and the money only unwinds once you confirm the return. A co-operative cancel never forfeits the shipper's deposit; marking the job failed does.
Deliveries roll out market by market. When the module isn't enabled yet for the platform, the API answers 403 module_disabled and the Deliveries page on snuggoo.com says so.