Delivery Sources (SuperAdmin)
Platform-level registry of delivery carriers. Sellers opt into these sources and configure their own pricing per destination via the seller dashboard.
Open Settings → Delivery Sources.
Source types
| Type | Owner | Visible to |
|---|---|---|
| Platform | Sellub | All sellers |
| Partner | 3rd party (e.g. DHL) | All sellers |
| Seller | A specific seller | Only that seller (created from the seller dashboard) |
Use Platform / Partner for carriers you negotiate centrally and want available to every seller. Sellers create their own “seller” sources from their own dashboard for in-house couriers.
Pricing models
The pricing model is informational metadata; actual price calculation is driven by the rate rows sellers configure. Supported values:
| Value | When to use |
|---|---|
flat | Single price regardless of destination |
regional | Per-region/city price (the default) |
origin_destination | Different price per (origin, destination) pair |
distance | Calculated from km (requires distance API integration) |
weight | Calculated from package weight |
Today only
flatandregionalare wired into the calculator.origin_destinationis supported via the precedence cascade — pick this when sellers will configure rates with different pickup cities.distanceandweightare reserved for future calculators.
Required fields
- Code: lowercase URL-safe identifier (
ghana_post,dhl_express). Cannot be changed after creation. - Name: customer-facing display name.
- Type: platform / partner / seller.
Optional fields
- Description, website URL, logo URL, contact phone/email.
- Webhook URL + secret — for carrier integrations that POST tracking updates back to Sellub.
- Sort order — lower numbers appear first in dropdowns.
- Active toggle — inactive sources are hidden from sellers but existing rates referring to them remain.
Lifecycle
- Create: SuperAdmins only.
- Update: SuperAdmins (or the owning seller for
seller-type sources). - Delete: SuperAdmins only.
Deleting a source orphans any rates referencing it; sellers will need to re-attach their rates. Prefer deactivating instead of deleting if the carrier is just temporarily unavailable.
GraphQL surface
type DeliverySource {
id: ID!
code: String!
name: String!
type: String! # platform | seller | partner
pricingModel: String! # flat | regional | origin_destination | distance | weight
description: String
websiteUrl: String
logoUrl: String
contactPhone: String
contactEmail: String
webhookUrl: String
ownerSellerId: ID
isActive: Boolean!
sortOrder: Int!
createdAt: DateTime!
updatedAt: DateTime!
}
# Queries
deliverySources(includeInactive: Boolean, type: String): [DeliverySource!]!
deliverySourcesForSeller(sellerId: ID!): [DeliverySource!]!
deliverySource(id: ID!): DeliverySource
# Mutations (SuperAdmin)
createDeliverySource(input: CreateDeliverySourceInput!): DeliverySource!
updateDeliverySource(id: ID!, input: UpdateDeliverySourceInput!): DeliverySource!
deleteDeliverySource(id: ID!): DeleteResult!Customer-facing impact
At checkout, the customer sees one option per (seller, source) combo. The
source’s name is rendered as via {Source name} under the seller name.