Vendasta Listing Source Service API

The ListingSourceService API from Vendasta — 2 operation(s) for listingsourceservice.

Operations 2

POST /v1/listings/get-listing-source-by-id Get Listing Source By Id #
POST /v1/listings/get-listing-sources Get Listing Sources #

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/vendasta-listingsourceservice-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

vendasta-listingsourceservice-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Listing Products Listing Source Service API
  version: 1.210.0
servers:
- description: Production
  url: https://prod.apigateway.co/grpc
tags:
- name: ListingSourceService
paths:
  /v1/listings/get-listing-source-by-id:
    post:
      operationId: ListingSourceService_GetListingSourceById
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/v1GetListingSourceByIdRequest'
        description: Request to retrieve detailed configuration for a specific listing directory by its numeric ID.
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1GetListingSourceByIdResponse'
          description: A successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/rpcStatus'
          description: An unexpected error response.
      security:
      - OAuth2:
        - admin
      summary: Get Listing Source By Id
      tags:
      - ListingSourceService
  /v1/listings/get-listing-sources:
    post:
      operationId: ListingSourceService_GetListingSources
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/v1GetListingSourcesRequest'
        description: Request to fetch all listing sources, optionally filtered by provider.
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1GetListingSourcesResponse'
          description: A successful response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/rpcStatus'
          description: An unexpected error response.
      security:
      - OAuth2:
        - admin
      summary: Get Listing Sources
      tags:
      - ListingSourceService
components:
  schemas:
    rpcStatus:
      properties:
        code:
          format: int32
          type: integer
        details:
          items:
            $ref: '#/components/schemas/protobufAny'
          type: array
        message:
          type: string
      type: object
    v1LocationOverride:
      properties:
        ignoredAnchorDataMatches:
          items:
            type: string
          type: array
        submitListingValidationRegex:
          type: string
      title: Location specific source overrides
      type: object
    v1Source:
      description: 'Source contains comprehensive configuration and constraints for a listing directory.

        This is the definitive reference for understanding what''s required to sync to a directory,

        whether a business is eligible, and what features the directory supports.'
      properties:
        adminNotes:
          title: admin_notes contains internal notes about this directory (for Vendasta admins)
          type: string
        availableForServiceAreaBusiness:
          title: 'available_for_service_area_business indicates this directory supports service area businesses (no physical location)

            False means only businesses with a physical storefront can list here'
          type: boolean
        claimListingHtml:
          title: claim_listing_html contains HTML instructions for claiming an existing listing
          type: string
        createListingHtml:
          title: create_listing_html contains HTML instructions for manually creating a listing on this directory
          type: string
        createListingUrl:
          title: create_listing_url is the URL where users can manually create a listing
          type: string
        created:
          description: Output only. When this directory was added to the system.
          format: date-time
          readOnly: true
          type: string
        deleted:
          description: Output only. Indicates this directory has been removed/deprecated.
          format: date-time
          readOnly: true
          type: string
        descriptionHtml:
          title: description_html is a human-readable description of this directory for display
          type: string
        domains:
          items:
            type: string
          title: domains lists the web domains associated with this directory (for matching/scraping)
          type: array
        editListingHtml:
          title: edit_listing_html contains HTML instructions for manually editing a listing
          type: string
        editListingUrl:
          title: edit_listing_url is the URL where users can manually edit their listing
          type: string
        enabledFlag:
          description: 'enabled_flag controls whether this directory is visible in user-facing applications (RepMan, Snapshot, Business App).

            When false, the directory is hidden from the UI but existing listings may still sync.

            Do not interpret false as "deprecated" - it means the source is not available for new manual submissions

            but may still be actively synced via LSP providers.'
          type: boolean
        hasListingReporting:
          title: 'has_listing_reporting indicates we can scrape/check this directory for accuracy data

            If false, accuracy will always be ACCURACY_STATUS_UNAVAILABLE'
          type: boolean
        hasListingsFlag:
          title: has_listings_flag indicates this directory displays business listings (vs. just aggregating data)
          type: boolean
        hasNoRatingsReviewsFlag:
          title: has_no_ratings_reviews_flag indicates this directory does not support ratings/reviews
          type: boolean
        hasReviewsFlag:
          title: has_reviews_flag indicates this directory supports customer reviews
          type: boolean
        iconClass16px:
          title: icon_class_16px is the CSS class for 16px icon
          type: string
        iconClass32px:
          title: icon_class_32px is the CSS class for 32px icon
          type: string
        iconClass50px:
          title: icon_class_50px is the CSS class for 50px icon
          type: string
        iconUrl16px:
          title: icon_url_16px is the URL for 16px icon
          type: string
        iconUrl32px:
          title: icon_url_32px is the URL for 32px icon
          type: string
        iconUrl50px:
          title: icon_url_50px is the URL for 50px icon
          type: string
        ignoredAnchorDataMatches:
          items:
            type: string
          title: 'ignored_anchor_data_matches lists NAP fields to ignore when calculating accuracy

            Example: ["phone"] means don''t flag phone number mismatches as inaccurate'
          type: array
        isDirectlySubmittedSource:
          title: 'is_directly_submitted_source indicates this is a direct OAuth source (Google, Facebook, Apple, Bing)

            True means businesses can connect their account directly without LSP'
          type: boolean
        isLdSource:
          title: is_ld_source indicates this directory is part of Listing Distribution (Data Axle, Neustar, Foursquare ecosystem)
          type: boolean
        isLocationWhitelistedByDefaultFlag:
          title: is_location_whitelisted_by_default_flag affects location-based eligibility
          type: boolean
        isPartnerWhitelistedByDefaultFlag:
          title: is_partner_whitelisted_by_default_flag affects partner-based eligibility
          type: boolean
        isTaxonomyWhitelistedByDefaultFlag:
          title: is_taxonomy_whitelisted_by_default_flag affects category-based eligibility
          type: boolean
        locationBlacklist:
          items:
            type: string
          title: location_blacklist lists country codes where this directory is not available
          type: array
        locationSpecificOverrides:
          additionalProperties:
            $ref: '#/components/schemas/v1LocationOverride'
          title: location_specific_overrides provides country-specific configuration overrides
          type: object
        locationWhitelist:
          items:
            type: string
          title: location_whitelist lists country codes where this directory is available (if specified, only these countries)
          type: array
        lspIcon:
          title: lsp_icon is the icon URL used in LSP-specific UI
          type: string
        name:
          title: name is the human-readable directory name (e.g., "Google", "Yelp", "Facebook")
          type: string
        partnerBlacklist:
          items:
            type: string
          title: partner_blacklist lists partner IDs that cannot use this directory
          type: array
        partnerSpecificOverrides:
          additionalProperties:
            $ref: '#/components/schemas/v1PartnerOverride'
          title: partner_specific_overrides provides partner-specific configuration (custom branding, names, etc.)
          type: object
        partnerWhitelist:
          items:
            type: string
          title: partner_whitelist lists partner IDs that can use this directory (if specified, only these partners)
          type: array
        popularity:
          format: int64
          title: popularity is a ranking score (higher = more important directory)
          type: string
        sourceId:
          description: Output only. The unique numeric identifier for this directory.
          format: int64
          readOnly: true
          type: string
        sourceTypeId:
          title: source_type_id is the category identifier (e.g., "search_engine", "social_network")
          type: string
        sourceTypeName:
          title: source_type_name is the human-readable category name
          type: string
        submitListingHelpText:
          title: submit_listing_help_text provides guidance for manual listing submission
          type: string
        submitListingValidationRegex:
          title: submit_listing_validation_regex validates listing URLs for manual submission
          type: string
        supportsSubmittedListing:
          title: supports_submitted_listing indicates manual submission via RM is supported
          type: boolean
        syncRequirement:
          $ref: '#/components/schemas/v1SyncRequirement'
        taxonomyBlacklist:
          items:
            type: string
          title: 'taxonomy_blacklist lists business category IDs that are not eligible for this directory

            Use this to explain "Your business type is not supported on [directory]"'
          type: array
        taxonomyWhitelist:
          items:
            type: string
          title: taxonomy_whitelist lists business category IDs that are eligible (if specified, only these categories)
          type: array
        uberallId:
          title: uberall_id is the directory's identifier in the Uberall system (if synced via Uberall)
          type: string
        updated:
          description: Output only. When this directory configuration was last modified.
          format: date-time
          readOnly: true
          type: string
        yextId:
          title: yext_id is the directory's identifier in the Yext system (if synced via Yext)
          type: string
      type: object
    v1SyncRequirement:
      default: SYNC_REQUIREMENT_UNSET
      description: "SyncRequirement specifies what product activation is needed to automatically sync to a directory.\nThis explains why a directory might not be available for a particular business.\n\n - SYNC_REQUIREMENT_UNSET: SYNC_REQUIREMENT_UNSET means no specific requirement (e.g., manual submission via RM, or direct OAuth)\n - SYNC_REQUIREMENT_LSP: SYNC_REQUIREMENT_LSP requires an active Listing Sync Pro subscription (either Yext or Uberall)\n - SYNC_REQUIREMENT_PRO_EDITION: SYNC_REQUIREMENT_PRO_EDITION requires Local SEO Pro edition\n - SYNC_REQUIREMENT_YEXT_LSP: SYNC_REQUIREMENT_YEXT_LSP specifically requires Yext-based Listing Sync Pro\nThis directory is only available through Yext, not Uberall\n - SYNC_REQUIREMENT_UBERALL_LSP: SYNC_REQUIREMENT_UBERALL_LSP specifically requires Uberall-based Listing Sync Pro\nThis directory is only available through Uberall, not Yext\n - SYNC_REQUIREMENT_LSP_OR_PRO_EDITION: SYNC_REQUIREMENT_LSP_OR_PRO_EDITION requires either Listing Sync Pro OR Local SEO Pro"
      enum:
      - SYNC_REQUIREMENT_UNSET
      - SYNC_REQUIREMENT_LSP
      - SYNC_REQUIREMENT_PRO_EDITION
      - SYNC_REQUIREMENT_YEXT_LSP
      - SYNC_REQUIREMENT_UBERALL_LSP
      - SYNC_REQUIREMENT_LSP_OR_PRO_EDITION
      type: string
    v1GetListingSourceByIdResponse:
      description: Contains comprehensive directory configuration and constraints for a single listing source.
      properties:
        source:
          $ref: '#/components/schemas/v1Source'
      title: GetListingSourceByIdResponse
      type: object
    v1PartnerOverride:
      properties:
        adminNotes:
          type: string
        claimListingHtml:
          type: string
        createListingHtml:
          type: string
        descriptionHtml:
          type: string
        editListingHtml:
          type: string
        editListingUrl:
          type: string
        iconClass16px:
          type: string
        iconClass32px:
          type: string
        iconClass50px:
          type: string
        iconUrl16px:
          type: string
        iconUrl32px:
          type: string
        iconUrl50px:
          type: string
        name:
          type: string
      title: Partner specific source overrides
      type: object
    v1GetListingSourceByIdRequest:
      description: Request to retrieve detailed configuration for a specific listing directory by its numeric ID.
      properties:
        fieldMask:
          $ref: '#/components/schemas/vendastatypesFieldMask'
        sourceId:
          description: 'Required. The numeric ID of the directory (e.g., 1 = Google, 2 = Facebook, etc.).

            You can get this ID from the source_id field in GetSyncDataResponse.'
          format: int64
          type: string
      required:
      - sourceId
      title: GetListingSourceByIdRequest
      type: object
    vendastatypesFieldMask:
      description: "paths: \"f.a\"\n    paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n    f {\n      a : 22\n      b {\n        d : 1\n        x : 2\n      }\n      y : 13\n    }\n    z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n    f {\n      a : 22\n      b {\n        d : 1\n      }\n    }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API.  In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, the existing\nrepeated values in the target resource will be overwritten by the new values.\nNote that a repeated field is only allowed in the last position of a `paths`\nstring.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then the existing sub-message in the target resource is\noverwritten. Given the target message:\n\n    f {\n      b {\n        d : 1\n        x : 2\n      }\n      c : 1\n    }\n\nAnd an update message:\n\n    f {\n      b {\n        d : 10\n      }\n    }\n\nthen if the field mask is:\n\n paths: \"f.b\"\n\nthen the result will be:\n\n    f {\n      b {\n        d : 10\n      }\n      c : 1\n    }\n\nHowever, if the update mask was:\n\n paths: \"f.b.d\"\n\nthen the result would be:\n\n    f {\n      b {\n        d : 10\n        x : 2\n      }\n      c : 1\n    }\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n    message Profile {\n      User user = 1;\n      Photo photo = 2;\n    }\n    message User {\n      string display_name = 1;\n      string address = 2;\n    }\n\nIn proto a field mask for `Profile` may look as such:\n\n    mask {\n      paths: \"user.display_name\"\n      paths: \"photo\"\n    }\n\nIn JSON, the same mask is represented as below:\n\n    {\n      mask: \"user.displayName,photo\"\n    }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n    message SampleMessage {\n      oneof test_oneof {\n        string name = 4;\n        SubMessage sub_message = 9;\n      }\n    }\n\nThe field mask can be:\n\n    mask {\n      paths: \"name\"\n    }\n\nOr:\n\n    mask {\n      paths: \"sub_message\"\n    }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths."
      properties:
        paths:
          description: The set of field mask paths.
          items:
            type: string
          type: array
      title: '`FieldMask` represents a set of symbolic field paths, for example:'
      type: object
    v1GetListingSourcesResponse:
      description: Contains a map of all listing sources keyed by source ID.
      properties:
        fieldMask:
          $ref: '#/components/schemas/vendastatypesFieldMask'
        sources:
          additionalProperties:
            $ref: '#/components/schemas/v1Source'
          description: Output only. Map of source_id to directory configuration.
          readOnly: true
          type: object
      title: GetListingSourcesResponse
      type: object
    v1Provider:
      default: PROVIDER_UNSPECIFIED
      description: "Provider indicates how listing data is synced to a directory.\nThis is critical for understanding the difference between managed (LSP) and manual (RM) listings.\n\n - PROVIDER_UNSPECIFIED: PROVIDER_UNSPECIFIED means manual submission via Reputation Management (RM).\nThese listings must be manually created and updated by the user.\nThey do NOT automatically sync when the business profile changes.\n - PROVIDER_UBERALL: PROVIDER_UBERALL means synced automatically via Uberall (LSP provider for European/international directories).\nRequires active Listing Sync Pro subscription with Uberall.\n - PROVIDER_YEXT: PROVIDER_YEXT means synced automatically via Yext (LSP provider for North American directories).\nRequires active Listing Sync Pro subscription with Yext.\n - PROVIDER_DIRECT: PROVIDER_DIRECT means synced directly via OAuth (Google, Facebook, Apple, Bing).\nNo LSP subscription required - user just needs to connect their account."
      enum:
      - PROVIDER_UNSPECIFIED
      - PROVIDER_UBERALL
      - PROVIDER_YEXT
      - PROVIDER_DIRECT
      type: string
    protobufAny:
      additionalProperties: {}
      properties:
        '@type':
          type: string
      type: object
    v1GetListingSourcesRequest:
      description: Request to fetch all listing sources, optionally filtered by provider.
      properties:
        fieldMask:
          $ref: '#/components/schemas/vendastatypesFieldMask'
        provider:
          $ref: '#/components/schemas/v1Provider'
      title: GetListingSourcesRequest
      type: object
  securitySchemes:
    OAuth2:
      flows:
        authorizationCode:
          authorizationUrl: https://sso-api-prod.apigateway.co/oauth2/auth
          scopes:
            admin: Allows the application to perform administrative tasks that you have access to across the platform
            business-app: Allows the application to manage all features of Business App
          tokenUrl: https://sso-api-prod.apigateway.co/oauth2/token
      type: oauth2