> ## Documentation Index
> Fetch the complete documentation index at: https://docs.topsort.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Order Management Systems

> Connect Topsort APIs with Order Management Systems for campaign orchestration

export const LastUpdated = ({date, lang = "en"}) => {
  const translations = {
    en: "Last updated:",
    es: "Última actualización:",
    pt: "Última atualização:",
    fr: "Dernière mise à jour:",
    de: "Zuletzt aktualisiert:"
  };
  const label = translations[lang] || translations.en;
  return <>
<style>{`
.last-updated-component {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 10px 16px;
border-radius: 8px;
margin-top: 12px;
margin-bottom: 16px;
font-size: 14px;
background-color: rgba(0, 0, 0, 0.05);
border: 1px solid rgba(0, 0, 0, 0.12);
color: rgba(0, 0, 0, 0.75);
line-height: 1;
}

        .last-updated-component svg {
          flex-shrink: 0;
          vertical-align: middle;
        }

        .last-updated-component span {
          display: inline-flex !important;
          align-items: center !important;
          line-height: 1 !important;
        }

        [data-theme="dark"] .last-updated-component {
          background-color: #3a3a3a;
          border: 2px solid #888888;
          color: #ffffff;
        }

        [data-theme="dark"] .last-updated-component svg {
          stroke: #ffffff;
        }
      `}</style>
      <div className="last-updated-component">
        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
          <circle cx="12" cy="12" r="10" />
          <polyline points="12 6 12 12 16 14" />
        </svg>
        <span>
          <strong style={{
    fontWeight: 600
  }}>{label}</strong> 
          <time dateTime={date}>{date}</time>
        </span>
      </div>
    </>;
};

# Connecting Topsort with Order Management Systems

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  **Order Management Systems (OMS)** like Vantage, Boostr, ADvendio, and Placements.io help retailers manage campaign planning, booking, and inventory. You can integrate these systems with Topsort's APIs to automate campaign creation and management.
</div>

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  This guide shows how to integrate OMS with Topsort using existing APIs for automated campaign workflows.
</div>

<Frame>
  <img className="block dark:hidden" src="https://mintcdn.com/topsort/h-pUiNQBFh7nVN27/images/knowledge-base/oms-diagram-light.svg?fit=max&auto=format&n=h-pUiNQBFh7nVN27&q=85&s=ef36a1634d73cdd3dea851e244ea06f5" alt="Diagram showing oms connectivity" width="890" height="251" data-path="images/knowledge-base/oms-diagram-light.svg" />

  <img className="hidden dark:block" src="https://mintcdn.com/topsort/h-pUiNQBFh7nVN27/images/knowledge-base/oms-diagram-dark.svg?fit=max&auto=format&n=h-pUiNQBFh7nVN27&q=85&s=d72d7cf127d66c23d927fb826a7ac30f" alt="Diagram showing oms connectivity" width="890" height="251" data-path="images/knowledge-base/oms-diagram-dark.svg" />
</Frame>

## Workflows

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  OMS integration involves three main workflows for different roles and timing:
</div>

| **Workflow**                                                        | **Who**                       | **When**       | **Purpose**                                   |
| ------------------------------------------------------------------- | ----------------------------- | -------------- | --------------------------------------------- |
| [Implementation Guide](#implementation-guide)                       | DevOps/Integration Team       | One-time setup | Establish automated OMS ↔ Topsort sync        |
| [Campaign Creation](#creating-campaigns-from-oms-data)              | Campaign Managers/Sales Teams | Per campaign   | Create campaigns automatically from OMS data  |
| [Performance Sync](#retrieving-performance-data-for-oms-dashboards) | Marketing Teams               | Ongoing        | Pull campaign performance into OMS dashboards |

## How OMS Integration Works

1. **Campaign Planning**: Sales teams plan campaigns in their OMS interface
2. **Automated Creation**: OMS sends campaign data to Topsort via API calls
3. **Real-time Updates**: Webhook notifications keep systems synchronized
4. **Unified Reporting**: Performance data flows back to OMS dashboards

<Tip>
  **Enterprise Benefit**: OMS integration eliminates manual campaign setup,
  reducing errors and enabling sales teams to manage campaigns at scale without
  learning new tools.
</Tip>

## Implementation Example

### Creating Campaigns from OMS Data

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  **Role:** Campaign Managers/Sales Teams | **Frequency:** Per campaign
</div>

```javascript theme={null}
// Campaign data from your OMS
const campaignData = {
  name: "Q4 Holiday Campaign - Brand X",
  budget: 15000,
  startDate: "2024-11-01",
  endDate: "2024-12-31",
  biddingStrategy: "target_roas",
  targetRoas: 4.5,
  vendorId: "vendor-123",
};

// Create campaign in Topsort
const response = await fetch("https://api.topsort.com/v2/campaigns", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: campaignData.name,
    type: "sponsored_products",
    vendor_id: campaignData.vendorId,
    bidding_strategy: campaignData.biddingStrategy,
    target_roas: campaignData.targetRoas,
    budget: {
      amount: campaignData.budget,
      currency: "USD",
      period: "lifetime",
    },
    start_date: campaignData.startDate,
    end_date: campaignData.endDate,
  }),
});

const campaign = await response.json();
```

### Webhook Integration for Real-time Updates

```javascript theme={null}
// Set up webhook to receive campaign updates
const webhookPayload = {
  url: "https://your-oms.com/webhooks/topsort",
  events: ["campaign:create", "campaign:update", "campaign:delete"],
};

await fetch("https://api.topsort.com/v2/webhooks", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify(webhookPayload),
});

// Handle webhook in your OMS
app.post("/webhooks/topsort", (req, res) => {
  const { channel, payload } = req.body;

  switch (channel) {
    case "campaign:create":
      updateOMSCampaignStatus(payload.campaign_id, "active");
      break;
    case "campaign:update":
      syncCampaignData(payload);
      break;
  }

  res.status(200).send("OK");
});
```

## API Reference

### Current Topsort APIs for Integration

| API                                                          | Integration Use Case                                      | Status      | Documentation                         |
| ------------------------------------------------------------ | --------------------------------------------------------- | ----------- | ------------------------------------- |
| [Campaign API](/en/ad-server/additional-apis/campaign-api)   | Create campaigns with bidding strategy, budget, targeting | ✅ Available | Full campaign lifecycle management    |
| [Assets API](/en/ad-server/additional-apis/assets-api)       | Reference asset URLs in campaigns                         | ✅ Available | Asset management and collections      |
| [Reporting API](/en/ad-server/additional-apis/reporting-api) | Pull performance data back to OMS/dashboards              | ✅ Available | Campaign, vendor, marketplace reports |
| [Auctions API](/en/ad-server/auctions/auctions-api)          | Configure auction parameters and bidding                  | ✅ Available | Auction configuration                 |

### Authentication

```http theme={null}
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
```

### Bulk Campaign Operations

```javascript theme={null}
// Create multiple campaigns from OMS batch
async function createBulkCampaigns(campaignsList) {
  const results = [];

  for (const campaignData of campaignsList) {
    try {
      const response = await fetch("https://api.topsort.com/v2/campaigns", {
        method: "POST",
        headers: {
          Authorization: "Bearer YOUR_API_KEY",
          "Content-Type": "application/json",
        },
        body: JSON.stringify(campaignData),
      });

      const campaign = await response.json();
      results.push({ success: true, campaign });
    } catch (error) {
      results.push({ success: false, error: error.message });
    }
  }

  return results;
}
```

### Retrieving Performance Data for OMS Dashboards

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  **Role:** Marketing Teams | **Frequency:** Ongoing/Scheduled
</div>

```javascript theme={null}
// Pull campaign performance back to OMS
async function syncPerformanceData(campaignId) {
  const reportResponse = await fetch(
    `https://api.topsort.com/v2/reports/campaigns/${campaignId}`,
    {
      method: "GET",
      headers: {
        Authorization: "Bearer YOUR_API_KEY",
      },
    }
  );

  const performanceData = await reportResponse.json();

  // Update OMS dashboard with performance metrics
  await updateOMSDashboard(campaignId, {
    impressions: performanceData.impressions,
    clicks: performanceData.clicks,
    spend: performanceData.spend,
    conversions: performanceData.conversions,
  });
}
```

## Best Practices

### Data Synchronization

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  * **Field Mapping**: Map OMS campaign fields to Topsort API parameters
  * **Data Validation**: Validate campaign data before sending to Topsort APIs
  * **Bulk Operations**: Use batch processing for enterprise-scale campaign management
</div>

### Error Handling

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  * **Retry Logic**: Implement exponential backoff for failed API calls
  * **Comprehensive Logging**: Track all API interactions and failures
  * **Health Monitoring**: Set up alerts for integration issues
</div>

### Security

<Warning>
  **Security Requirements**: OMS integrations handle sensitive campaign and
  financial data. Ensure proper authentication, data validation, and secure API
  key management.
</Warning>

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  * **API Key Management**: Store API keys securely and rotate regularly
  * **Rate Limiting**: Respect API rate limits to avoid throttling
  * **Input Sanitization**: Validate all data before sending to APIs
</div>

## Implementation Guide

<Steps>
  <Step title="API Access Setup">
    <div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
      Obtain Topsort API keys and configure authentication:
    </div>

    * Request Advanced API key from your Topsort representative
    * Store API keys securely in your environment variables
    * Configure authentication headers for all API calls
  </Step>

  <Step title="Webhook Configuration">
    <div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
      Set up webhook endpoints for real-time campaign updates:
    </div>

    * Create webhook endpoint in your OMS system
    * Register webhook URL with Topsort for campaign events
    * Implement handlers for campaign create/update/delete events
  </Step>

  <Step title="Data Field Mapping">
    <div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
      Map OMS campaign fields to Topsort API parameters:
    </div>

    * Document field mappings between systems
    * Implement data transformation logic
    * Validate required fields are present
  </Step>

  <Step title="Error Handling Implementation">
    <div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
      Build comprehensive error handling and retry logic:
    </div>

    * Implement exponential backoff for failed API calls
    * Add comprehensive logging for debugging
    * Set up alerts for integration failures
  </Step>

  <Step title="Testing and Validation">
    <div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
      Test integration with sandbox data before production:
    </div>

    * Create test campaigns through OMS workflow
    * Verify campaigns appear correctly in Topsort
    * Test webhook delivery and handling
  </Step>

  <Step title="Monitoring and Maintenance">
    <div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
      Set up ongoing monitoring for the integration:
    </div>

    * Track API call success/failure rates
    * Monitor campaign creation performance
    * Set up dashboards for integration health
  </Step>
</Steps>

## Related Resources

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  * [DAM Integration Guide](/en/knowledge-base/ad-server/dam-connectivity) - Digital Asset Management connectivity
  * [Campaign API Documentation](/en/ad-server/additional-apis/campaign-api)
  * [Reporting API Documentation](/en/ad-server/additional-apis/reporting-api)
</div>

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  ***
</div>

<div style={{textAlign: 'justify', marginBottom: '1.5rem'}}>
  *Ready to integrate your OMS with Topsort? Contact your account representative to get started with API access and implementation support.*
</div>

***

<LastUpdated date="2025-11-18" />
