DTMFRAME Deals API

The Deals API from DTMFRAME — 1 operation(s) for deals.

Operations 1

GET /api/v1/deals/ Sales and campaigns (running first) with deadlines, check times, brands… #

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/dtmframe-com:dtmframe-com-deals-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

dtmframe-com-deals-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: DTMFRAME public read Deals API
  version: 0.1.0
  description: 'Read-only product search and current offers (cheap_read) plus the bounded computations resolve_purchase_request and compare_products (bounded_compute, 10 per minute, shared with MCP). Same vocabulary, limits and channel policy as the MCP tools. No purchase execution; handoff_mode is always user_navigation. Personal conditions travel in POST bodies only and answers are no-store A foreign-currency amount may carry converted, a yen estimate with its rate source and reference date, never used for ordering or budget fit. list_deals (cheap_read) lists the recorded sales and campaigns. Every answer names canonical_page and site_entry_page: canonical_page is the page on this site with the complete price table (including listings the API does not return), the merchant purchase links and the affiliate disclosure; site_entry_page is the same page with the entry marker for this channel. Links are user_navigation handoffs and are not intended for prefetching or automatic clicking. Additive fields (schema_version unchanged): compare_products editions[].measurements carries the site''s own measurements (evidence_class=measured) in full — edition and product_version, environment, settings, measured_at, comparison conditions, procedure, results ({ value, decimals } per named field), failure cases, material rights and how the product was obtained; search_products products[].measurements carries a summary of the same records (evidence_id, edition_id, product_version, measured_at, results, runs, result_statistic, disclosure). Both are absent when there is none, carry no link and are not a sound-quality rating. The first page of a search_products call with no filter also carries a top-level measurements list: the site''s synthetic demonstrations (record_kind synthetic_demonstration; signal-processing facts shown with generated signals, no product) in full, with script_ref, signal_seed, libraries and artifact sha256 to run them again.'
servers:
- url: https://dtmframe.com
tags:
- name: Deals
paths:
  /api/v1/deals/:
    get:
      operationId: list_deals
      summary: Sales and campaigns (running first) with deadlines, check times, brands…
      parameters:
      - name: brand
        in: query
        required: false
        schema:
          description: Brand slug as on /brands/{slug}/ (the manufacturer_id from search_products is accepted too).
          type: string
          minLength: 1
          maxLength: 160
          pattern: ^[a-z0-9][a-z0-9_-]{0,159}$
      - name: category
        in: query
        required: false
        schema:
          description: Category slug as on /categories/{slug}/, e.g. audio-interface (the search_products spelling audio_interface is accepted too).
          type: string
          minLength: 1
          maxLength: 160
          pattern: ^[a-z0-9][a-z0-9_-]{0,159}$
      - name: kind
        in: query
        required: false
        schema:
          description: Campaign kind.
          type: string
          enum:
          - sale
          - giveaway
          - purchase_bonus
          - coupon
          - bundle_change
          - cashback
          - upgrade_offer
          - seasonal_feature
      - name: source
        in: query
        required: false
        schema:
          description: official = manufacturer store, merchant = reseller or marketplace listings, announcement = manufacturer announcement without listings.
          type: string
          enum:
          - official
          - merchant
          - announcement
      - name: state
        in: query
        required: false
        schema:
          default: running
          description: running (default) = active, ending_soon or stale; ending_soon; scheduled; all = every state including ended campaigns.
          type: string
          enum:
          - running
          - ending_soon
          - scheduled
          - all
      - name: limit
        in: query
        required: false
        schema:
          default: 20
          type: integer
          minimum: 1
          maximum: 50
      - name: cursor
        in: query
        required: false
        schema:
          description: Opaque next_cursor of the previous page (bound to one published snapshot).
          type: string
          minLength: 1
          maxLength: 256
      responses:
        '200':
          description: Deals bound to one snapshot. An unknown brand or category yields 0 deals and unresolved_constraints=[brand_unresolved|category_unresolved]. Offers a source keeps off this channel never raise the discount; their omission is marked withheld_by_channel_policy. prices_from and largest_discount_percent use general-segment offers only; a sale with only restricted rows has prices_from [] and field_availability.prices_from unknown.
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  schema_version:
                    type: string
                    minLength: 1
                  request_id:
                    type: string
                    minLength: 1
                    maxLength: 160
                  catalog_snapshot_id:
                    type: string
                    minLength: 1
                    maxLength: 160
                  policy_snapshot_id:
                    type: string
                    minLength: 1
                    maxLength: 160
                  evaluation_scope_id:
                    type: string
                    pattern: ^es_[0-9a-f]{16}$
                  response_channel:
                    type: string
                    enum:
                    - api
                    - mcp
                  channel_class:
                    type: string
                    enum:
                    - web
                    - api
                    - mcp
                    - rss
                    - email
                    - social
                    - unknown
                  ruleset_version:
                    type: string
                    minLength: 1
                  computed_at:
                    type: string
                    pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$
                  unresolved_constraints:
                    type: array
                    items:
                      type: string
                  catalog_scope:
                    type: string
                  search_complete:
                    type: boolean
                  limits_hit:
                    type: array
                    items:
                      type: string
                  excluded_unknowns:
                    type: array
                    items:
                      type: string
                  purchase_execution_available:
                    type: boolean
                    const: false
                  affiliate_disclosure:
                    type: string
                    enum:
                    - none
                    - program_not_applied
                    - affiliate_link
                  data_mode_notice:
                    type: string
                  deals:
                    type: array
                    items:
                      type: object
                      properties:
                        campaign_id:
                          type: string
                          minLength: 1
                          maxLength: 160
                        slug:
                          type: string
                          minLength: 1
                          maxLength: 160
                        title:
                          type: string
                          minLength: 1
                          maxLength: 512
                        kind:
                          type: string
                          enum:
                          - sale
                          - giveaway
                          - purchase_bonus
                          - coupon
                          - bundle_change
                          - cashback
                          - upgrade_offer
                          - seasonal_feature
                        source:
                          type: string
                          enum:
                          - official
                          - merchant
                          - announcement
                        state:
                          type: string
                          enum:
                          - scheduled
                          - active
                          - ending_soon
                          - expired
                          - withdrawn
                          - unverified
                          - stale
                        starts_at:
                          type: string
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$
                        ends_at:
                          type: string
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$
                        deadline_status:
                          type: string
                          enum:
                          - known
                          - open_ended
                          - unknown
                        deadline_precision:
                          type: string
                          enum:
                          - datetime
                          - date
                          - unknown
                        deadline_date:
                          type: string
                          pattern: ^\d{4}-\d{2}-\d{2}$
                        checked_at:
                          type: string
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$
                        fresh_until:
                          type: string
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$
                        brands:
                          type: array
                          items:
                            type: object
                            properties:
                              slug:
                                type: string
                                minLength: 1
                                maxLength: 160
                              name:
                                type: string
                                minLength: 1
                                maxLength: 256
                            required:
                            - slug
                            - name
                            additionalProperties: false
                        categories:
                          type: array
                          items:
                            type: string
                            minLength: 1
                            maxLength: 160
                        target_edition_count:
                          type: integer
                          minimum: 0
                          maximum: 9007199254740991
                        products:
                          maxItems: 5
                          type: array
                          items:
                            type: object
                            properties:
                              product_id:
                                type: string
                                minLength: 1
                                maxLength: 160
                              slug:
                                type: string
                                minLength: 1
                                maxLength: 160
                              name:
                                type: string
                                minLength: 1
                                maxLength: 256
                              canonical_page:
                                type: string
                                maxLength: 2048
                                format: uri
                            required:
                            - product_id
                            - slug
                            - name
                            - canonical_page
                            additionalProperties: false
                        prices_from:
                          maxItems: 8
                          type: array
                          items:
                            type: object
                            properties:
                              amount_minor:
                                type: integer
                                minimum: -9007199254740991
                                maximum: 9007199254740991
                              currency:
                                type: string
                                enum:
                                - JPY
                                - USD
                                - EUR
                                - GBP
                                - KWD
                              currency_exponent:
                                type: integer
                                minimum: 0
                                maximum: 4
                              display:
                                type: string
                                minLength: 1
                                maxLength: 32
                            required:
                            - amount_minor
                            - currency
                            - currency_exponent
                            - display
                            additionalProperties: false
                        largest_discount_percent:
                          type: integer
                          minimum: 1
                          maximum: 99
                        has_free_item:
                          type: boolean
                        canonical_page:
                          type: string
                          maxLength: 2048
                          format: uri
                        site_entry_page:
                          type: string
                          maxLength: 2048
                          format: uri
                        field_availability:
                          type: object
                          propertyNames:
                            type: string
                          additionalProperties:
                            type: string
                            enum:
                            - available
                            - unknown
                            - withheld_by_channel_policy
                            - not_applicable
                            - not_recorded
                        withheld_fields:
                          type: array
                          items:
                            type: string
                        handoff_mode:
                          type: string
                          enum:
                          - user_navigation
                      required:
                      - campaign_id
                      - slug
                      - title
                      - kind
                      - source
                      - state
                      - deadline_status
                      - deadline_precision
                      - checked_at
                      - fresh_until
                      - brands
                      - categories
                      - target_edition_count
                      - products
                      - prices_from
                      - has_free_item
                      - canonical_page
                      - site_entry_page
                      - field_availability
                      - withheld_fields
                      - handoff_mode
                      additionalProperties: false
                    description: 'Order: running first (active and ending_soon, then stale), then scheduled, unverified, expired, withdrawn; within a group the nearest known end first (deals without a known end after those with one), then checked_at newest first, then campaign_id ascending.'
                  next_cursor:
                    type:
                    - string
                    - 'null'
                required:
                - schema_version
                - request_id
                - catalog_snapshot_id
                - policy_snapshot_id
                - evaluation_scope_id
                - response_channel
                - channel_class
                - ruleset_version
                - computed_at
                - unresolved_constraints
                - catalog_scope
                - search_complete
                - limits_hit
                - excluded_unknowns
                - purchase_execution_available
                - affiliate_disclosure
                - deals
                - next_cursor
                additionalProperties: false
        '400':
          description: Unknown query key, invalid value or invalid cursor. The body carries codes only.
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  error:
                    type: string
                  status:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  fields:
                    type: array
                    items:
                      type: string
                  retry_after_seconds:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                required:
                - error
                - status
                additionalProperties: false
        '429':
          description: Rate limited (cheap_read class). Retry-After is set.
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  error:
                    type: string
                  status:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  fields:
                    type: array
                    items:
                      type: string
                  retry_after_seconds:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                required:
                - error
                - status
                additionalProperties: false
        '503':
          description: Publication is not open. Retry-After is set.
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  error:
                    type: string
                  status:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                  fields:
                    type: array
                    items:
                      type: string
                  retry_after_seconds:
                    type: integer
                    minimum: -9007199254740991
                    maximum: 9007199254740991
                required:
                - error
                - status
                additionalProperties: false
      tags:
      - Deals
x-mcp:
  endpoint: /mcp/
  transport: streamable-http (stateless; POST carries JSON-RPC with JSON responses, GET opens the server-to-client SSE stream of comment lines, OPTIONS answers the CORS preflight, DELETE is 405)
  tools:
  - search_products
  - get_current_offers
  - resolve_purchase_request
  - compare_products
  - list_deals
  tool_classes:
    search_products: cheap_read
    get_current_offers: cheap_read
    resolve_purchase_request: bounded_compute
    compare_products: bounded_compute
    list_deals: cheap_read
  operation_classes:
    protocol_control: 120
    cheap_read: 60
    bounded_compute: 10
    page: 240