> ## 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.

# Offsite Audiences API

> Create and manage custom audiences for offsite advertising campaigns

export const ChangelogActions = () => {
  return <>
      <style>{`
        .changelog-actions {
          display: flex;
          justify-content: center;
          gap: 12px;
          margin-top: 2rem;
          padding-top: 1.5rem;
          border-top: 1px solid #e5e7eb;
        }
        
        [data-theme="dark"] .changelog-actions {
          border-top-color: #374151;
        }
        
        .changelog-btn {
          display: inline-flex;
          align-items: center;
          gap: 6px;
          padding: 8px 16px;
          border-radius: 9999px;
          border: 1px solid #d1d5db;
          background: transparent;
          color: #6b7280;
          font-size: 14px;
          cursor: pointer;
          transition: all 0.2s ease;
        }
        
        .changelog-btn:hover {
          border-color: #9ca3af;
          background: #f9fafb;
        }
        
        [data-theme="dark"] .changelog-btn {
          border-color: #4b5563;
          color: #9ca3af;
        }
        
        [data-theme="dark"] .changelog-btn:hover {
          border-color: #6b7280;
          background: #1f2937;
        }
      `}</style>
      <div className="changelog-actions">
        <button className="changelog-btn" onClick={() => {
    const btn = event.target.closest("button");
    btn.innerHTML = "❤️ Like";
    btn.style.borderColor = "#ec4899";
  }}>
          🤍 Like
        </button>
        <button className="changelog-btn" onClick={() => {
    const btn = event.target.closest("button");
    navigator.clipboard.writeText(window.location.href);
    const originalContent = btn.innerHTML;
    btn.innerHTML = "✓ Copied";
    btn.style.borderColor = "#22c55e";
    btn.style.color = "#22c55e";
    setTimeout(() => {
      btn.innerHTML = originalContent;
      btn.style.borderColor = "";
      btn.style.color = "";
    }, 2000);
  }}>
          ↗ Share
        </button>
      </div>
    </>;
};

<div
  style={{
display: "flex",
gap: "8px",
flexWrap: "wrap",
marginBottom: "16px",
}}
>
  <Badge color="gray" size="sm" icon="calendar">
    August 29, 2025
  </Badge>

  <Badge color="purple" size="sm" icon="server">
    Ad Server
  </Badge>

  <Badge color="green" size="sm" icon="sparkles">
    New Feature
  </Badge>
</div>

<Note>
  **Why It's Important**

  **Offsite advertising** extends your reach beyond your platform by targeting
  your customers across external channels like Google and Meta. This creates a
  unified advertising ecosystem that maximizes customer touchpoints throughout
  their journey.
</Note>

The new **Offsite Ads API** enables you to create and manage custom audiences for advertising campaigns outside of your platform. Upload user lists to extend your targeting reach across external advertising channels like Google Ads and Meta.

## What's New

* **Audience job creation**: Submit custom user lists for offsite targeting campaigns
* **Secure file uploads**: Get presigned URLs for safe CSV file transfers
* **Multi-platform support**: Currently supports Google Ads and Meta advertising platforms
* **Job tracking**: Monitor audience creation status with unique job identifiers

## Key Benefits

**Extended Reach**:
Target your existing customers and prospects across external advertising
platforms to maximize campaign reach.

**Secure Uploads**:
Upload audience data safely using presigned URLs with automatic expiration
for enhanced security.

**Multi-Channel Targeting**:
Create audiences for multiple DSPs including Google Ads and Meta from a
single API endpoint.

## How It Works

The API creates offsite audience jobs in three steps:

1. **Submit audience details** including name, description, and target DSP
2. **Upload CSV file** using the provided presigned URL within one hour
3. **Track job progress** using the returned job identifier

export const exampleCode = `curl --request POST \\
  --url https://api.topsort.com/public/v1/offsite-ads/audiences \\
  --header 'Authorization: Bearer <token>' \\
  --header 'Content-Type: application/json' \\
  --data '{
    "name": "My user list audience",
    "description": "Custom audience for Q4 campaign",
    "vendor_id": "vendor_123",
    "dsp": "google_ads"
  }'`;

export const fileName = "Create Audience Job";

<Code code={exampleCode} lang="bash" title={fileName} />

The API returns a job ID and presigned URL for file upload. Use the presigned URL with a PUT request and `Content-Type: text/csv` header to upload your audience data.

***

This release expands targeting capabilities beyond your platform. Learn more about the [Offsite Ads API](/en/api-reference/offsite-ads-api) in our documentation, or explore our [offsite and in-store advertising concepts](/knowledge-base/offsite-and-instore/) to understand how these capabilities fit into your broader advertising strategy.

<ChangelogActions />
