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

# Retrieve a Definition

> One of your team's own definitions with its status, the compile error if any, the last test run (counts and the leads it found) and how many signals it has produced. Poll this after creating a definition. Global catalogue definitions are not readable here — see List Custom Signal Definitions. Free (0 credits).



## OpenAPI

````yaml GET /signals/custom/definitions/{slug}
openapi: 3.1.0
info:
  title: Custom Signals API
  description: >-
    Signals produced by custom signal definitions — signal types defined as data
    (out of stealth, new office or market entry, first or founding hire, …)
    rather than the four built-in families. One endpoint serves every
    definition; `type` selects which. A free companion endpoint lists the
    definitions, and a team can create, start, pause and remove definitions of
    its own.
  license:
    name: MIT
  version: 2.1.0
servers:
  - url: https://www.trysignalbase.com/api/v2
security:
  - bearerAuth: []
paths:
  /signals/custom/definitions/{slug}:
    get:
      summary: Retrieve a Custom Signal Definition
      description: >-
        One of your team's own definitions with its status, the compile error if
        any, the last test run (counts and the leads it found) and how many
        signals it has produced. Poll this after creating a definition. Global
        catalogue definitions are not readable here — see List Custom Signal
        Definitions. Free (0 credits).
      operationId: getCustomSignalDefinition
      parameters:
        - $ref: '#/components/parameters/DefinitionSlug'
      responses:
        '200':
          description: The definition.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OwnDefinitionResponse'
              example:
                success: true
                data:
                  slug: first_sales_leader_x7k2
                  name: First sales leader
                  description: >-
                    The author's own company announces its first sales leader
                    (VP Sales, Head of Sales, CRO) or founding sales hire. Not:
                    a sales hire at a company with an existing sales team; a
                    recruiter post about another company.
                  sourceDescription: >-
                    The author's own company announces hiring its first sales
                    leader or is building its first sales team: a first VP
                    Sales, Head of Sales, CRO or founding account executive.
                    Exclude ordinary sales hires at companies that already have
                    a sales team, and recruiter posts about other companies.
                  status: ready
                  scope: team
                  attributes:
                    - role
                    - seniority
                  keywordCount: 7
                  restricted: false
                  monitorId: null
                  compileError: null
                  test:
                    ranAt: '2026-11-10T09:16:40.000Z'
                    mode: global
                    fetched: 140
                    classified: 140
                    matched: 4
                    companiesChecked: 0
                    leads:
                      - companyName: Acme
                        companyLinkedinUrl: https://www.linkedin.com/company/acme
                        headline: Acme hires its first VP Sales
                        confidence: 0.91
                        sourceUrl: >-
                          https://www.linkedin.com/feed/update/urn:li:activity:7515785729281671168
                        author: Jane Doe
                        evidenceQuotes:
                          - >-
                            Thrilled to welcome our first ever VP of Sales as we
                            build out the go-to-market team.
                        attributes:
                          role: VP Sales
                          seniority: vp
                        postedAt: '2026-11-08T14:02:00.000Z'
                  lastRunAt: null
                  lastRunStats: null
                  activatedAt: null
                  createdAt: '2026-11-10T09:12:04.000Z'
                  signals30d: 0
                  signalsTotal: 0
                  lastSignalAt: null
                  nextStep: >-
                    Compiled and tested. Review test.leads: if they are the kind
                    of post you want, start the definition (active: true). The
                    leads become its first signals.
                meta:
                  endpoint: customSignals.get
                  creditsUsed: 0
        '400':
          description: >-
            Bad request — a malformed body, slug or value; the message names the
            field
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                success: false
                error: description must be 20 to 1500 characters
        '401':
          description: Unauthorized - Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                success: false
                error: Invalid API key
        '403':
          description: >-
            Forbidden — custom signals need a Pro plan, or the team has no
            active subscription
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                success: false
                error: Custom signals are part of the Pro plan.
        '404':
          description: >-
            Not found — no definition with this slug belongs to your team
            (global definitions are not managed here), or custom signals are not
            enabled for your account yet
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                success: false
                error: Custom signal not found
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                success: false
                error: Rate limit exceeded
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                success: false
                error: Internal server error
components:
  parameters:
    DefinitionSlug:
      name: slug
      in: path
      required: true
      schema:
        type: string
        pattern: ^[a-z][a-z0-9_]{2,39}$
      description: >-
        The definition's slug, as returned when it was created or by the
        catalogue.
  schemas:
    OwnDefinitionResponse:
      type: object
      properties:
        success:
          type: boolean
        data:
          $ref: '#/components/schemas/OwnDefinition'
        meta:
          $ref: '#/components/schemas/Meta'
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: string
    OwnDefinition:
      type: object
      description: One of your team's own definitions, as the Custom signals page shows it.
      properties:
        slug:
          type: string
          description: >-
            Derived from the name and made unique with a short suffix. Pass it
            as `type` on GET /signals/custom or in a monitor's signal_types.
        name:
          type: string
        description:
          type: string
          description: >-
            The compiled rule a post must satisfy. Written by the compile step
            from sourceDescription; empty until compiled.
        sourceDescription:
          type:
            - string
            - 'null'
          description: What you sent as `description` when creating it.
        status:
          type: string
          enum:
            - compiling
            - testing
            - ready
            - active
            - paused
            - disabled
            - failed
          description: >-
            compiling: search phrases and a rule are being derived. testing: a
            test run is in flight. ready: tested, not started; review
            test.leads. active: running. paused: kept, not swept. failed: see
            compileError. disabled: removed.
        scope:
          type: string
          enum:
            - team
        attributes:
          type: array
          items:
            type: string
          description: >-
            The definition-specific fields its signals carry (set by the compile
            step).
        keywordCount:
          type: integer
          description: How many search phrases the compile step produced.
        restricted:
          type: boolean
          description: >-
            true when the definition only sweeps its targets' posts (through a
            monitor).
        monitorId:
          type:
            - string
            - 'null'
          description: The monitor that holds the targets of a restricted definition.
        compileError:
          type:
            - string
            - 'null'
        test:
          oneOf:
            - $ref: '#/components/schemas/TestRun'
            - type: 'null'
        lastRunAt:
          type:
            - string
            - 'null'
          format: date-time
          description: When the sweep last ran this definition.
        lastRunStats:
          type:
            - object
            - 'null'
          additionalProperties: true
        activatedAt:
          type:
            - string
            - 'null'
          format: date-time
        createdAt:
          type: string
          format: date-time
        signals30d:
          type: integer
        signalsTotal:
          type: integer
        lastSignalAt:
          type:
            - string
            - 'null'
          format: date-time
        nextStep:
          type: string
          description: What to do next, given the status.
        attached:
          type:
            - object
            - 'null'
          description: >-
            Create only: how the targets resolved. null when the definition is
            global.
          properties:
            companies:
              type: integer
            invalid:
              type: array
              items:
                type: string
        seeded:
          type: object
          description: >-
            Update with active:true, first start only: how many test leads
            became signals.
          properties:
            ingested:
              type: integer
            skipped:
              type: integer
    Meta:
      type: object
      properties:
        endpoint:
          type: string
        creditsUsed:
          type: integer
        creditsRemaining:
          type: integer
    TestRun:
      type: object
      description: >-
        The last test run: how many recent posts were fetched and classified,
        how many matched, and the matches themselves.
      properties:
        ranAt:
          type:
            - string
            - 'null'
          format: date-time
        mode:
          type: string
          enum:
            - global
            - restricted
          description: restricted when the definition has targets.
        fetched:
          type: integer
        classified:
          type: integer
        matched:
          type: integer
        companiesChecked:
          type: integer
          description: 'Restricted runs only: how many of the targets were checked.'
        leads:
          type: array
          items:
            $ref: '#/components/schemas/TestLead'
    TestLead:
      type: object
      description: >-
        One post the test run matched. The leads of a ready definition become
        its first signals when it is started.
      properties:
        companyName:
          type:
            - string
            - 'null'
        companyLinkedinUrl:
          type:
            - string
            - 'null'
        headline:
          type:
            - string
            - 'null'
          description: The event, stated as a fact.
        confidence:
          type:
            - number
            - 'null'
          minimum: 0
          maximum: 1
        sourceUrl:
          type: string
          description: The post.
        author:
          type:
            - string
            - 'null'
        evidenceQuotes:
          type: array
          items:
            type: string
          description: Verbatim from the post.
        attributes:
          type: object
          additionalProperties:
            type:
              - string
              - 'null'
        postedAt:
          type:
            - string
            - 'null'
          format: date-time
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: API key authentication. Include as Bearer token in Authorization header.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.