SRS Integration Partner Services
Home
V1 APIsV2 APIs
Home
V1 APIsV2 APIs
  1. Getting Started
  • SRS Integration Partner Services (SIPS)
  • Getting Started
    • Introduction
    • Authentication
    • Order Flow
  • SRS API Guides
    • Reference Data
    • Product Data
    • Invoices
    • Orders
    • Order Details
    • Authentication
    • Web Hooks
    • FAQs
Home
V1 APIsV2 APIs
Home
V1 APIsV2 APIs
  1. Getting Started

Order Flow

Order Flow Tutorial - Complete Implementation Guide#

This tutorial covers Steps 5-8: finding customer branches, selecting products, getting pricing, and submitting orders.
โฑ๏ธ Time to Complete: 2-3 hours
Before you start: Complete Steps 1-4 to get your access token and validated customer account.

๐ŸŽฏ What You'll Build#

๐Ÿ“‹ Order Flow Checklist - Track Your Progress
Prerequisites (from Authentication Guide):
  • API credentials obtained
  • Access token retrieved
  • Customer validated
  • Branch locations explored
Steps 5-8 Progress:
  • ๐Ÿช Step 5: Customer branches retrieved
  • ๐Ÿ“ฆ Step 6: Products browsed at branch
  • ๐Ÿ’ฐ Step 7: Real-time pricing obtained
  • โœ… Step 8: Order successfully submitted
Key Data Collected:
  • jobAccountNumber saved (from Step 5)
  • Product IDs identified (from Step 6)
  • Pricing validated (from Step 7)
  • Order ID received (from Step 8)
Integration Complete:
  • First test order submitted successfully
  • Order confirmation received
  • Webhook setup planned (for Production)
  • Error handling implemented
What you'll build:
๐Ÿช Find customer branches with job accounts
๐Ÿ“ฆ Browse available products
๐Ÿ’ฐ Get real-time pricing
โœ… Submit orders (sync & async)

๐Ÿ”„ Order Flow Overview#


Step 5: Find Customer Branches & Job Accounts#

โ“ Why This Step Matters - Click to expand
Critical Information Retrieved:
๐Ÿ”‘ Job Account Number - Required for ALL order submissions
๐Ÿข Branch relationships specific to this customer
๐Ÿ“ Distance from customer ship-to addresses
๐ŸŽฏ Multiple job accounts per branch (if applicable)
Without this step:
โŒ Cannot submit orders (missing jobAccountNumber)
โŒ Don't know which branches serve this customer
โŒ Can't optimize delivery routing
Real-World Example:
A construction company may have multiple projects (job accounts) at the same branch, each with different billing and shipping addresses.
๐Ÿ’ก Best Practices for Step 5
Cache Strategy:
โœ… Cache customer branch data for 24 hours
โœ… Refresh when customer reports "branch not found"
โœ… Store jobAccountNumber in customer session
User Experience:
โœ… Let users see all available branches
โœ… Show distance from ship-to address
โœ… Default to nearest branch (lowest distance)
โœ… Allow manual branch selection
Error Handling:
โš ๏ธ If no branches returned โ†’ Customer not set up for branch access
โš ๏ธ If multiple job accounts โ†’ Let user choose or default to first
โš ๏ธ Contact SRS support to add branch access

API Call#

Endpoint: GET /branches/v2/customerBranchLocations/{customerCode}
Example URL: https://services-qa.roofhub.pro/branches/v2/customerBranchLocations/CUST12345
Request Headers:
Authorization: Bearer {token}
Content-Type: application/json

Response Example#

๐Ÿ“‹ Click to view response example
[
  {
    "branchCode": "CORAC",  // ๐Ÿช Branch identifier
    "branchName": "AMERICAN ROOFING SUPPLY - RAPID CITY",  // ๐Ÿข Branch display name
    "distanceFromShipToInMiles": 499.403,  // ๐Ÿ“ Distance from customer ship-to address
    "jobAccounts": [  // ๐Ÿ”‘ CRITICAL - Job accounts for this customer at this branch
      {
        "jobAccountNumber": 43,  // ๐ŸŽฏ Required for Step 8 order submission!
        "jobAccountName": "TUSING BUILDERS & RFG (SOLON)"  // ๐Ÿ“‹ Job account description
      }
    ]
  },
  {
    "branchCode": "CORMN",
    "branchName": "AMERICAN ROOFING SUPPLY - MINNEAPOLIS",
    "distanceFromShipToInMiles": 234.567,
    "jobAccounts": [
      {
        "jobAccountNumber": 89,  // ๐ŸŽฏ Required for Step 8!
        "jobAccountName": "CONSTRUCTION PROJECT A"
      },
      {
        "jobAccountNumber": 90,  // ๐ŸŽฏ Multiple job accounts possible
        "jobAccountName": "REMODELING PROJECT B"
      }
    ]
  }
]

Critical Fields:
  • jobAccountNumber: Required for order submission in Step 8 (numeric value)
  • branchCode: Branch identifier for product/pricing queries
  • distanceFromShipToInMiles: Helps select nearest branch
  • jobAccounts: Array - customers can have multiple job accounts per branch
Save this: Store the jobAccountNumber from the desired job account - you'll need it for Step 8! Note: It's a numeric value, not a string.

Step 6: Get Available Products at Branch#

โ“ Why This Step Matters - Click to expand
Critical Information:
๐Ÿช Branch-specific inventory - Not all products at all branches
๐ŸŽจ Product variants - Colors, sizes, options
๐Ÿ“ Units of measure - SQ (Square), BD (Bundle), PC (Piece), etc.
๐Ÿ”„ Substitution rules - Whether alternatives allowed
Without this step:
โŒ May request unavailable products
โŒ Wrong unit of measure causes errors
โŒ Can't show product options to users
โŒ Miss substitution opportunities
Real-World Example:
A roofing shingle may be available in 15 colors at one branch but only 8 colors at another. This endpoint tells you exactly what's available where.
๐Ÿ’ก Best Practices for Step 6
Caching Strategy:
โœ… Cache product catalog per branch for 4-8 hours
โœ… Refresh during off-peak hours (e.g., midnight)
โœ… Invalidate cache when "product not found" errors occur
โœ… Consider CDN for product images
User Experience:
โœ… Show product images when available (productImageUrl)
โœ… Display manufacturer and features prominently
โœ… Group by category for easier browsing
โœ… Filter by primary items first
โœ… Show "Allow Substitution" badge when true
โœ… Let users search by product name or manufacturer
Performance Tips:
โšก This endpoint can return hundreds of products
โšก Implement pagination in your UI
โšก Use lazy loading for product images
โšก Consider filtering by category first
โšก Index products locally for fast search
Data Quality:
โš ๏ธ Some products may have null images
โš ๏ธ Product options can vary by variant
โš ๏ธ UOM array may differ from variant UOM
โš ๏ธ Always validate UOM before price request

API Call#

Endpoint: GET /branches/v2/activeBranchProducts/{branchCode}
Example URL: https://services-qa.roofhub.pro/branches/v2/activeBranchProducts/ATL
Request Headers:
Authorization: Bearer {token}
Content-Type: application/json

Response Example#

๐Ÿ“‹ Click to view response example
[
  {
    "productId": 6706,  // ๐Ÿ”‘ Unique product identifier
    "productName": "Atlas GlassMaster 30 Shingles",  // ๐Ÿ“ฆ Product display name
    "productOptions": [  // ๐ŸŽจ Available color/size options
      "36\" x 12\" Black Shadow",
      "36\" x 12\" Hearthstone Gray",
      "36\" x 12\" Weathered Wood"
    ],
    "productVariant": [  // ๐Ÿ”„ Variants with UOM details
      {
        "variantId": 0,
        "selectedOption": "36\" x 12\" Black Shadow",
        "uoMs": ["SQ", "BD"]  // ๐Ÿ“ Available units of measure
      },
      {
        "variantId": 0,
        "selectedOption": "36\" x 12\" Hearthstone Gray",
        "uoMs": ["SQ", "BD"]
      },
      {
        "variantId": 0,
        "selectedOption": "36\" x 12\" Weathered Wood",
        "uoMs": ["BD", "SQ"]
      }
    ],
    "productDescription": "High-quality architectural shingles",  // ๐Ÿ“ Product description
    "productFeatures": [  // โœจ Key selling points
      "30-year warranty",
      "Wind resistance up to 130 mph",
      "Class A fire rating"
    ],
    "productUOM": ["SQ", "BD"],  // ๐Ÿ“ All available UOMs
    "productCategory": "Shingles",  // ๐Ÿ—‚๏ธ Category
    "manufacturer": "Atlas",  // ๐Ÿญ Manufacturer name
    "productImageUrl": "https://example.com/image.jpg",  // ๐Ÿ–ผ๏ธ Product image (or null)
    "allowSubstitution": true,  // ๐Ÿ”„ Can substitute if out of stock
    "primaryItem": true  // โญ Is this the primary/default item
  },
  {
    "productId": 94860,
    "productName": "Atlas Pinnacle Impact IR Shingle",
    "productOptions": [
      "14\" x 42\" Desert Shake",
      "14\" x 42\" Weathered Wood"
    ],
    "productVariant": [
      {
        "variantId": 0,
        "selectedOption": "14\" x 42\" Desert Shake",
        "uoMs": ["BD"]
      },
      {
        "variantId": 0,
        "selectedOption": "14\" x 42\" Weathered Wood",
        "uoMs": ["BD"]
      }
    ],
    "productDescription": "Impact-resistant shingles with IR technology",
    "productFeatures": [
      "Impact resistant",
      "Energy efficient",
      "Premium warranty"
    ],
    "productUOM": ["BD"],
    "productCategory": "Shingles",
    "manufacturer": "Atlas",
    "productImageUrl": null,
    "allowSubstitution": false,
    "primaryItem": false
  }
]

Key Fields:
  • productId: Use this for pricing (Step 7) and order submission (Step 8)
  • productOptions: Available color/size variants
  • productVariant: Maps options to available UOMs
  • productUOM: Available units of measure (SQ=Square, BD=Bundle)
  • allowSubstitution: Whether alternative products can be substituted

Step 7: Get Real-Time Pricing & Availability#

โ“ Why This Step Matters - Click to expand
Critical Information:
๐Ÿ’ฐ Customer-specific pricing - Prices vary by customer/contract
๐Ÿ“ฆ Real-time availability - "In Stock" vs "Call for Availability"
๐Ÿ”„ UOM conversion - Handles unit conversions automatically
โฑ๏ธ Price validity - Prices change; always get fresh data
Without this step:
โŒ Show wrong prices to customers
โŒ Submit orders that will be rejected
โŒ Can't display accurate stock status
โŒ Miss pricing tiers and discounts
Real-World Scenario:
Customer A gets 12/squareforpremiumshingles(contractorrate).CustomerBpays18/square (standard rate). Same product, different pricing!
๐Ÿ’ก Best Practices for Step 7
When to Call Pricing API:
โœ… Before checkout - Always get fresh pricing
โœ… When quantity changes - Check for volume discounts
โœ… When UOM changes - Validate conversion factors
โœ… Before order submission - Final price confirmation
โŒ Not on every page load - Cache for short period (5-10 minutes)
Caching Strategy:
โšก Cache pricing for 5-10 minutes max
โšก Cache per customer + branch + product combination
โšก Invalidate on quantity/UOM changes
โšก Always refresh before final order submission
โšก Show "Price as of [timestamp]" to users
Batch Requests:
โœ… Request pricing for multiple products in one call
โœ… Recommended batch size: 20-50 products
โœ… Larger quotes: Break into multiple batches
โœ… Process batches in parallel for speed
Error Handling:
messageCodeMeaningAction
0SuccessProceed with order
> 0Warning/ErrorCheck message field
price = 0No pricingContact SRS or choose different product
availableStatus = "Call"Limited stockWarn user, allow order
UOM Conversion:
Display to Users:
โœ… Show price with UOM: "$45.00 per SQ"
โœ… Show availability status clearly
โœ… Indicate if "Call for Availability" required
โœ… Show quantity discounts if applicable
โœ… Display "Price subject to change" disclaimer

API Call#

Endpoint: POST /products/v2/price
Request Headers:
Authorization: Bearer {token}
Content-Type: application/json

Request Body#

Click to expand: Full request body example below
๐Ÿ“‹ Click to view request body example
{
  "sourceSystem": "SOURCENAME",  // ๐Ÿ”‘ Your integration identifier
  "customerCode": "DEMO001",  // ๐Ÿ‘ค Customer account number
  "branchCode": "HWPLY",  // ๐Ÿช Branch code
  "transactionId": "SPR-1",  // ๐ŸŽฏ Unique transaction ID
  "jobAccountNumber": 1,  // ๐Ÿ”‘ Job account number (numeric)
  "productList": [
    {
      "productId": 77673,  // ๐Ÿ“ฆ Product ID from Step 6
      "productName": "Ace Insulation Plates",
      "productOptions": ["N/A"],
      "quantity": 1,
      "uom": "PC"
    }
  ]
}

Response Example#

๐Ÿ“‹ Click to view response example
[
  {
    "itemCode": "ACEACEPLT3INI",  // ๐Ÿ”‘ Internal item code
    "productId": 77673,  // ๐Ÿ“ฆ Matches request product ID
    "productName": "Ace Insulation Plates",  // ๐Ÿ“ Product name
    "productOptions": ["N/A"],  // ๐ŸŽจ Selected options
    "priceUOM": "PC",  // ๐Ÿ“ Base unit of measure for pricing
    "requestedUOM": "PC",  // ๐Ÿ“ Requested unit of measure
    "uomConversionFactor": 1,  // ๐Ÿ”„ Conversion factor (1 = no conversion)
    "price": 0.25,  // ๐Ÿ’ฐ CRITICAL - Unit price for this customer
    "availableStatus": "Call for Availability",  // โœ… Stock status
    "transactionId": "SPR-1",  // ๐ŸŽฏ Matches request transaction ID
    "message": "",  // ๐Ÿ“ข Additional messages (empty if no issues)
    "messageCode": 0  // ๐Ÿ”ข Message code (0 = success)
  }
]

Critical Fields:
  • price: Current unit price for this customer
  • availableStatus: Stock availability ("In Stock", "Call for Availability", etc.)
  • priceUOM: Base unit of measure for pricing
  • uomConversionFactor: Conversion multiplier between requested and price UOM
  • messageCode: 0 = success, other values indicate warnings/errors
Important: Prices are valid only at the time of the call. Get fresh pricing before order submission.

Step 8: Submit Order#

โ“ Understanding Order Submission - Click to expand

Synchronous vs Asynchronous#

Key Differences:
AspectSynchronousAsynchronous
ProcessingImmediateQueued
Response Time1-3 secondsInstant (queued)
Order IDImmediateVia webhook later
During MaintenanceโŒ May failโœ… Queued safely
Retry LogicManualAutomatic
Best ForTesting, low volumeProduction, high volume
Webhook RequiredNoYes
ReliabilityMediumHigh

When to Use Each Method#

Use Synchronous when:
๐Ÿงช Testing in Staging (required)
๐Ÿ‘ถ Proof-of-concept/demo
๐Ÿ“‰ < 50 orders per day
โฑ๏ธ Need immediate confirmation
๐Ÿšง Can't implement webhooks yet
Use Asynchronous when:
๐Ÿš€ Production deployment
๐Ÿ“ˆ 50+ orders per day
๐Ÿ”’ Maximum reliability required
โš™๏ธ Can handle webhooks
๐Ÿญ Multiple integration points
๐Ÿ’ก Want automatic retry on failures

Order Processing Flow#

Staging vs Production Submission#

Important: Staging environment supports synchronous orders only. Use synchronous submission for all testing.
Staging Environment (Testing)
  • Use synchronous order submission
  • Immediate response with Order ID
  • Perfect for development and testing
  • No webhook setup required
Production Environment (Live Orders)
  • Asynchronous submission recommended
  • Requires webhook endpoint setup
  • More reliable for production workloads
  • Orders processed even during maintenance
Synchronous (Staging & Production)Asynchronous (Production Only - Recommended)
How it works:

Order processed immediately

Instant Order ID response

Best for:

Staging environment testing

Low-volume integrations

Simple implementations
How it works:

Order queued for processing

Status updates via webhooks

Best for:

Production deployments

High-volume integrations

Maximum reliability
Requires webhook setup

Order Submission#

Endpoint: POST /orders/v2/submit
Request Headers:
Authorization: Bearer {token}
Content-Type: application/json
Note: Order is processed synchronously in Staging, asynchronously in Production (based on configuration). There is no async flag in the request.

Request Body#

Click to expand: Full request body example below
๐Ÿ“‹ Click to view full request body example
{
  "sourceSystem": "SOURCENAME",  // ๐Ÿ”‘ REQUIRED - Your integration identifier
  "customerCode": "DEMO001",  // ๐Ÿ”‘ REQUIRED - From Step 3
  "jobAccountNumber": 1,  // ๐Ÿ”‘ REQUIRED - Numeric value from Step 5!
  "branchCode": "BRRIV",  // ๐Ÿ”‘ REQUIRED - Branch code
  "accountNumber": "DEMO001",  // ๐Ÿ”‘ REQUIRED - Customer account number
  "transactionID": "3932cdd6-38e7-4d19-a05c-cd866473bdea",  // ๐Ÿ”‘ REQUIRED - Unique transaction ID
  "transactionDate": "2023-05-11T10:49:34.187",  // ๐Ÿ”‘ REQUIRED - ISO 8601 format
  "notes": "",  // ๐Ÿ”‘ REQUIRED - Order notes (can be empty string)
  "shipTo": {  // ๐Ÿ”‘ REQUIRED - Ship-to address
    "name": "John",  // ๐Ÿ”‘ REQUIRED
    "addressLine1": "1234 COUNTY LINE ROAD",  // ๐Ÿ”‘ REQUIRED
    "addressLine2": "",  // ๐Ÿ”‘ REQUIRED (can be empty)
    "addressLine3": "",  // ๐Ÿ”‘ REQUIRED (can be empty)
    "city": "ONTARIO",  // ๐Ÿ”‘ REQUIRED
    "state": "NY",  // ๐Ÿ”‘ REQUIRED
    "zipCode": "14519"  // ๐Ÿ”‘ REQUIRED
  },
  "poDetails": {  // ๐Ÿ”‘ REQUIRED - PO and delivery details
    "poNumber": "5641-8Test",  // ๐Ÿ”‘ REQUIRED - Purchase order number
    "reference": "5641: 7GP",  // ๐Ÿ”‘ REQUIRED - Reference (can be empty)
    "jobNumber": "",  // ๐Ÿ”‘ REQUIRED - Job number (can be empty)
    "orderDate": "2021-04-12",  // ๐Ÿ”‘ REQUIRED - Order date (YYYY-MM-DD)
    "expectedDeliveryDate": "2021-04-15",  // ๐Ÿ”‘ REQUIRED - Delivery date (YYYY-MM-DD)
    "expectedDeliveryTime": "Anytime",  // ๐Ÿ”‘ REQUIRED - Delivery time (can be "Anytime")
    "orderType": "WHSE",  // ๐Ÿ”‘ REQUIRED - "WHSE" (delivery) or "WILLCALL" (pickup)
    "shippingMethod": "Ground Drop"  // ๐Ÿ”‘ REQUIRED - Shipping method
  },
  "orderLineItemDetails": [  // ๐Ÿ”‘ REQUIRED - Line items array
    {
      "productId": 75664,  // ๐Ÿ”‘ REQUIRED - Product ID from Step 6
      "productName": "CertainTeed Presidential Solaris Shingles",  // ๐Ÿ”‘ REQUIRED - Product name
      "option": "Country Gray",  // ๐Ÿ”‘ REQUIRED - Selected color/option
      "quantity": 1,  // ๐Ÿ”‘ REQUIRED - Quantity (integer)
      "price": 12,  // ๐Ÿ”‘ REQUIRED - Price (integer)
      "customerItem": "XXXX",  // ๐Ÿ”‘ REQUIRED - Customer reference
      "uom": "SQ"  // ๐Ÿ”‘ REQUIRED - Unit of measure
    },
    {
      "productId": 1443,
      "productName": "CertainTeed Landmark Solaris Non-AR Shingles",
      "option": "Burnt Sienna",
      "quantity": 1,
      "price": 12,
      "customerItem": "XXXX",
      "uom": "SQ"
    },
    {
      "productId": 75621,
      "productName": "CertainTeed SwiftStart Starter",
      "option": "N/A",
      "quantity": 1,
      "price": 12,
      "customerItem": "XXXX",
      "uom": "BD"
    }
  ],
  "customerContactInfo": {  // ๐Ÿ”‘ REQUIRED - Customer contact details
    "customerContactName": "John Dough",  // ๐Ÿ”‘ REQUIRED - Contact name
    "customerContactPhone": "9876543210",  // ๐Ÿ”‘ REQUIRED - Phone number
    "customerContactEmail": "jdough@example.com",  // ๐Ÿ”‘ REQUIRED - Email
    "customerContactAddress": {  // ๐Ÿ”‘ REQUIRED - Contact address
      "addressLine1": "123 Main St",
      "city": "Salt Lake City",
      "state": "Utah",
      "zipCode": "84121"
    },
    "additionalContactEmails": [  // ๐Ÿ”‘ REQUIRED - Additional emails array (can be empty)
      "test@example.com"
    ]
  }
}

Important: All fields marked as REQUIRED in the API must be provided. Some fields can be empty strings ("") but must be present in the request.
๐Ÿšจ Common Order Submission Errors - Click to expand

Error 1: Missing Required Field#

Symptom: 400 Bad Request - Missing required field: jobAccountNumber
Cause: Required field not included or null
Solution:
// โŒ Wrong
{
  "customerCode": "DEMO001"
  // jobAccountNumber missing
}

// โœ… Correct
{
  "customerCode": "DEMO001",
  "jobAccountNumber": 1  // Required numeric value
}

Error 2: Invalid Job Account Number#

Symptom: Order submission failed - Invalid job account
Cause: Using wrong jobAccountNumber or string instead of number
Solution:
// โŒ Wrong - String value
{
  "jobAccountNumber": "1"  // Wrong: string
}

// โŒ Wrong - Non-existent number
{
  "jobAccountNumber": 999  // Doesn't exist for this customer
}

// โœ… Correct - Valid numeric value from Step 5
{
  "jobAccountNumber": 43  // From customerBranchLocations response
}

Error 3: Invalid Product ID#

Symptom: Product not found at branch
Cause: Product ID doesn't exist or not available at this branch
Solution:
โœ… Get product IDs from Step 6 (activeBranchProducts)
โœ… Verify product is available at the selected branch
โœ… Double-check productId is numeric, not string

Error 4: Invalid Date Format#

Symptom: Invalid date format
Cause: Wrong date format in orderDate or expectedDeliveryDate
Solution:
// โŒ Wrong formats
{
  "orderDate": "04/12/2021",  // MM/DD/YYYY not accepted
  "expectedDeliveryDate": "2021.04.15"  // Wrong separator
}

// โœ… Correct format: YYYY-MM-DD
{
  "orderDate": "2021-04-12",
  "expectedDeliveryDate": "2021-04-15"
}

Error 5: Invalid Order Type#

Symptom: Invalid orderType value
Cause: Wrong orderType or shippingMethod
Solution:
// โŒ Wrong
{
  "orderType": "Delivery",  // Wrong: must be code
  "shippingMethod": "Ground"  // Incomplete
}

// โœ… Correct
{
  "orderType": "WHSE",  // For delivery (or "WILLCALL" for pickup)
  "shippingMethod": "Ground Drop"  // From branch shippingMethods array
}

Error 6: Price Mismatch#

Symptom: Price validation failed
Cause: Submitted price doesn't match current pricing
Solution:
โœ… Always get fresh pricing from Step 7 before submission
โœ… Don't cache prices for > 10 minutes
โœ… Use exact price from pricing API response
โœ… Check for price decimal vs integer (API expects integer: 12 not 12.00)

Error 7: Address Validation Failed#

Symptom: Invalid shipping address
Cause: Missing or invalid address fields
Solution:
// โœ… All fields required (can be empty string but must exist)
{
  "shipTo": {
    "name": "John Doe",  // Required
    "addressLine1": "123 Main St",  // Required
    "addressLine2": "",  // Required (can be empty)
    "addressLine3": "",  // Required (can be empty)
    "city": "Denver",  // Required
    "state": "CO",  // Required (2-letter code)
    "zipCode": "80202"  // Required (5 or 9 digits)
  }
}
โœ… Order Submission Checklist - Click to expand
Before Submitting:
Have valid jobAccountNumber from Step 5
Product IDs verified from Step 6
Fresh pricing obtained from Step 7 (< 10 min old)
All required fields populated
Date formats correct (YYYY-MM-DD)
Prices are integers, not decimals
Ship-to address is complete
Customer contact info included
PO number is unique
Transaction ID is unique
Field Validation:
jobAccountNumber is numeric (not string)
orderType is "WHSE" or "WILLCALL"
shippingMethod matches branch available methods
quantity are integers
price are integers (e.g., 12 not 12.00)
state is 2-letter code ("CO" not "Colorado")
UOM matches product available UOMs
After Submission:
Save orderID from response
Save transactionID from response
Log queueID if async
Set up webhook listener (Production)
Display confirmation to user
Store order in your database

Successful Response (200 OK)#

๐Ÿ“‹ Click to view response example
{
  "message": "Order Submitted",  // โœ… Order successfully submitted
  "transactionID": "ANY-UNIQUE-STRING-02.19.2024.v2.4",  // ๐ŸŽฏ Your unique transaction ID (matches request)
  "orderID": "35818786",  // ๐Ÿ”‘ SAVE THIS! - SRS order ID for tracking
  "queueID": "queue-abc123"  // ๐Ÿ”„ Queue identifier (null for sync, value for async)
}

Response Fields:
  • message - Confirmation message
  • transactionID - Your unique transaction ID (from request)
  • orderID - SRS order identifier - Use this to track order status via API or webhooks
  • queueID - Queue identifier (null for synchronous, has value for asynchronous processing)
Production Recommendation: Use asynchronous orders with webhooks. Contact SRS API Support Team to:
  • Request Production credentials
  • Provide webhook endpoint URLs
  • Schedule Production deployment
See Webhook Setup Guide for implementation details.
Order Confirmation: Customers receive a confirmation email with order number, delivery information, line items, and branch contact details.

๐ŸŽ‰ You're Ready!#

You've learned the complete integration flow! You can now:
โœ… Validate customers
โœ… Find customer branches and job accounts
โœ… Browse available products
โœ… Get real-time pricing
โœ… Submit orders (sync and async)

๐ŸŽฏ Next Steps#

Setup Webhooks
Learn how to receive real-time order status updates for asynchronous orders.
Error Handling
Learn how to handle common errors and edge cases.
Best Practices
Optimize your integration for production use.

Need Help?#

๐Ÿ“ง Contact SRS API Support - Click to expand
Email: APISupportTeam@srsdistribution.com
Include:
โœ… Your client ID (NOT the secret!)
โœ… Environment (Staging/QA or Production)
โœ… Error details or question
โœ… Request/response examples (sanitized)
โœ… Transaction ID (if applicable)
โœ… Steps to reproduce
Response time:
๐Ÿ“… Standard: 1-2 business days
๐Ÿšจ Urgent (Production): Same day
Urgent Issues:
๐Ÿšจ Production outages
๐Ÿšจ Order processing failures
๐Ÿšจ Authentication problems affecting customers
๐Ÿšจ Security incidents
๐Ÿ“š Additional Resources - Click to expand
Documentation:
๐Ÿ“– Webhook Setup - Real-time updates
๐Ÿ“– Error Handling - Comprehensive strategies
๐Ÿ“– Best Practices - Production optimization
Tools:
๐Ÿ”ง APIdog Interactive Docs - Test API live
๐Ÿ”ง Postman Collection - Pre-configured requests

You're ready for production!
Modified atย 2026-03-04 21:50:15
Previous
Authentication
Next
Reference Data
Built with