πŸ”Œ Store Integration

Connect Your Store to GoFlow

New orders from your store appear in GoFlow automatically. No copy-pasting, no manual entry.

Getting Started
● Live

GoFlow Integration Docs

Connect your online store to GoFlow so new orders come in automatically. When a customer buys, the order appears in GoFlow. We ship it. Your customer gets a tracking code.

πŸ”‘ You need a GoFlow API key to integrate. Email us to request yours and we will respond within 24 hours.

How It Works

GoFlow uses a webhook model. Your store sends an HTTP POST to our endpoint when an order is placed. We validate it, create the order, and return a tracking code.

1

Customer places an order on your store

Your platform fires a webhook on new order creation.

2

Your store sends a signed POST to GoFlow

The payload contains customer and shipping details, signed with your API secret.

3

GoFlow creates the order and returns a code

We assign a GoFlow order code (e.g. GF-4821) and return it in the response.

4

Your customer tracks the delivery

Share the GoFlow code. They can track at /track or ask on WhatsApp.

Endpoint

HTTP
POST https://zudjllgouthpgoljklqk.supabase.co/functions/v1/woocommerce-webhook

Content-Type: application/json
X-GoFlow-Signature: <hmac-sha256-hex>

Authentication

Every request must include a valid HMAC-SHA256 signature in the X-GoFlow-Signature header. This tells us the request came from your store and has not been tampered with.

Signing a Request

JavaScript
async function signPayload(body, secret) {
  const key = await crypto.subtle.importKey(
    'raw', new TextEncoder().encode(secret),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']
  );
  const sig = await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(body));
  return Array.from(new Uint8Array(sig)).map(b => b.toString(16).padStart(2,'0')).join('');
}
PHP
$signature = hash_hmac('sha256', $body, $api_secret);
πŸ”‘ Your API secret is never sent in the request, only the signature. Never put it in frontend code.

Payload Format

All platforms send the same JSON structure to GoFlow.

JSON
{
  "event":    "order.created",
  "order_id": "12345",
  "customer": {
    "name":  "Adaeze Okonkwo",
    "phone": "08012345678",
    "email": "adaeze@example.com"
  },
  "shipping": {
    "address_1":   "45 Adeola Odeku",
    "city":        "Lagos",
    "state":       "Lagos",
    "country":     "NG",
    "shipping_fee": 3500
  },
  "notes": "Call before delivery"
}

Field Reference

FieldTypeRequiredDescription
eventstringRequiredMust be order.created
order_idstringRequiredYour platform's order ID
customer.namestringRequiredRecipient's full name
customer.phonestringRequiredRecipient's phone number
shipping.statestringRequiredNigerian state name
shipping.address_1stringRequiredStreet address
shipping.shipping_feenumberOptionalFee in Naira
notesstringOptionalDelivery notes

Response

JSON
// 201 Created
{ "success": true, "order_code": "GF-4821" }

// 401 Unauthorized
"Unauthorized"
● Available Now

WooCommerce

Install the GoFlow Delivery plugin on your WordPress site. Customers select their Lagos zone or interstate state at checkout, the fee calculates live, and every new order is sent to GoFlow automatically.

GoFlow Delivery for WooCommerce

Version 1.0.0 — WordPress 5.8+  /  WooCommerce 6.0+  /  PHP 7.4+
Classic Checkout • Blocks Checkout • HPOS compatible

⬇ Download Plugin (.zip)
Demo pricing included. The plugin ships with demo rates so you can test immediately. Replace them under WooCommerce → GoFlow Delivery → Lagos Zone Fees / Interstate Fees once you go live.

What it does

FeatureDetail
Lagos delivery29 zones with smart city autocomplete — customer types a street or area and the correct zone resolves automatically
Interstate deliveryAll 36 states + FCT with Park Pickup (default) and Home Delivery options
Checkout typesWorks with Classic Checkout (shortcode) and Blocks Checkout
Order syncEach order is sent to GoFlow automatically on placement, with 5-attempt retry queue
TrackingGoFlow Tracking ID shown on Thank You page, My Account, and order emails
Status syncGoFlow pushes status updates back into WooCommerce (Picked Up, In Transit, Delivered, etc.)
Sandbox modeTest the full checkout flow without sending live orders to GoFlow

Installation

1

Download and upload the plugin

Download goflow-woocommerce.zip above, then go to Plugins → Add New → Upload Plugin and install it.

2

Activate and add to a shipping zone

Activate the plugin, then go to WooCommerce → Settings → Shipping → [Your Zone] and add GoFlow Delivery as a shipping method.

3

Enter your credentials

Go to WooCommerce → GoFlow Delivery → API & Settings. Fill in your Webhook URL, API Key, Webhook Secret, and pickup address.

4

Share your inbound webhook URL

Copy the Inbound Status Webhook URL shown on the settings page and send it to GoFlow so delivery status updates flow back into your orders.

5

Disable sandbox and go live

Place a test order first with Sandbox Mode ON. Once confirmed, uncheck sandbox and you are live.

✅ Once configured, every WooCommerce order triggers a GoFlow shipment automatically — no manual entry required.

Required Settings

FieldWhere to get it
Webhook URLProvided by GoFlow β€” request yours
API KeyProvided by GoFlow alongside the webhook URL
Webhook SecretA shared secret you choose β€” tell GoFlow the same value
Tracking URL Basehttps://goflowlogistics.netlify.app/track
Pickup AddressYour warehouse or store address where GoFlow collects orders
● Manual Setup Required

Shopify

There is no native Shopify app yet. You can connect Shopify to GoFlow using a small middleware script deployed to any free Node.js host like Vercel, Railway, or Render.

⚠️ Shopify sends its own payload format. The middleware script below converts it into GoFlow's format before forwarding.

Shopify Middleware Script

Node.js β€” deploy to Vercel or any Node host in 5 minutes

⬇ Download Script

Shopify Webhook Setup

1

Deploy the middleware script

Push to Vercel or Railway. Set GOFLOW_SECRET and SHOPIFY_SECRET as environment variables.

2

Go to Shopify Admin β†’ Settings β†’ Notifications

Scroll to the Webhooks section at the bottom.

3

Create a webhook

Event: Order creation. Format: JSON. URL: your middleware URL.

4

Test with a real order

Place a test order. Check your GoFlow admin β€” the order should appear within seconds.

● Available Now

Custom Website

If you have a custom-built site or backend, send orders directly to GoFlow from your server. Sign the payload with your API secret and POST to our endpoint.

πŸ’‘ Always sign requests from your backend server. Never put your API secret in browser-side JavaScript.

Node.js

JavaScript
const crypto = require('crypto');

async function sendToGoFlow(order) {
  const payload = {
    event: 'order.created', order_id: String(order.id),
    customer: { name: order.name, phone: order.phone, email: order.email },
    shipping: { address_1: order.address, city: order.city, state: order.state, country: 'NG', shipping_fee: order.fee },
    notes: order.notes || ''
  };
  const body = JSON.stringify(payload);
  const sig  = crypto.createHmac('sha256', process.env.GOFLOW_SECRET).update(body).digest('hex');
  const res  = await fetch('https://zudjllgouthpgoljklqk.supabase.co/functions/v1/woocommerce-webhook', {
    method: 'POST', headers: { 'Content-Type': 'application/json', 'X-GoFlow-Signature': sig }, body
  });
  return res.json(); // { success: true, order_code: 'GF-4821' }
}

PHP

PHP
$body      = json_encode($payload);
$signature = hash_hmac('sha256', $body, getenv('GOFLOW_SECRET'));
$ch = curl_init('https://zudjllgouthpgoljklqk.supabase.co/functions/v1/woocommerce-webhook');
curl_setopt_array($ch, [
  CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body, CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'X-GoFlow-Signature: '.$signature]
]);
$result = json_decode(curl_exec($ch), true);

Nigerian States Reference

Use these exact state names in the shipping.state field.

StateZoneDelivery TimeFrom Price
LagosSame DaySame day₦2,000
Ogun / Oyo / Osun / Ondo / Ekiti / KwaraSouth West1 working day₦3,500
FCT Abuja / Rivers / Kano / Enugu + all othersNationwide2–3 working days₦5,000

Error Codes

HTTP StatusBodyMeaning
201 Created{"success":true,"order_code":"GF-XXXX"}Order created successfully
200 OK{"received":true}Event ignored (not order.created)
401 UnauthorizedUnauthorizedSignature mismatch β€” check your secret
405 Method Not AllowedMethod not allowedOnly POST accepted
500 Server ErrorError messageContact us
⚠️ 401 most common cause: the body you signed differs from the body you sent. Use JSON.stringify(payload) once and reuse that exact string for both signing and sending.

Get Your API Key

API keys are free. We issue them to verified businesses and developers within 24 hours of request.

βœ… Email us with your store URL, platform, and WhatsApp number. We will send your key within 24 hours.