Dibblee Industries Duty API

The main resolver: HS code + origin -> total duty

Operations 1

GET /duty Resolve total import duty for an HS code and country of origin #

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/dibind-com:dibind-com-duty-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

dibind-com-duty-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Dibind Com Duty API
  version: 0.5.0
  contact:
    name: Dibblee Industries
    url: https://dibind.com
  license:
    name: Free to use, no key required
  description: 'Operations tagged duty across 2 of this provider''s published API definitions: daitk-tic-openapi.json, dibind-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://daitk-tic.dibind.com
tags:
- name: Duty
  description: 'The main resolver: HS code + origin -> total duty'
paths:
  /duty:
    get:
      tags:
      - Duty
      summary: Resolve total import duty for an HS code and country of origin
      description: The one endpoint that answers a real costing question. Returns the base duty band, plus every conditional (quota) and SIMA anti-dumping layer that might also apply, each carrying total_if_applies so a caller never has to add percentages by hand. worst_case_all_measures is the ceiling if every conditional layer lands at once.
      parameters:
      - name: hs
        in: query
        required: true
        schema:
          type: string
        description: The Canadian tariff classification code. 4, 6, 8, or 10 digits, periods optional (e.g. 7217.20.00.73 or 721720). A bare 2-digit chapter is too broad to price and is refused.
      - name: from
        in: query
        required: true
        schema:
          type: string
        description: 'Country of origin - ISO2 code or name (e.g. CN, China). REQUIRED: origin decides tariff treatment and whether a surtax applies.'
      - name: as_of
        in: query
        required: false
        schema:
          type: string
          format: date
        description: Date the goods clear customs. Defaults to today.
      responses:
        '200':
          description: A resolved duty answer, or a refusal shaped like one (rates_disagree, too_broad, special_provision) when a single number would mislead.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DutyAnswer'
        '400':
          description: Missing/invalid input, or a classification/chapter-99 refusal.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: No tariff line found for this HS code.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      operationId: getDuty
      x-operation-id-source: derived
    servers:
    - url: https://daitk-tic.dibind.com
components:
  schemas:
    ConditionalMeasure:
      type: object
      description: A surtax owed only if a condition is met (e.g. a quota threshold), reported separately because it is not owed on every shipment.
      properties:
        source:
          type: string
        rate:
          type: number
          nullable: true
        application_condition:
          type: string
          nullable: true
        content_origin_test:
          type: string
          nullable: true
        total_if_applies:
          type: number
          description: Running cumulative total if this layer applies.
        quota:
          type: object
          nullable: true
        verify:
          type: string
          format: uri
    SimaMeasure:
      type: object
      description: Anti-dumping/countervailing duty. Depends on the EXPORTER named on the customs documents, not the manufacturer - never summed into duty_rate.
      properties:
        code:
          type: string
        measure:
          type: string
        all_other_rate_pct:
          type: number
          nullable: true
        total_if_applies:
          type: number
          nullable: true
        cooperative_exporters:
          type: array
          items:
            type: object
        verify:
          type: string
          format: uri
    DutyRate:
      type: object
      description: Base duty plus every surtax certain to apply. NOT the landed cost - see conditional_measures and sima_measures.
      properties:
        low:
          type: number
        mid:
          type: number
        high:
          type: number
    SalesTax:
      type: object
      description: 'Always included: false. GST/HST/QST/PST are out of scope and never quoted.'
      properties:
        included:
          type: boolean
          enum:
          - false
        note:
          type: string
    DutyAnswer:
      type: object
      properties:
        hs_input:
          type: string
        hs_precision:
          type: string
        from:
          type: string
        as_of:
          type: string
          format: date
        ambiguous:
          type: boolean
        duty_rate:
          $ref: '#/components/schemas/DutyRate'
        worst_case_all_measures:
          type: number
          nullable: true
          description: Ceiling if every conditional and SIMA layer lands at once. Absent means duty_rate.high is the whole story.
        cite:
          type: string
          description: Ready-to-quote attribution, e.g. 'DAITK (daitk-tic.dibind.com), read 2026-09-03'.
        sales_tax:
          $ref: '#/components/schemas/SalesTax'
        measures_in_effect:
          type: array
          items:
            type: object
        conditional_measures:
          type: array
          items:
            $ref: '#/components/schemas/ConditionalMeasure'
          nullable: true
        sima_measures:
          type: array
          items:
            $ref: '#/components/schemas/SimaMeasure'
          nullable: true
        possible_relief:
          type: object
          nullable: true
          description: Chapter 99 relief provisions whose own text references this code. Candidates, never entitlements.
        special_provision:
          type: object
          nullable: true
          description: 'Present only for chapters 98/99: what the provision is and what gates it.'
        notes:
          type: array
          items:
            type: string
          description: notes[0] is always the citeSummary sentence - quote it first.
    Error:
      type: object
      properties:
        detail:
          type: string
        error:
          type: string
x-refined-from:
- daitk-tic-openapi.json
- dibind-com-openapi.yml
x-mcp:
  endpoint: https://daitk-tic.dibind.com/mcp
  transport: streamable-http
  note: 'A separate protocol from the REST API above, self-describing via tools/list. Tool names: resolve_duty, lookup_tariff, list_trade_measures, get_measure_detail, recent_changes, service_status.'