SponsorUnited API

The production REST API behind the SponsorUnited platform. Its OpenAPI 3.0 description is publicly served at https://api.sponsorunited.com/docs and describes 547 operations across 422 paths and 561 schemas, covering brands, properties, leagues, agencies, events, contacts, deals and spend tracking, saved and custom reports, scouting audits, social scraping, news, user and organization management, and the Surface AI assistant. Authentication is a bearer JWT for platform users plus an X-API-Key service key for internal services. SponsorUnited publishes no developer documentation, reference site or sign-up path for this API.

Operations 547

Showing the first 250 of 547. The full set is in the contract, and via get_provider_operations.

GET /api/ai-chatbot/access Get AI chatbot access token #
GET /api/user/{userId}/surface/admin-context Get a user's administrator-set Surface context #
PUT /api/user/{userId}/surface/admin-context Update a user's administrator-set Surface context #
GET /api/organization/{organizationId}/surface/admin-context Get an organization's administrator-set Surface context #
PUT /api/organization/{organizationId}/surface/admin-context Update an organization's administrator-set Surface context #
POST /api/agency Create a new agency #
GET /api/agency/{id} Get agency details #
PUT /api/agency/{id} Update an agency #
DELETE /api/agency/{id} Delete an agency #
GET /api/agency/{id}/representation Get agency representation #
GET /api/agency-services List agency services #
POST /api/agency-services Create agency service #
GET /api/agency-services/{id} Get agency service #
PUT /api/agency-services/{id} Update agency service #
DELETE /api/agency-services/{id} Delete agency service #
GET /api/agency-services-types List agency service types #
POST /api/agency-services-types Create agency service type #
GET /api/agency-services-types/{type_id} Get agency service type #
PUT /api/agency-services-types/{type_id} Update agency service type #
DELETE /api/agency-services-types/{type_id} Delete agency service type #
GET /api/asset-grouping List all asset groupings #
POST /api/asset-grouping Create asset grouping #
GET /api/asset-grouping/{id} Get asset grouping #
PUT /api/asset-grouping/{id} Update asset grouping #
DELETE /api/asset-grouping/{id} Delete asset grouping #
PUT /api/asset-grouping/{old_grouping}/reassign Reassign asset grouping #
GET /api/asset-subgrouping/ List all asset subgroupings #
POST /api/asset-subgrouping Create asset subgrouping #
GET /api/asset-subgrouping/{id} Get asset subgrouping #
PUT /api/asset-subgrouping/{id} Update asset subgrouping #
DELETE /api/asset-subgrouping/{id} Delete asset subgrouping #
GET /api/asset-subgrouping/{id}/intent Get subgrouping intent data #
PUT /api/asset-subgrouping/{oldGrouping}/reassign/{newGrouping} Reassign asset subgrouping #
PUT /api/asset-subgrouping/tag/{oldTag} Update subgrouping tag #
GET /api/audit/{event_id}/team/{team_id}/company/{brand_id} Get audit by brand for current user #
GET /api/audit/{event_id}/team/{team_id}/review/{user_id} Get audits for review #
POST /api/audit/{event_id}/team/{team_id}/review/{user_id} Update user events with audits and item values #
GET /api/audit/{event_id}/team/{team_id}/user/{user_id}/user-event-media-data Get processed media data for user event #
GET /api/audit/{event_id}/property/{property_id}/review/{user_id}/bulk-keyword Get audits for review with bulk keyword #
GET /api/audit/{event_id}/team/{team_id}/review/{user_id}/download Download scouting report as CSV #
GET /api/audit/{event_id}/team/{team_id}/review/{user_id}/metadata Get metadata for audit review #
GET /api/audit/{event_id}/team/{team_id}/review/{user_id}/list Get paginated audit reviews with filters #
GET /api/audit/{event_id}/team/{team_id}/review/{user_id}/counts Get review counts for property or league #
GET /api/scan/{event_id} Get social scan review data #
GET /api/audit/{event_id}/team/{team_id}/item/{item_id} Get audit by item #
POST /api/audit/bulk Bulk add audits with item values #
POST /api/audit/{event_id}/team/{team_id}/company/{brand_id}/{season} Save audit with item values for a brand #
PUT /api/audit/{event_id}/team/{team_id}/review/{user_id}/move-company Move item values to a different company #
DELETE /api/audit/remove/{audit_id} Delete an audit #
POST /api/audit/{audit_id}/item-value/{item_value_id}/copy Copy an audit with item value to a new brand #
GET /api/audit-count/{league_id} Get audit counts for a league #
POST /api/audit/{eventId}/team/{propertyId}/review/{userId}/bulk-clone Bulk clone item values to a different asset within audit review. Omit item_value_ids to clone all. #
PUT /api/audit/{eventId}/team/{propertyId}/review/{userId}/bulk-update Bulk update item values within audit review. Omit item_value_ids to update all. #
DELETE /api/audit/{eventId}/team/{propertyId}/review/{userId}/bulk-delete Bulk delete item values within audit review. Omit item_value_ids to delete all. #
POST /api/audit/{eventId}/team/{propertyId}/review/{userId}/bulk-reject Bulk reject item values within audit review. Omit item_value_ids to reject all. #
PUT /api/audit/{eventId}/team/{propertyId}/review/{userId}/bulk-clear-keyword-phrase Clear keywords from item value descriptions #
POST /api/audit/{event_id}/property/{property_id}/review/{user_id}/bulk-reassign-brand Bulk reassign brand for item values #
GET /api/audit/{event_id}/synonyms List audit synonyms #
POST /api/audit/{event_id}/synonyms/{synonym_id}/accept Accept audit synonym #
DELETE /api/audit/{event_id}/synonyms/{synonym_id} Delete audit synonym #
POST /api/auth/login Authenticate user #
GET /api/auth/logout Logout user #
GET /api/auth/pin/send/{mfaOption} Send MFA PIN #
POST /api/auth/pin/verify Verify MFA PIN #
GET /api/email-exists Check if email exists #
GET /api/verify/{token} Verify user email #
POST /api/enroll Enroll new user #
POST /api/auth/passwords/email Send password reset email #
POST /api/auth/passwords/reset Reset password #
GET /api/admin/brand-competitors/review-items List brand competitor review items #
GET /api/admin/brand-competitors/review-items/summary Summary of the brand competitor review queue #
GET /api/admin/brand-competitors/review-items/{id} Show a brand competitor review item #
POST /api/admin/brand-competitors/review-items/{id}/approve Approve a brand competitor review item #
POST /api/admin/brand-competitors/review-items/{id}/reject Reject a brand competitor review item #
GET /api/social-scraping-sessions/brand/{brandId} Get the social scraping sessions for a given brand #
GET /api/social-scraping-sessions/brand/{brandId}/session/{brandScrapingSessionId} Get the social scraping session properties for a given brand #
GET /api/social-scraping-sessions/brand/{brandId}/latest/{platform}/{handle} Get the latest social scraping session for a given brand #
DELETE /api/social-scraping-sessions/brand/{brandId}/session/{scrapingSessionId}/matched-entity/{matchedEtityId} Delete the matched entity from the posts of a social scraping session for a given brand #
GET /api/social-scraping-sessions/brand/{brandId}/session/{brandScrapingSessionId}/export Export the social scraping session properties for a given brand #
GET /api/brand-synonyms List brand synonyms #
POST /api/brand-synonyms Create brand synonym #
GET /api/brand-synonyms/{id} Get brand synonym #
PUT /api/brand-synonyms/{id} Update brand synonym #
DELETE /api/brand-synonyms/{id} Delete brand synonym #
GET /api/campaign List all campaigns #
POST /api/campaign Create a new campaign #
POST /api/campaign/{id}/meta Update campaign metadata #
GET /api/campaign/draft Get draft campaign #
GET /api/category List all categories #
POST /api/category Create a new category #
GET /api/category/{categoryId}/subcategories Get category with its subcategories #
GET /api/category/subcategories/{subcategoryId}/export/contacts Export contacts for a subcategory #
GET /api/category/subcategories Get extended list of categories with subcategories #
GET /api/brands/categories Get all categories with subcategories #
GET /api/category/with-teams/{categoryId} Get category with audited properties #
GET /api/category/{id} Get a category by ID #
PUT /api/category/{id} Update a category #
DELETE /api/category/{id} Delete a category #
GET /api/category/{id}/intent Get category intent data #
PUT /api/category/{oldId}/reassign/{newId} Reassign subcategories to another category #
GET /api/category/download #
GET /api/category/subcategories/download #
GET /api/company List brands #
POST /api/company Create a new brand #
GET /api/company/download Export brands to CSV #
GET /api/company/{id} Get brand details #
PUT /api/company/{id} Update a brand #
DELETE /api/company/{id} Delete a brand #
PUT /api/company/{id}/approved Approve a brand #
PUT /api/company/{id}/social-handles Add social handle to brand #
PUT /api/company/{id}/social-handles/multiple Add multiple social handles to brand #
PUT /api/company/quick-edit/{id} Quick edit a brand #
GET /api/company/exists Check if brand exists #
PUT /api/company/{old_id}/reassign/{new_id} Reassign brand data #
POST /api/brand/{id}/properties/{year} Get brand deals by season #
POST /api/brand/{id}/properties/metadata/{year} Get brand deals metadata #
PUT /api/company/{id}/exclude-from-transcribe Exclude brand from transcribe #
GET /api/contacts/bad-email-report List bad email reports for the authenticated user #
POST /api/contacts/bad-email-report Report a bad email for a contact #
GET /api/contacts/{contactableEntity}/{contactableId}/owner/{ownerId} List contacts for an entity #
GET /api/contacts/{contactableEntity}/{contactableId}/export Export sale contacts #
POST /api/contacts/{contactableEntity}/{contactableId} Create a new contact #
POST /api/contacts/{contactableEntity}/{contactableId}/sale-contact Create sale contacts from existing profiles #
DELETE /api/contacts/{contactableEntity}/{contactableId}/sale-contact Bulk-remove sale contacts from a sale list #
GET /api/contacts/{contactableEntity}/{contactableId}/{personProfileId} Get a specific contact #
PUT /api/contacts/{contactableEntity}/{contactableId}/{personProfileId} Update a contact #
DELETE /api/contacts/{contactableEntity}/{contactableId}/{personProfileId} Delete a contact #
POST /api/contacts/by-email Search contacts by email #
POST /api/contacts/by-school Search contacts by school #
PUT /api/contacts/{contactableEntity}/{contactableId}/{personProfileId}/email-status Update contact email status #
GET /api/contacts/email/status/file List email status files #
POST /api/contacts/email/status/file Upload email status file #
GET /api/contacts/email/status/file/metadata Get email status file metadata #
GET /api/contacts/email/status/file/{filename} Get email status file download URL #
POST /api/contacts/linkedin/scraping Scrape LinkedIn profiles #
POST /api/contacts/{entityType}/{entityId}/employees/linkedin Search LinkedIn employees by entity #
POST /api/contacts/{entityType}/{entityId}/employees/linkedin/on-demand Request a user-triggered LinkedIn employee scrape #
GET /api/linkedin-profile-url/check Check if a LinkedIn profile URL is linked to any contacts #
POST /api/webhooks/phantombuster/employee-search #
POST /api/webhooks/phantombuster/on-demand-employee-search #
GET /api/contacts/primary-email/check Check if a primary email is linked to any contacts #
GET /api/news/active-articles List active news articles #
GET /api/news/all-articles List all curated news articles #
GET /api/news/export/all-articles Export curated news articles #
GET /api/news/my-articles List current user's curated news articles #
GET /api/news/submissions List the global news submissions queue (all submitters) #
GET /api/news/submissions/{id} Get one news submission by id (global — any submitter) #
POST /api/news/article Create a curated news article #
PUT /api/news/article/{id} Update a curated news article #
DELETE /api/news/article/{id} Delete a curated news article #
POST /api/news/analyse Bulk submit news article URLs for analysis #
PUT /api/news/article/{id}/publish Publish a news article #
PUT /api/news/article/{id}/unpublish Unpublish a news article #
PUT /api/news/article/{id}/decline Decline a news article #
PUT /api/news/article/{id}/restore Restore a declined news article #
GET /api/news/article/preview Preview news article #
GET /api/custom-reports List custom reports #
POST /api/custom-reports Create a custom report #
GET /api/custom-reports/{id} Retrieve a custom report #
PUT /api/custom-reports/{id} Update a custom report #
DELETE /api/custom-reports/{id} Delete a custom report #
POST /api/custom-reports/{id}/duplicate Duplicate a custom report #
PATCH /api/custom-reports/{id}/rename Rename a custom report #
POST /api/custom-reports/{customReport}/share #
POST /api/ingestion/submit Submit an ingestion request #
GET /api/ingestion/jobs List user's ingestion jobs #
GET /api/ingestion/jobs/{uuid} Get ingestion job status with all tasks #
GET /api/ingestion/tasks/{uuid} Get ingestion task details #
GET /api/ingestion/jobs/{uuid}/contacts Get contact extraction results for an ingestion job #
POST /api/webhooks/ingestion Handle Data Ingestion webhook callback #
GET /api/events List all events #
POST /api/events Create a new event #
GET /api/events/team/{team_id} Get events for a specific property/team #
GET /api/events/property/all Get all events for a selected team #
GET /api/event/{event_id} Get a specific event #
PUT /api/events/{event_id} Update an event #
DELETE /api/events/{event_id} Delete an event #
GET /api/facebook/me #
GET /api/facebook/validate-token #
POST /api/send-feedback Send user feedback #
GET /api/files Get list of file uploads #
POST /api/files Upload a new file #
GET /api/files/{id} Get file upload by ID #
DELETE /api/files/{id} Delete a file upload #
GET /api/brand/clip/timings Get brand clip timings #
GET /api/hubspot/access Get Hubspot access token #
GET /api/hubspot/segments/{id}/contacts Get contacts from a HubSpot segment #
GET /api/logos Detect logos in an image #
GET /api/download-image Download an image as base64 #
POST /api/crop-image Crop an image #
PUT /api/image/{id}/enhance Save enhanced image #
POST /api/image/{id}/enhance Enhance Image #
GET /api/infographics List all infographics #
POST /api/infographics Create infographic #
PUT /api/infographics/{id} Update infographic #
DELETE /api/infographics/{id} Delete infographic #
GET /api/intercom/me Get current user Intercom info #
GET /api/internal/sync/brands Paginated brand reference data for internal service sync #
GET /api/internal/sync/league-assets Paginated per-league capture-scope assets for internal service sync #
GET /api/internal/sync/properties Paginated property reference data for internal service sync #
GET /api/internal/sync/property-known-brands Paginated property/asset brand history for internal service sync #
GET /api/internal/sync/venues Paginated venue reference data for internal service sync #
GET /api/item List all items (assets) #
POST /api/item Create a new item (asset) #
GET /api/item/{id} Get an item by ID #
PUT /api/item/{id} Update an item #
DELETE /api/item/{id} Delete an item #
GET /api/item/{id}/intent Get item intent data #
GET /api/items-slim Get slim items list with platforms and subplatforms #
GET /api/items-slim-with-counts Get slim items list with current-season audits and brands counts #
GET /api/items/export Export items to CSV #
DELETE /api/item-image/{id} Delete item image #
GET /api/item-platform List all item platforms #
POST /api/item-platform Create a new item platform #
GET /api/item-platform/{id} Get a platform by ID #
PUT /api/item-platform/{id} Update a platform #
DELETE /api/item-platform/{id} Delete a platform #
GET /api/item-platform/{id}/subplatform Get platform's subplatforms #
GET /api/item-platform/{id}/intent Get platform intent data #
PUT /api/item-platform/{oldId}/reassign/{newId} Reassign items and subplatforms to another platform #
GET /api/item-subplatform List all item subplatforms #
POST /api/item-subplatform Create a new subplatform #
GET /api/item-subplatform/{id} Get a subplatform by ID #
PUT /api/item-subplatform/{id} Update a subplatform #
DELETE /api/item-subplatform/{id} Delete a subplatform #
GET /api/item-subplatform/{id}/intent Get subplatform intent data #
PUT /api/item-subplatform/{oldId}/reassign/{newId} Reassign items to another subplatform #
GET /api/item-value List all item values #
POST /api/item-value Create a new item value #
GET /api/item-value/{id} Get an item value by ID #
PUT /api/item-value/{id} Update an item value #
DELETE /api/item-value/{id} Delete item value(s) #
PUT /api/item-value/description Update description for multiple item values #
PUT /api/item-value/description/clear Clear description for multiple item values #
POST /api/item-value/{id}/copy Copy an item value to another item #
DELETE /api/item-video/{id} Delete item video #
GET /api/keywords #
POST /api/keywords #
GET /api/keywords/{id} #
PUT /api/keywords/{id} #
DELETE /api/keywords/{id} #
POST /api/keywords/position #
GET /api/league List leagues. #
POST /api/league Create a league. #
GET /api/league/{league} Get a single league. #
PUT /api/league/{league} Update a league. #
DELETE /api/league/{league} Delete a league. #
GET /api/league/{league_id}/social-scraping-settings Get a league's social scraping settings. #
PUT /api/league/{league_id}/social-scraping-settings Update a league's social scraping settings. #
GET /api/league/social-scraping-settings List social scraping settings for all leagues. #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/sponsorunited-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

sponsorunited-api-openapi.json Raw ↑
{
 "openapi": "3.0.0",
 "info": {
  "title": "SponsorUnited API",
  "version": "v1"
 },
 "paths": {
  "/api/ai-chatbot/access": {
   "get": {
    "tags": [
     "AI Chatbot"
    ],
    "summary": "Get AI chatbot access token",
    "description": "Generates or retrieves an access token for the AI chatbot service. Requires the user to have AI chatbot access permissions",
    "operationId": "db297135cc617e1f4ea5407ef93e0343",
    "responses": {
     "200": {
      "description": "Generate or retrieve the AI Chatbot access token.",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "access_token": {
           "type": "string"
          }
         },
         "type": "object"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/user/{userId}/surface/admin-context": {
   "get": {
    "tags": [
     "Admin Surface Context"
    ],
    "summary": "Get a user's administrator-set Surface context",
    "description": "Returns the administrator-set Surface context for the given user. Separate from the user's own context, which is never returned here. Requires the edit-users permission.",
    "operationId": "e9df1a6f4ce6e021b4f3ff72262a5a67",
    "parameters": [
     {
      "name": "userId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Administrator-set user context",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "data": {
           "properties": {
            "context": {
             "type": "string",
             "example": "Long-time client contact. Prefers NBA/MLS comps.",
             "nullable": true
            }
           },
           "type": "object"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthenticated"
     },
     "403": {
      "description": "Missing the edit-users permission"
     },
     "404": {
      "description": "User not found"
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "put": {
    "tags": [
     "Admin Surface Context"
    ],
    "summary": "Update a user's administrator-set Surface context",
    "description": "Upserts the administrator-set Surface context for the given user, preserving formatting verbatim. Leaves the user's own context untouched. Requires the edit-users permission.",
    "operationId": "09be3d68eb05cce7eaf3d639adb3ec00",
    "parameters": [
     {
      "name": "userId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AdminUserSurfaceContextUpdateRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Administrator-set user context updated",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "data": {
           "properties": {
            "context": {
             "type": "string",
             "example": "Long-time client contact. Prefers NBA/MLS comps.",
             "nullable": true
            }
           },
           "type": "object"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthenticated"
     },
     "403": {
      "description": "Missing the edit-users permission"
     },
     "404": {
      "description": "User not found"
     },
     "422": {
      "description": "Validation error"
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/organization/{organizationId}/surface/admin-context": {
   "get": {
    "tags": [
     "Admin Surface Context"
    ],
    "summary": "Get an organization's administrator-set Surface context",
    "description": "Returns the administrator-set Surface context for the given organization. Separate from the organization's own context, which is never returned here. Requires the edit-organization permission.",
    "operationId": "52df41e9cf877a06a1d0a91e3517e2d0",
    "parameters": [
     {
      "name": "organizationId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Administrator-set organization context",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "data": {
           "properties": {
            "context": {
             "type": "string",
             "example": "Enterprise account, renewal Q3.",
             "nullable": true
            }
           },
           "type": "object"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthenticated"
     },
     "403": {
      "description": "Missing the edit-organization permission"
     },
     "404": {
      "description": "Organization not found"
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "put": {
    "tags": [
     "Admin Surface Context"
    ],
    "summary": "Update an organization's administrator-set Surface context",
    "description": "Upserts the administrator-set Surface context for the given organization, preserving formatting verbatim. Leaves the organization's own context untouched. Requires the edit-organization permission.",
    "operationId": "57494f69be64682492a50cc084a7996f",
    "parameters": [
     {
      "name": "organizationId",
      "in": "path",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AdminOrganizationSurfaceContextUpdateRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Administrator-set organization context updated",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "data": {
           "properties": {
            "context": {
             "type": "string",
             "example": "Enterprise account, renewal Q3.",
             "nullable": true
            }
           },
           "type": "object"
          }
         },
         "type": "object"
        }
       }
      }
     },
     "401": {
      "description": "Unauthenticated"
     },
     "403": {
      "description": "Missing the edit-organization permission"
     },
     "404": {
      "description": "Organization not found"
     },
     "422": {
      "description": "Validation error"
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/agency": {
   "post": {
    "tags": [
     "Agency"
    ],
    "summary": "Create a new agency",
    "description": "Creates a new agency with the provided details including name, contact information, social media handles, and optional brand/property associations",
    "operationId": "1387e8e891a95fcc75a59818ab8ed345",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AgencyStoreRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "The new Agency.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AgencyShowStoreUpdateResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/agency/{id}": {
   "get": {
    "tags": [
     "Agency"
    ],
    "summary": "Get agency details",
    "description": "Retrieves detailed information about a specific agency including its companies, properties, organizations, social handles, and service groups. Use the slim parameter for reduced data",
    "operationId": "8f592b30c702d786206f4af44f62656d",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "The id of the Agency to fetch.",
      "required": true,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "slim",
      "in": "query",
      "description": "Fetch slimmed down Agency data.",
      "schema": {
       "type": "boolean"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "An agency with the given id.",
      "content": {
       "application/json": {
        "schema": {
         "oneOf": [
          {
           "$ref": "#/components/schemas/AgencyLightResource"
          },
          {
           "$ref": "#/components/schemas/AgencyShowStoreUpdateResource"
          }
         ]
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "put": {
    "tags": [
     "Agency"
    ],
    "summary": "Update an agency",
    "description": "Updates an existing agency's information including profile details, social handles, company/property associations, and organization memberships",
    "operationId": "2ada65983d8b161abd1b6df83fdd09ca",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "The id of the Agency to update.",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AgencyUpdateRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "The updated Agency.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AgencyShowStoreUpdateResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Agency"
    ],
    "summary": "Delete an agency",
    "description": "Soft deletes an agency and cleans up associated data including contacts, social handles, and profile links. Requires delete administration agencies permission",
    "operationId": "444a655b9280f1ef01ed3e6da2710f55",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Agency ID",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "204": {
      "description": "Empty on success."
     },
     "200": {
      "description": "Cannot remove Agency",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/ErrorResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/agency/{id}/representation": {
   "get": {
    "tags": [
     "Agency"
    ],
    "summary": "Get agency representation",
    "description": "Retrieves an agency's representation data including its associated properties and companies with their logos. Includes soft-deleted agencies",
    "operationId": "924e90a51d9fe2c213d2ef0ee6048db2",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "The id of the Agency for which to fetch representation.",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "An agency with the given id and its representation.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AgencyShowStoreUpdateResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/agency-services": {
   "get": {
    "tags": [
     "AgencyServices"
    ],
    "summary": "List agency services",
    "description": "Returns a list of all agency services with their types and usage counts",
    "operationId": "85bce9769d63ca8dad86af3f42cb6150",
    "responses": {
     "200": {
      "description": "List of agency services",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "$ref": "#/components/schemas/AgencyServicesIndexResource"
         }
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "post": {
    "tags": [
     "AgencyServices"
    ],
    "summary": "Create agency service",
    "description": "Creates a new agency service with the specified name and service type",
    "operationId": "bfbab5f8ae68d4b5e57d2fd823eeae7d",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AgencyServiceCreateRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Service Type details.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AgencyServicesResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/agency-services/{id}": {
   "get": {
    "tags": [
     "AgencyServices"
    ],
    "summary": "Get agency service",
    "description": "Returns the details of a specific agency service by ID",
    "operationId": "b04e408d558c062de7bb82899f31b744",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Service Type id",
      "required": true,
      "schema": {
       "type": "integer",
       "format": "int64"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Service Type details.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AgencyServicesResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "put": {
    "tags": [
     "AgencyServices"
    ],
    "summary": "Update agency service",
    "description": "Updates an existing agency service's name or service type",
    "operationId": "142b17c11ca48d83b3e2ce56afdea2d5",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AgencyServiceUpdateRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Service Type details.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AgencyServicesResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "delete": {
    "tags": [
     "AgencyServices"
    ],
    "summary": "Delete agency service",
    "description": "Permanently removes an agency service from the system",
    "operationId": "bb5672bb8cda537bd4fc59c8b5f658bd",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "AgencyServices Id",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "204": {
      "description": "Empty on success."
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/agency-services-types": {
   "get": {
    "tags": [
     "AgencyServicesType"
    ],
    "summary": "List agency service types",
    "description": "Returns all available agency service types with optional filtering by name and sorting options",
    "operationId": "e741361353dffb28f2d2360486ead685",
    "responses": {
     "200": {
      "description": "List of agency services types.",
      "content": {
       "application/json": {
        "schema": {
         "type": "array",
         "items": {
          "$ref": "#/components/schemas/AgencyServicesTypeIndexResource"
         }
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "post": {
    "tags": [
     "AgencyServicesType"
    ],
    "summary": "Create agency service type",
    "description": "Creates a new agency service type with the provided data",
    "operationId": "4220a5c00d542910c4a18d46e9eb8f8e",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AgencyServiceTypeCreateRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Service Type details.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AgencyServicesTypeResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/agency-services-types/{type_id}": {
   "get": {
    "tags": [
     "AgencyServicesType"
    ],
    "summary": "Get agency service type",
    "description": "Returns the details of a specific agency service type by its ID",
    "operationId": "b4e4f49e59e0651f4de4ab71afb32d75",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "Service Type id",
      "required": true,
      "schema": {
       "type": "integer",
       "format": "int64"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Service Type details.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AgencyServicesTypeResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "put": {
    "tags": [
     "AgencyServicesType"
    ],
    "summary": "Update agency service type",
    "description": "Updates an existing agency service type with the provided data",
    "operationId": "d44a64dbb51364ce2ddee8d04bfd2d8b",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AgencyServiceTypeUpdateRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Service Type details.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AgencyServicesTypeResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "delete": {
    "tags": [
     "AgencyServicesType"
    ],
    "summary": "Delete agency service type",
    "description": "Deletes an agency service type by its ID. Requires delete permission",
    "operationId": "75ed2ac36401e5549e10cc290d6e7c3e",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "AgencyServicesType Id",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "204": {
      "description": "Empty on success."
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/asset-grouping": {
   "get": {
    "tags": [
     "Asset Groupings"
    ],
    "summary": "List all asset groupings",
    "description": "Returns a paginated list of asset groupings with their subgroupings",
    "operationId": "f08b79a015056c8d4bd68063aa05cb8e",
    "parameters": [
     {
      "name": "AssetGroupingIndexRequest",
      "in": "query",
      "schema": {
       "$ref": "#/components/schemas/AssetGroupingIndexRequest"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "List of asset groupings",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssetGroupingIndexResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "post": {
    "tags": [
     "Asset Groupings"
    ],
    "summary": "Create asset grouping",
    "description": "Creates a new asset grouping with optional media order",
    "operationId": "1390482d2e687fc2fd012794a51c7769",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AssetGroupingRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "The new asset grouping.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssetGroupingResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/asset-grouping/{id}": {
   "get": {
    "tags": [
     "Asset Groupings"
    ],
    "summary": "Get asset grouping",
    "description": "Returns a specific asset grouping with its subgroupings",
    "operationId": "5b2f6ebcc14c9db79b7eead42722a3d3",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "The id of the asset grouping to update.",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "The updated asset grouping.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssetGroupingResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "put": {
    "tags": [
     "Asset Groupings"
    ],
    "summary": "Update asset grouping",
    "description": "Updates the name, icon, and media order of an existing asset grouping",
    "operationId": "8c2481c0f8bd2c903fe90e204089a587",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "The id of the asset grouping to update.",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AssetGroupingRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "The updated item grouping.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssetGroupingResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Asset Groupings"
    ],
    "summary": "Delete asset grouping",
    "description": "Removes an asset grouping and its associated subgroupings",
    "operationId": "fca80b6282fcf00122c60f4b336f308b",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "204": {
      "description": "Empty on success."
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/asset-grouping/{old_grouping}/reassign": {
   "put": {
    "tags": [
     "Asset Groupings"
    ],
    "summary": "Reassign asset grouping",
    "description": "Moves all items from one asset grouping to another",
    "operationId": "1838061788f7a8e5f4af39b182b6fc75",
    "parameters": [
     {
      "name": "old_grouping",
      "in": "path",
      "description": "The id of the old grouping",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AssetGroupingReassignRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "The reassign was successfully.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssetGroupingResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/asset-subgrouping/": {
   "get": {
    "tags": [
     "Asset Subgroupings"
    ],
    "summary": "List all asset subgroupings",
    "description": "Returns all asset subgroupings with their parent groupings ordered by media order",
    "operationId": "ab50fb3a5295ae73d825ecb7c7543008",
    "responses": {
     "200": {
      "description": "List of asset subgroupings",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssetSubgroupingIndexResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/asset-subgrouping": {
   "post": {
    "tags": [
     "Asset Subgroupings"
    ],
    "summary": "Create asset subgrouping",
    "description": "Creates a new asset subgrouping under a specified grouping",
    "operationId": "10e2ffa916cfeaf6e4d8360511b64908",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AssetSubgroupingStoreRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "The new asset subgrouping.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssetSubgroupingResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/asset-subgrouping/{id}": {
   "get": {
    "tags": [
     "Asset Subgroupings"
    ],
    "summary": "Get asset subgrouping",
    "description": "Returns a specific asset subgrouping with its parent grouping",
    "operationId": "5298a5dfd5179098c87173ff85b91f0e",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "The id of the asset grouping to update.",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "The updated asset grouping.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssetSubgroupingResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "put": {
    "tags": [
     "Asset Subgroupings"
    ],
    "summary": "Update asset subgrouping",
    "description": "Updates the name, grouping association, and icon of an existing subgrouping",
    "operationId": "02261538464d9b2e00ca4513c83ec0db",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "description": "The id of the asset grouping to update.",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AssetSubgroupingUpdateRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "The updated asset grouping.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssetSubgroupingResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   },
   "delete": {
    "tags": [
     "Asset Subgroupings"
    ],
    "summary": "Delete asset subgrouping",
    "description": "Removes an asset subgrouping from the system",
    "operationId": "4918ef38b51abd58cec25b79dcc6f41d",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "204": {
      "description": "Empty on success."
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/asset-subgrouping/{id}/intent": {
   "get": {
    "tags": [
     "Asset Subgroupings"
    ],
    "summary": "Get subgrouping intent data",
    "description": "Returns usage metrics for a subgrouping including item counts and audit references",
    "operationId": "40322c27f64945cb564c31f36ddb9557",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Asset subgrouping intent",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssetSubgroupingIntentResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/asset-subgrouping/{oldGrouping}/reassign/{newGrouping}": {
   "put": {
    "tags": [
     "Asset Subgroupings"
    ],
    "summary": "Reassign asset subgrouping",
    "description": "Moves all items from one subgrouping to another",
    "operationId": "f0158fb0e40bb7841ed8dbcf14e761ed",
    "parameters": [
     {
      "name": "oldGrouping",
      "in": "path",
      "description": "The id of the old subgrouping",
      "required": true,
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "newGrouping",
      "in": "path",
      "description": "The id of the new subgrouping",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "The reassign was successfully.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssetSubgroupingIntentResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/asset-subgrouping/tag/{oldTag}": {
   "put": {
    "tags": [
     "Asset Subgroupings"
    ],
    "summary": "Update subgrouping tag",
    "description": "Renames a tag across all subgroupings that have it",
    "operationId": "8d5112c31deb47ed1eea83a8e5e290af",
    "parameters": [
     {
      "name": "oldTag",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AssetSubgroupingTagRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "The update tag was changed.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/AssetSubgroupingIndexResource"
        }
       }
      }
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/audit/{event_id}/team/{team_id}/company/{brand_id}": {
   "get": {
    "tags": [
     "Audits"
    ],
    "summary": "Get audit by brand for current user",
    "description": "Returns audit data for a specific event, team, and brand combination for the authenticated user",
    "operationId": "11f41b8d9f2333f1e9d669b8b620291b",
    "parameters": [
     {
      "name": "event_id",
      "in": "path",
      "description": "The ID of the event",
      "required": true,
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "team_id",
      "in": "path",
      "description": "The ID of the team/property",
      "required": true,
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "brand_id",
      "in": "path",
      "description": "The ID of the brand/company",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Audit data with brand, event, team, user, and item values"
     },
     "401": {
      "description": "Unauthenticated"
     }
    },
    "security": [
     {
      "bearerAuth": []
     }
    ]
   }
  },
  "/api/audit/{event_id}/team/{team_id}/review/{user_id}": {
   "get": {
    "tags": [
     "Audits"
    ],
    "summary": "Get audits for review",
    "description": "Returns all audits for a specific event, team, and user for review purposes",
    "operationId": "a66f6d57d90708be64f31f82049c8ec0",
    "parameters": [
     {
      "name": "event_id",
      "in": "path",
      "description": "The ID of the event",
      "required": true,
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "team_id",
      "in": "path",
      "description": "The ID of the team/property",
      "required": true,
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "user_id",
      "in": "path",
      "description": "The ID of the user",
      "required": true,
      "schema": {
       "type": "integer"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "List of audits for review"
     },
     "401": {
  

# --- truncated at 32 KB (1117 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/sponsorunited/refs/heads/main/openapi/sponsorunited-api-openapi.json