Signage that works as hard as your brand.info@nationwidesignage.co.zaClient login
Nationwide Signage API · Version 1

Build your signage
experience with confidence.

A practical guide to authentication, products, configuration and quotation requests. Every endpoint is category-locked to Nationwide Signage.

Base URLhttps://brandingapi-signage.vercel.app/api/v1
Overview

One focused API for the Signage catalogue.

The Nationwide Signage API lets a website, reseller platform or internal tool read structured product information and request prices. Signage keys cannot read Packaging, Printing or any other Nationwide catalogue.

REST + JSONPredictable endpoints and response envelopes.
Firebase-backedCatalogue and credentials use the live Signage project.
ZAR pricingSuccessful quote responses use South African rand.
Revocable keysUse a separate credential for every integration.
Quick start

Fetch your first products.

  1. 1
    Sign in to the developer portal

    Use your Firebase account to open the Signage dashboard.

  2. 2
    Create a dedicated API key

    Name it after the website or integration that will use it. Copy it immediately; the complete key is shown only once.

  3. 3
    Store the key on your server

    Use an environment variable such as SIGNAGE_API_KEY. Never put a private key in browser JavaScript or a public repository.

  4. 4
    Send an authenticated request

    Include the key in the HTTP Authorization header.

TerminalList products
curl "https://brandingapi-signage.vercel.app/api/v1/products" \
  -H "Authorization: Bearer YOUR_API_KEY"
Authentication

Bearer keys, securely scoped.

Protected requests use a Signage API key in the standard Bearer header. Keys begin with signage_live_, are stored as SHA-256 hashes and can be revoked from the dashboard at any time.

HTTP headerRequired on protected endpoints
Authorization: Bearer signage_live_your_private_key
Keep credentials server-side.

Your own backend should call the Signage API. A browser should call your backend, not this API with a private key embedded in frontend code.

Available scopes

products:signage:readRead the Signage catalogue and individual product records.
quotes:createSubmit product, quantity and configuration data for quotation.
Endpoint reference

Version 1 endpoints.

MethodPathPurposeScope
GET/productsList or search the complete Signage catalogue.products:signage:read
GET/products/{product_id}Retrieve one product with its options, media and availability.products:signage:read
POST/quotesRequest a price for a product, quantity and selected configuration.products:signage:read + quotes:create
GET/auth/statusConfirm the supported authentication mode and scopes.Public
GET/statusCheck catalogue health, source and product count.Public
Products

List, search and retrieve products.

GET /products returns a data array and useful catalogue metadata. Add the optional search query parameter to match product names, SKUs and descriptions.

TerminalSearch the catalogue
curl "https://brandingapi-signage.vercel.app/api/v1/products?search=banner" \
  -H "Authorization: Bearer YOUR_API_KEY"

Example response

JSON200 OK
{
  "data": [
    {
      "id": "signage_-NoLppSZ_iGcwRzUdFWz",
      "name": "A-Frame Banners",
      "category": "Signage",
      "sku": "SIGNAGE_-NOLPPSZ_IGCWRZUDFWZ",
      "status": "Live",
      "description": "A-Frame Banners with structured product data...",
      "image": "/signage/Products/A%20Frame.webp",
      "priceFrom": 1270,
      "priceAvailable": true,
      "pricingSource": "matrix",
      "options": ["Size", "Material", "Print", "Finish"],
      "colours": [],
      "updated": "2026-08-07"
    }
  ],
  "meta": {
    "count": 1,
    "category": "Signage",
    "source": "firebase"
  }
}

Retrieve one product

Use the exact id returned by the list endpoint. The detail response wraps the product in a single data object.

TerminalProduct detail
curl "https://brandingapi-signage.vercel.app/api/v1/products/signage_-NoLppSZ_iGcwRzUdFWz" \
  -H "Authorization: Bearer YOUR_API_KEY"
Quotes

Submit the customer's configuration.

POST /quotes accepts a product ID, a positive quantity and an optional selection object. Selection keys should reflect the options presented by the product record.

JSON requestPOST /quotes
{
  "product_id": "signage_-NoLppSZ_iGcwRzUdFWz",
  "quantity": 500,
  "selection": {
    "size": "900 x 600 mm",
    "material": "PVC banner",
    "print": "Full colour"
  }
}
TerminalRequest a quote
curl -X POST "https://brandingapi-signage.vercel.app/api/v1/quotes" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id": "signage_-NoLppSZ_iGcwRzUdFWz","quantity": 500,"selection": {"size": "900 x 600 mm","material": "PVC banner","print": "Full colour"}}'

Priced response

JSON200 OK
{
  "data": {
    "product_id": "signage_-NoLppSZ_iGcwRzUdFWz",
    "quantity": 500,
    "selection": {
      "size": "900 x 600 mm",
      "material": "PVC banner",
      "print": "Full colour"
    },
    "currency": "ZAR",
    "unitPrice": 4.25,
    "total": 2125
  }
}
Custom quotation response

If a live price is not available, the API returns 422 quote_required with the product, quantity, selection and contact route. Treat this as a supported handoff, not a system failure.

Errors

Consistent, actionable responses.

Errors use an HTTP status plus an error.code and readable error.message. Log the code internally and show a friendly message to the customer.

StatusCodeMeaning
400invalid_quoteThe product ID or quantity is missing or invalid.
401invalid_api_keyThe key is missing, malformed, revoked or unknown.
403insufficient_scopeThe key does not include the required scope.
404product_not_foundNo Signage product matches the supplied ID.
422quote_requiredThe product needs a custom quotation from the Signage team.
JSON401 Unauthorized
{
  "error": {
    "code": "invalid_api_key",
    "message": "The supplied Signage API key is invalid or inactive."
  }
}
Go-live checklist

Move from testing to production safely.

  • Create a separate key for each website, environment or integration.
  • Keep the key in server-side environment variables or a secret manager.
  • Use product IDs from the API; do not manufacture IDs from product names.
  • Handle 401, 403, 404 and 422 responses explicitly.
  • Refresh catalogue data on a sensible schedule and respect Cache-Control: no-store.
  • Revoke a key immediately if it is exposed, then issue a replacement.
  • Check /api/v1/status when diagnosing availability.
Need help?

Bring us into the integration.

Share the endpoint, response code and request shape—never your full private API key.

Contact integration support →