Salesgraph OMS API

The Opportunity Management System — query the organization's own visible sales objects, traverse their relationships, inspect where each value came from, and manage continuous, cost-capped research watches on Accounts and Opportunities. The only Salesgraph endpoint family that returns JSON rather than markdown, and the only one carrying an idempotency key. Write intent is never applied directly: an action request returns 202 and waits for a human to approve it.

Operations 9

GET /api/v1/oms/metadata Get visible OMS metadata #
POST /api/v1/oms/search Search visible OMS objects #
POST /api/v1/oms/get Get one visible OMS object #
POST /api/v1/oms/pivot Traverse a visible OMS relationship #
POST /api/v1/oms/provenance Get visible object provenance #
GET /api/v1/oms/watches List research watches #
POST /api/v1/oms/watches Create a research watch #
DELETE /api/v1/oms/watches Cancel a research watch #
POST /api/v1/oms/actions Request an approved OMS action #

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/salesgraph-oms-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

salesgraph-oms-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Salesgraph REST OMS API
  description: 'The same GTM research and audit engine behind the Salesgraph MCP server, exposed as a small REST API under `/api/v1`. Command endpoints use API key authentication and return markdown (`Content-Type: text/markdown`) on success; OMS endpoints return JSON; errors are returned as JSON. Synchronous commands (research, competitors, help) return the markdown result inline; asynchronous audits (gtm-audit, audit) return a run id to poll. The OMS (Opportunity Management System) endpoints query the organization''s own visible sales objects, traverse their relationships, and manage continuous research watches. A separate unauthenticated Status API at `/api/status` publishes component health.

    '
  version: v1
  contact:
    name: Salesgraph Support
    email: support@salesgraph.com
    url: https://salesgraph.com/support
  x-provenance:
    generated: '2026-08-13'
    method: generated
    source: https://docs.salesgraph.com/reference/rest-api.md
    note: 'Faithfully modeled from the published Salesgraph REST API reference plus the provider''s own Agent Skill at docs.salesgraph.com/.well-known/agent-skills/salesgraph/skill.md. The provider''s docs.salesgraph.com/api-reference/openapi.json is STILL a Mintlify "OpenAPI Plant Store" placeholder (re-probed 2026-08-13, HTTP 200) and was NOT harvested. Round 2 added the OMS endpoints, the org-audit poll, and the public /api/status endpoint, all of which the provider documented after the round-1 pass.

      '
servers:
- url: https://salesgraph.com
  description: Production
security:
- bearerAuth: []
- apiKeyAuth: []
tags:
- name: OMS
  description: 'Opportunity Management System — query the organization''s visible sales objects, traverse their relationships, inspect provenance, and manage continuous research watches.

    '
paths:
  /api/v1/oms/metadata:
    get:
      operationId: getOmsMetadata
      summary: Get visible OMS metadata
      description: 'Returns the visible OMS ontology metadata — the object types, links, and properties the calling organization can see. Responses are JSON.

        '
      tags:
      - OMS
      responses:
        '200':
          description: Visible OMS ontology metadata.
          content:
            application/json:
              schema:
                type: object
        '401':
          $ref: '#/components/responses/Unauthorized'
  /api/v1/oms/search:
    post:
      operationId: searchOmsObjects
      summary: Search visible OMS objects
      description: 'Searches the visible OMS objects of one type. Returns a page of objects plus a `nextPageToken` to continue, or `null` when the page is the last one.

        '
      tags:
      - OMS
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OmsSearchRequest'
      responses:
        '200':
          description: A page of matching OMS objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OmsObjectPage'
        '400':
          $ref: '#/components/responses/OmsInvalidInput'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/OmsAccessDenied'
  /api/v1/oms/get:
    post:
      operationId: getOmsObject
      summary: Get one visible OMS object
      description: 'Fetches a single visible OMS object by its type and PUBLIC key (for example `domain:acme.com`) — not an internal primary key.

        '
      tags:
      - OMS
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OmsObjectRef'
      responses:
        '200':
          description: One OMS object.
          content:
            application/json:
              schema:
                type: object
        '400':
          $ref: '#/components/responses/OmsInvalidInput'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/OmsAccessDenied'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v1/oms/pivot:
    post:
      operationId: pivotOmsObject
      summary: Traverse a visible OMS relationship
      description: 'Traverses a named link from one OMS object in a given direction — for example from an Account to its Opportunities. Returns a page of objects plus a `nextPageToken`.

        '
      tags:
      - OMS
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OmsPivotRequest'
      responses:
        '200':
          description: A page of linked OMS objects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OmsObjectPage'
        '400':
          $ref: '#/components/responses/OmsInvalidInput'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/OmsAccessDenied'
  /api/v1/oms/provenance:
    post:
      operationId: getOmsProvenance
      summary: Get visible object provenance
      description: 'Returns the data lineage of one OMS object — its properties, relationships, and history, with the sources each came from.

        '
      tags:
      - OMS
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OmsObjectRef'
      responses:
        '200':
          description: Provenance for one OMS object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OmsProvenance'
        '400':
          $ref: '#/components/responses/OmsInvalidInput'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v1/oms/watches:
    get:
      operationId: listOmsWatches
      summary: List research watches
      description: 'Lists the manageable continuous research watches for the organization. Pass `id` to fetch a single watch. Returns `{ watches, nextCursor }`.

        '
      tags:
      - OMS
      parameters:
      - name: id
        in: query
        required: false
        description: Fetch a single watch by id instead of listing.
        schema:
          type: string
      responses:
        '200':
          description: A page of research watches (or one watch when `id` is supplied).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OmsWatchPage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      operationId: createOmsWatch
      summary: Create a research watch
      description: 'Creates a continuous research watch on an Account or Opportunity. Accepts an `idempotencyKey` so a retried create does not produce a duplicate watch. Frequencies run from `1h` through 30 days; `lite` watches require a monthly cost cap of at least 3000 micros and `base` watches at least 10000, both capped at 100000000. A source policy accepts up to 25 valid domains per include or exclude list, with no domain in both.

        '
      tags:
      - OMS
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OmsWatchRequest'
      responses:
        '200':
          description: The created watch object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OmsWatch'
        '400':
          $ref: '#/components/responses/OmsInvalidInput'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/OmsAccessDenied'
    delete:
      operationId: cancelOmsWatch
      summary: Cancel a research watch
      description: Cancels one manageable research watch by id.
      tags:
      - OMS
      parameters:
      - name: id
        in: query
        required: true
        description: The watch id to cancel.
        schema:
          type: string
      responses:
        '200':
          description: The cancelled watch object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OmsWatch'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v1/oms/actions:
    post:
      operationId: requestOmsAction
      summary: Request an approved OMS action
      description: 'Requests a human-approved OMS action — an opportunity update, a rep note, or a drafted follow-up email. Returns 202 with a JSON approval request; the action is not applied until a person approves it.

        '
      tags:
      - OMS
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: The action request payload.
      responses:
        '202':
          description: An approval request was created.
          content:
            application/json:
              schema:
                type: object
        '400':
          $ref: '#/components/responses/OmsInvalidInput'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/OmsAccessDenied'
components:
  responses:
    OmsAccessDenied:
      description: The caller cannot see or manage the requested OMS resource.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: access_denied
    OmsInvalidInput:
      description: An OMS input validation error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: invalid_input
    NotFound:
      description: Unknown command or run id (or an id belonging to another organization).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing, malformed, or revoked API key.
      headers:
        WWW-Authenticate:
          schema:
            type: string
            example: Bearer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: unauthorized
  schemas:
    OmsSearchRequest:
      type: object
      required:
      - type
      description: A search over visible OMS objects of one type.
      properties:
        type:
          type: string
          description: The OMS object type to search.
        query:
          type: string
          description: The search query.
        pageToken:
          type: string
          description: Continuation token from a previous page.
    OmsProvenance:
      type: object
      description: Data lineage for one OMS object.
      properties:
        properties:
          type: array
          items:
            type: object
        relationships:
          type: array
          items:
            type: object
        history:
          type: array
          items:
            type: object
    OmsWatchPage:
      type: object
      description: A page of research watches.
      properties:
        watches:
          type: array
          items:
            $ref: '#/components/schemas/OmsWatch'
        nextCursor:
          type:
          - string
          - 'null'
          description: Cursor for the next page, or null on the last page.
    OmsObjectRef:
      type: object
      required:
      - type
      - key
      description: A reference to one OMS object by type and PUBLIC key.
      properties:
        type:
          type: string
          description: The OMS object type (for example `Account` or `Opportunity`).
          example: Account
        key:
          type: string
          description: The public OMS key, not an internal primary key.
          example: domain:acme.com
    OmsSourcePolicy:
      type: object
      description: 'Optional domain allow/deny policy. Each list accepts up to 25 valid domains and a domain may not appear in both.

        '
      properties:
        includeDomains:
          type: array
          items:
            type: string
        excludeDomains:
          type: array
          items:
            type: string
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: string
          description: 'Machine-readable error code — `unauthorized`, `invalid_input`, `access_denied`, or `not_found`.

            '
    OmsWatch:
      type: object
      description: A continuous research watch.
      properties:
        id:
          type: string
        target:
          $ref: '#/components/schemas/OmsObjectRef'
        query:
          type: string
        frequency:
          type: string
        processor:
          type: string
        monthlyCostCapMicros:
          type: integer
        status:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    OmsWatchRequest:
      type: object
      required:
      - target
      - query
      - frequency
      - processor
      - monthlyCostCapMicros
      description: A request to create a continuous research watch.
      properties:
        target:
          $ref: '#/components/schemas/OmsObjectRef'
        query:
          type: string
          description: What to monitor.
        purpose:
          type: string
          description: Why the watch exists.
        idempotencyKey:
          type: string
          description: 'Caller-supplied key that makes a retried create safe — resubmitting the same key does not create a second watch.

            '
        frequency:
          type: string
          description: How often the watch runs, from `1h` through 30 days.
          example: 1d
        processor:
          type: string
          enum:
          - lite
          - base
          description: The processor tier, which sets the minimum monthly cost cap.
        sourcePolicy:
          $ref: '#/components/schemas/OmsSourcePolicy'
        monthlyCostCapMicros:
          type: integer
          description: 'Monthly cost cap in micros — at least 3000 for `lite`, at least 10000 for `base`, at most 100000000 for either.

            '
    OmsPivotRequest:
      type: object
      required:
      - type
      - key
      - link
      - direction
      description: A traversal of one named OMS relationship.
      properties:
        type:
          type: string
        key:
          type: string
        link:
          type: string
          description: The relationship name to traverse.
        direction:
          type: string
          description: The direction to traverse the link in.
    OmsObjectPage:
      type: object
      description: A page of OMS objects.
      properties:
        objects:
          type: array
          items:
            type: object
        nextPageToken:
          type:
          - string
          - 'null'
          description: Token for the next page, or null on the last page.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Send your Salesgraph API key as `Authorization: Bearer sg_live_...`.'
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: 'Alternative header — send your Salesgraph API key as `x-api-key: sg_live_...`.'