FnlOwl Capture API

The capture API from FnlOwl — 8 operation(s) for capture.

GitHub OpenAPI

Operations 8

GET /public/{siteKey}/widgets Get public by site key widgets #
GET /public/{siteKey}/widgets/{widgetId} Get public by site key widgets by widget id #
POST /public/{siteKey}/widgets/{widgetId}/view Create public by site key widgets by widget id view #
POST /public/{siteKey}/widgets/{widgetId}/questions/{questionId}/exit Create public by site key widgets by widget id questions by question id exit #
POST /public/{siteKey}/conversions Create public by site key conversions #
GET /public/download/{token} Get public download by token #
POST /public/{siteKey}/widgets/{widgetId}/submit Create public by site key widgets by widget id submit #
POST /public/{siteKey}/widgets/{widgetId}/partial Create public by site key widgets by widget id partial #

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/fnlowl-com:fnlowl-com-capture-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

fnlowl-com-capture-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 0.1.0
  title: fnlowl Capture API
tags:
- name: Capture
paths:
  /public/{siteKey}/widgets:
    get:
      tags:
      - Capture
      parameters:
      - schema:
          type: string
        required: true
        name: siteKey
        in: path
      - schema:
          type: string
        required: false
        name: project
        in: query
      - schema:
          type: string
          maxLength: 200
        required: false
        name: visitor
        in: query
      responses:
        '200':
          description: Live popups and bars
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PublicWidget'
        '400':
          description: The request was not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '401':
          description: Not authenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Not allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: No such thing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Conflicts with what is already there
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Understood, but cannot be done
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      summary: Get public by site key widgets
      x-summary-source: derived
      operationId: getPublicBySiteKeyWidgets
      x-operation-id-source: derived
  /public/{siteKey}/widgets/{widgetId}:
    get:
      tags:
      - Capture
      parameters:
      - schema:
          type: string
        required: true
        name: siteKey
        in: path
      - schema:
          type: string
        required: true
        name: widgetId
        in: path
      - schema:
          type: string
          maxLength: 200
        required: false
        name: visitor
        in: query
      responses:
        '200':
          description: What to render
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicWidget'
        '400':
          description: The request was not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '401':
          description: Not authenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Not allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: No such thing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Conflicts with what is already there
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Understood, but cannot be done
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      summary: Get public by site key widgets by widget id
      x-summary-source: derived
      operationId: getPublicBySiteKeyWidgetsByWidgetId
      x-operation-id-source: derived
  /public/{siteKey}/widgets/{widgetId}/view:
    post:
      tags:
      - Capture
      parameters:
      - schema:
          type: string
        required: true
        name: siteKey
        in: path
      - schema:
          type: string
        required: true
        name: widgetId
        in: path
      - schema:
          type: string
          enum:
          - desktop
          - mobile
        required: false
        name: device
        in: query
      responses:
        '204':
          description: Counted
        '400':
          description: The request was not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '401':
          description: Not authenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Not allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: No such thing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Conflicts with what is already there
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Understood, but cannot be done
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      summary: Create public by site key widgets by widget id view
      x-summary-source: derived
      operationId: postPublicBySiteKeyWidgetsByWidgetIdView
      x-operation-id-source: derived
  /public/{siteKey}/widgets/{widgetId}/questions/{questionId}/exit:
    post:
      tags:
      - Capture
      parameters:
      - schema:
          type: string
        required: true
        name: siteKey
        in: path
      - schema:
          type: string
        required: true
        name: widgetId
        in: path
      - schema:
          type: string
        required: true
        name: questionId
        in: path
      responses:
        '204':
          description: Counted
        '400':
          description: The request was not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '401':
          description: Not authenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Not allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: No such thing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Conflicts with what is already there
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Understood, but cannot be done
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      summary: Create public by site key widgets by widget id questions by question id exit
      x-summary-source: derived
      operationId: postPublicBySiteKeyWidgetsByWidgetIdQuestionsByQuestionIdExit
      x-operation-id-source: derived
  /public/{siteKey}/conversions:
    post:
      tags:
      - Capture
      parameters:
      - schema:
          type: string
        required: true
        name: siteKey
        in: path
      responses:
        '204':
          description: Accepted (whether or not it matched a lead)
        '400':
          description: The request was not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '401':
          description: Not authenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Not allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: No such thing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Conflicts with what is already there
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Understood, but cannot be done
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      summary: Create public by site key conversions
      x-summary-source: derived
      operationId: postPublicBySiteKeyConversions
      x-operation-id-source: derived
  /public/download/{token}:
    get:
      tags:
      - Capture
      parameters:
      - schema:
          type: string
        required: true
        name: token
        in: path
      responses:
        '302':
          description: Redirect to the gated file
        '400':
          description: The request was not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '401':
          description: Not authenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Not allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: No such thing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Conflicts with what is already there
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Understood, but cannot be done
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      summary: Get public download by token
      x-summary-source: derived
      operationId: getPublicDownloadByToken
      x-operation-id-source: derived
  /public/{siteKey}/widgets/{widgetId}/submit:
    post:
      tags:
      - Capture
      parameters:
      - schema:
          type: string
        required: true
        name: siteKey
        in: path
      - schema:
          type: string
        required: true
        name: widgetId
        in: path
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CaptureSubmit'
      responses:
        '200':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CaptureResult'
        '400':
          description: The request was not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '401':
          description: Not authenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Not allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: No such thing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Conflicts with what is already there
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Understood, but cannot be done
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      summary: Create public by site key widgets by widget id submit
      x-summary-source: derived
      operationId: postPublicBySiteKeyWidgetsByWidgetIdSubmit
      x-operation-id-source: derived
  /public/{siteKey}/widgets/{widgetId}/partial:
    post:
      tags:
      - Capture
      parameters:
      - schema:
          type: string
        required: true
        name: siteKey
        in: path
      - schema:
          type: string
        required: true
        name: widgetId
        in: path
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CaptureSubmit'
      responses:
        '204':
          description: Saved
        '400':
          description: The request was not valid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '401':
          description: Not authenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Not allowed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: No such thing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Conflicts with what is already there
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Understood, but cannot be done
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      summary: Create public by site key widgets by widget id partial
      x-summary-source: derived
      operationId: postPublicBySiteKeyWidgetsByWidgetIdPartial
      x-operation-id-source: derived
components:
  schemas:
    CaptureResult:
      type: object
      properties:
        ok:
          type: boolean
          enum:
          - true
        successHeadline:
          type: string
        successMessage:
          type: string
        rewardCode:
          type: string
          nullable: true
      required:
      - ok
      - successHeadline
      - successMessage
      - rewardCode
    CaptureSubmit:
      type: object
      properties:
        email:
          type: string
          format: email
        referrer:
          type: string
        answers:
          type: array
          items:
            type: object
            properties:
              questionId:
                type: string
                nullable: true
              questionText:
                type: string
              value:
                type: string
            required:
            - questionId
            - questionText
            - value
        quizScore:
          type: integer
          nullable: true
        quizTierLabel:
          type: string
          nullable: true
        wheelSegmentId:
          type: string
        submissionId:
          type: string
          minLength: 1
          maxLength: 200
        utmSource:
          type: string
          maxLength: 200
        utmMedium:
          type: string
          maxLength: 200
        utmCampaign:
          type: string
          maxLength: 200
        device:
          type: string
          enum:
          - desktop
          - mobile
        website:
          type: string
          maxLength: 500
        elapsedMs:
          type: integer
          minimum: 0
    PublicWidget:
      type: object
      properties:
        id:
          type: string
        kind:
          type: string
          enum:
          - lead-magnet
          - popup
          - survey
          - announcement-bar
          - quiz
          - calculator
        headline:
          type: string
        description:
          type: string
        buttonText:
          type: string
        consentText:
          type: string
        termsUrl:
          type: string
        privacyUrl:
          type: string
        badge:
          type: boolean
        successHeadline:
          type: string
        successMessage:
          type: string
        layout:
          type: string
          enum:
          - simple
          - visual
        buttonStyle:
          type: string
          enum:
          - filled
          - outline
          - rounded
        position:
          type: string
          enum:
          - intro
          - middle
          - end
        requireEmail:
          type: boolean
        showOn:
          type: string
          enum:
          - all
          - url
        showOnValue:
          type: string
        hideOnValue:
          type: string
        accentColor:
          type: string
        theme:
          type: string
          enum:
          - light
          - dark
        backgroundColor:
          type: string
        textColor:
          type: string
        cornerStyle:
          type: string
          enum:
          - sharp
          - soft
          - round
        fontFamily:
          type: string
          enum:
          - system
          - serif
          - rounded
          - mono
        logoUrl:
          type: string
        placement:
          type: string
          enum:
          - center
          - bottom-right
          - bottom-left
          - top-right
          - top-left
        popupWidth:
          type: string
          enum:
          - small
          - medium
          - large
        floatingButton:
          type: string
          nullable: true
          enum:
          - bottom-left
          - bottom-right
          - left
          - right
        triggers:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                enum:
                - immediate
                - exit-intent
                - scroll
                - time
                - click
                - hover
              value:
                type: integer
              selector:
                type: string
                nullable: true
            required:
            - type
            - value
            - selector
        triggerMode:
          type: string
          enum:
          - any
          - all
        audienceRules:
          type: array
          items:
            type: object
            properties:
              facet:
                type: string
                enum:
                - source
                - device
                - visitor
              operator:
                type: string
                enum:
                - is
                - is_not
              value:
                type: string
            required:
            - facet
            - operator
            - value
        cooldownDays:
          type: integer
          nullable: true
        maxDismissals:
          type: integer
          nullable: true
        firstStep:
          type: string
          enum:
          - none
          - micro-commitment
          - spin-to-win
        hookQuestion:
          type: string
          nullable: true
        barMessage:
          type: string
        barCtaText:
          type: string
        barCtaUrl:
          type: string
        barPosition:
          type: string
          enum:
          - top
          - bottom
          - top-left
          - top-right
          - bottom-left
          - bottom-right
        calcFormula:
          type: string
        calcOutputTemplate:
          type: string
        questions:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              text:
                type: string
              type:
                type: string
                enum:
                - short
                - long
                - single
                - multi
              options:
                type: array
                items:
                  type: string
            required:
            - id
            - text
            - type
            - options
        quizQuestions:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              text:
                type: string
              options:
                type: array
                items:
                  type: object
                  properties:
                    label:
                      type: string
                    score:
                      type: integer
                  required:
                  - label
                  - score
            required:
            - id
            - text
            - options
        quizTiers:
          type: array
          items:
            type: object
            properties:
              minScore:
                type: integer
              maxScore:
                type: integer
              label:
                type: string
              message:
                type: string
            required:
            - minScore
            - maxScore
            - label
            - message
        calcInputs:
          type: array
          items:
            type: object
            properties:
              label:
                type: string
              min:
                type: integer
              max:
                type: integer
              step:
                type: integer
              default:
                type: integer
            required:
            - label
            - min
            - max
            - step
            - default
        wheelSegments:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              label:
                type: string
            required:
            - id
            - label
        questionRoutes:
          type: array
          items:
            type: object
            properties:
              questionId:
                type: string
              whenOption:
                type: string
              gotoQuestionId:
                type: string
                nullable: true
            required:
            - questionId
            - whenOption
            - gotoQuestionId
      required:
      - id
      - kind
      - headline
      - description
      - buttonText
      - consentText
      - termsUrl
      - privacyUrl
      - badge
      - successHeadline
      - successMessage
      - layout
      - buttonStyle
      - position
      - requireEmail
      - showOn
      - showOnValue
      - hideOnValue
      - accentColor
      - theme
      - backgroundColor
      - textColor
      - cornerStyle
      - fontFamily
      - logoUrl
      - placement
      - popupWidth
      - floatingButton
      - triggers
      - triggerMode
      - audienceRules
      - cooldownDays
      - maxDismissals
      - firstStep
      - hookQuestion
      - barMessage
      - barCtaText
      - barCtaUrl
      - barPosition
      - calcFormula
      - calcOutputTemplate
      - questions
      - quizQuestions
      - quizTiers
      - calcInputs
      - wheelSegments
      - questionRoutes
    Problem:
      type: object
      properties:
        code:
          type: string
          example: not_found
        detail:
          type: string
          example: no such widget
        status:
          type: integer
          example: 404
        meta:
          type: object
          additionalProperties:
            anyOf:
            - type: string
            - type: number
            - nullable: true
            - nullable: true
      required:
      - code
      - detail
      - status