Authentication

The Filter King API uses OAuth2 to authenticate requests. You can view and manage your API credentials in your dashboard -> API Management.

Your API keys carry many privileges, so be sure to keep them secure! Do not share your secret API keys in publicly accessible areas such as GitHub, client-side code, and so forth.

All API requests must be made over HTTPS. Calls made over plain HTTP will fail. API requests without authentication will also fail.

Authentication Flow

To authenticate, you'll need to obtain an access token using your client credentials. This token should be included in the Authorization header of your requests.

OAuth2 Token Request
              
# Exchange client credentials for an access token
curl 'https://filterking.com/oauth/token' \
-H 'Content-Type: application/json' \
-d '{
  "grant_type": "client_credentials",
  "client_id": "your_client_id",
  "client_secret": "your_client_secret"
}'
            
<?php
$client = new GuzzleHttp\Client();

$response = $client->post('https://filterking.com/oauth/token', [
    'json' => [
        'grant_type' => 'client_credentials',
        'client_id' => 'your_client_id',
        'client_secret' => 'your_client_secret'
    ]
]);

$token = json_decode($response->getBody(), true);
$accessToken = $token['access_token'];
const response = await fetch('https://filterking.com/oauth/token', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    grant_type: 'client_credentials',
    client_id: 'your_client_id',
    client_secret: 'your_client_secret'
  })
});

const data = await response.json();
const accessToken = data.access_token;
import requests

response = requests.post('https://filterking.com/oauth/token', json={
    'grant_type': 'client_credentials',
    'client_id': 'your_client_id',
    'client_secret': 'your_client_secret'
})

token = response.json()
access_token = token['access_token']

Using Your Access Token

Include the bearer token in the Authorization header when making API requests:

Authorized Request
curl https://filterking.com/api/v1/info \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
<?php
$response = $client->get('https://filterking.com/api/v1/info', [
    'headers' => [
        'Authorization' => 'Bearer ' . $accessToken,
    ]
]);

$partner = json_decode($response->getBody(), true);
const response = await fetch('https://filterking.com/api/v1/info', {
  headers: {
    'Authorization': `Bearer ${accessToken}`
  }
});

const partner = await response.json();
headers = {
    'Authorization': f'Bearer {access_token}'
}

response = requests.get(
    'https://filterking.com/api/v1/info',
    headers=headers
)

partner = response.json()

Idempotency

To prevent duplicate orders caused by network retries or accidental double-submissions, the API supports idempotency for POST requests. Specify a unique Idempotency-Key header to ensure that a request is only executed once.

Subsequent requests with the same key will return the cached response from the original request, preventing duplicate order creation. Keys are stored for 48 hours.

Generating an Idempotency Key

We recommend using a UUID v4 for your idempotency keys. UUIDs provide uniqueness and are widely supported across programming languages.

# Generate UUID v4 in Linux/macOS
UUID=$(cat /proc/sys/kernel/random/uuid 2>/dev/null || uuidgen)
echo $UUID

# Or using OpenSSL
openssl rand -hex 16 | sed 's/\(.\{8\}\)\(.\{4\}\)\(.\{4\}\)\(.\{4\}\)\(.\{12\}\)/\1-\2-\3-\4-\5/'
<?php
// Generate UUID v4 in PHP
$idempotencyKey = sprintf(
    '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
    mt_rand(0, 0xffff), mt_rand(0, 0xffff),
    mt_rand(0, 0xffff),
    mt_rand(0, 0x0fff) | 0x4000,
    mt_rand(0, 0x3fff) | 0x8000,
    mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);

// Or use Ramsey UUID (recommended)
// composer require ramsey/uuid
use Ramsey\Uuid\Uuid;
$idempotencyKey = Uuid::uuid4()->toString();
// Generate UUID v4 in JavaScript (Node.js / Browser)
const idempotencyKey = crypto.randomUUID();

// Or use a simple fallback for older browsers
function generateUUID() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    const r = Math.random() * 16 | 0;
    const v = c === 'x' ? r : (r & 0x3 | 0x8);
    return v.toString(16);
  });
}
const idempotencyKey = generateUUID();
import uuid

# Generate UUID v4 in Python
idempotency_key = str(uuid.uuid4())

Usage Example

Include the generated key in your request headers:

Authorization: Bearer YOUR_ACCESS_TOKEN
Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000
Content-Type: application/json

Errors

Filter King uses conventional HTTP response codes to indicate the success or failure of an API request. In general:

  • Codes in the 2xx range indicate success.
  • Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a resource was not found, etc.).
  • Codes in the 5xx range indicate an error with Filter King's servers.

HTTP Status Code Summary

Status Code Description
200 OK Everything worked as expected.
201 Created The resource was successfully created.
400 Bad Request The request was unacceptable, often due to missing a required parameter.
401 Unauthorized No valid API key or access token provided.
403 Forbidden The API key doesn't have permissions to perform the request.
404 Not Found The requested resource doesn't exist.
422 Unprocessable The request was well-formed but contains semantic errors.
429 Too Many Requests Too many requests hit the API too quickly.
500 Server Error Something went wrong on Filter King's end.

Error Response Format

Errors are returned in JSON format with the following structure:

{
  "success": false,
  "message": "The requested resource was not found.",
  "errors": [
      {
          "field": "order_id",
          "message": "The selected order id is invalid."
      }
  ]
}

Rate Limiting

To ensure fair usage and system stability, the API implements rate limiting on requests.

Attribute Limit
Requests per minute 60 requests

When you exceed the rate limit, the API returns a 429 Too Many Requests status code.

Recommendation: Implement exponential backoff (retry with increasing delays) when encountering rate limit errors to handle temporary limits gracefully. If you need to extend rate limit please contact our support.

General Notes

Important conventions and standards used throughout the API:

Date & Time Format

All date and time fields are returned in UTC using the ISO 8601 format (YYYY-MM-DDTHH:MM:SS.ffffffZ).

Example: 2026-02-21T19:58:46.000000Z

Note: Always parse dates as UTC. The Z suffix indicates UTC timezone.

POST Issue an access token

Exchange client credentials for an OAuth2 access token.

POST /oauth/token

Parameters

Parameter Type Description
grant_type string Must be "client_credentials"
client_id string Your OAuth client ID
client_secret string Your OAuth client secret

Response

{
  "token_type": "Bearer",
  "expires_in": 3600,
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9..."
}

Token Validity: The access token is valid for 1 hour (3600 seconds). After expiration, you need to request a new token using the same endpoint.

GET Get partner information

Retrieve information about the authenticated partner account.

GET /api/v1/info
curl https://filterking.com/api/v1/info \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
<?php
$response = $client->get('https://filterking.com/api/v1/info', [
    'headers' => [
        'Authorization' => 'Bearer ' . $accessToken,
    ]
]);
$partner = json_decode($response->getBody(), true);
const response = await fetch('https://filterking.com/api/v1/info', {
  headers: {
    'Authorization': `Bearer ${accessToken}`
  }
});
const partner = await response.json();
headers = {
    'Authorization': f'Bearer {access_token}'
}

response = requests.get(
    'https://filterking.com/api/v1/info',
    headers=headers
)

partner = response.json()

Response

{
    "success": true,
    "data": {
        "app_name": "FK API",
        "environment": "production",
        "client_id": "your_client_id",
        "partner_name": "Filter King Partner",
        "partner_email": "[email protected]",
        "partner_phone": "123-456-7890",
        "api_status": "active"
    }
}

POST Get order quotes

Get order quotes including estimated shipping cost.

POST /api/v1/order/quotes
curl https://filterking.com/api/v1/order/quotes  \
  -X POST \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: your-unique-key-here" \
  -d '{
    "shipping_method": "fedex",
    "ship_to": {
        "zip": "12345"
    },
    "items": [
        {
            "parent_model": "FK12x12x1-M8",
            "quantity": 4
        },
        {
            "parent_model": "FK10x10x1A-M8",
            "quantity": 10
        }
    ]
}'
<?php
$client = new GuzzleHttp\Client();

$response = $client->post('https://filterking.com/api/v1/order/quotes', [
    'headers' => [
        'Authorization' => 'Bearer ' . $accessToken,
        'Idempotency-Key' => 'your-unique-key-here',
    ],
    'json' => [
      'shipping_method': 'fedex',
      'ship_to' => [
        'zip' => '12345'
      ],
      'items': [
        {
          'parent_model': 'FK12x12x1-M8',
          'quantity': 4
        },
        {
          'parent_model': 'FK10x10x1A-M8',
          'quantity': 10
        }
      ]
    ]
]);

$quotes = json_decode($response->getBody(), true);
const response = await fetch('https://filterking.com/api/v1/order/quotes', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${accessToken}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': 'your-unique-key-here',
  },
  body: JSON.stringify({
    'shipping_method': 'fedex',
    'ship_to': {
      'zip': '12345'
    },
    'items': [
      {
        'parent_model': 'FK12x12x1-M8',
        'quantity': 4
      },
      {
        'parent_model': 'FK10x10x1A-M8',
        'quantity': 10
      }
    ]
  })
});

const quotes = await response.json();
headers = {
    'Authorization': f'Bearer {access_token}',
    'Content-Type': 'application/json',
    'Idempotency-Key': 'your-unique-key-here'
}

data = {
    'shipping_method': 'fedex',
    'ship_to': {
      'zip': '12345'
    },
    'items': [
      {
        'parent_model': 'FK12x12x1-M8',
        'quantity': 4
      },
      {
        'parent_model': 'FK10x10x1A-M8',
        'quantity': 10
      }
    ]
}

response = requests.post(
    'https://filterking.com/api/v1/order/quotes',
    headers=headers,
    json=data
)

quotes = response.json()

Parameters

Parameter Type Description
shipping_method string Shipping carrier method: fedex or customer_pick_up. If customer_pick_up is passed, estimated_shipping_cost will be 0.
ship_to object
Shipping destination address (required when shipping_method is fedex)
ship_to Attributes
Attribute Type Description
zip string Destination ZIP/postal code (required when shipping_method is fedex)
items array
Array of filter items
items[] Attributes
Attribute Type Description
parent_model string Filter parent model in format: FK{width}x{height}x{thickness}-{merv} (e.g., FK12x12x1-M8)
quantity integer Number of units (minimum: 1)

Accepted MERV ratings: M8 (MERV 8), M11 (MERV 11), M13 (MERV 13), CO (Carbon)

Thickness: Only 0.5, 1, 2, or 4 inches are accepted.

Width and height measurements must use standard fractional increments. Accepted decimal values: .125 (1/8"), .25 (1/4"), .375 (3/8"), .5 (1/2"), .625 (5/8"), .75 (3/4"), or .875 (7/8").

Example: FK12.125x12.75x1-M8
For actual size filters, append A after thickness (e.g., FK12.125x12.75x1A-M8).

Filter Size Quick Reference

Common filter sizes and their corresponding parent model format:

Filter Size Parent Model (MERV 8) Parent Model (MERV 11)
20x20x1 FK20x20x1-M8 FK20x20x1-M11
16x25x1 FK16x25x1-M8 FK16x25x1-M11
14x25x2 FK14x25x2-M8 FK14x25x2-M11
12x12x1 FK12x12x1-M8 FK12x12x1-M11
18.25x23.5x1 FK18.25x23.5x1-M8 FK18.25x23.5x1-M11
15.375x24.875x1 FK15.375x24.875x1-M8 FK15.375x24.875x1-M11
14.25x20x1 FK14.25x20x1-M8 FK14.25x20x1-M11
12.125x12.75x1a (actual size) FK12.125x12.75x1A-M8 FK12.125x12.75x1A-M11
11.625x14.5x2a (actual size) FK11.625x14.5x2A-M8 FK11.625x14.5x2A-M11
10x10x4 FK10x10x4-M8 FK10x10x4-M11

Response

{
    "success": true,
    "data": {
        "shipping_method": "fedex",
        "ship_to": {
            "zip": "12345"
        },
        "items": [
            {
                "parent_model": "FK12x12x1-M8",
                "size": "12x12x1",
                "actual_size": "11.5 x 11.5 x .75",
                "quantity": 4,
                "unit_price": 5.98,
                "item_price": 23.92
            },
            {
                "parent_model": "FK10x10x1A-M8",
                "size": "10x10x1a",
                "actual_size": "10 x 10 x .75",
                "quantity": 10,
                "unit_price": 8.58,
                "item_price": 85.8
            }
        ],
        "total": {
            "amount": 82.72,
            "estimated_shipping_cost": 47.59,
            "currency": "USD"
        }
    }
}

POST Create order

Create a new order in the system.

POST /api/v1/orders
curl https://filterking.com/api/v1/orders \
  -X POST \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: your-unique-key-here" \
  -d '{
    "po_number": "ABC3015",
    "ship_to": {
        "name": "Test Name",
        "company": "Test company name",
        "phone": "1234567890",
        "address_line_1": "123 Main St",
        "address_line_2": "Apt 123",
        "city": "Anytown",
        "state": "NY",
        "zip": "12345",
        "country": "US"
    },
    "ship_from": {
        "name": "Filter King",
        "company": "Filter King LLC",
        "phone": "305-928-8910",
        "address_line_1": "7301 NW 36th Ct",
        "city": "Miami",
        "state": "FL",
        "zip": "33147",
        "country": "US"
    },
    "shipping_method": "fedex",
    "items": [
        {
            "parent_model": "FK10x10x1-M8",
            "quantity": 40
        },
        {
            "parent_model": "FK11.625x14.5x1A-M11",
            "quantity": 10
        }
    ]
}'
<?php
$response = $client->post('https://filterking.com/api/v1/orders', [
    "headers" => [
        "Authorization" => "Bearer " . $accessToken,
        "Idempotency-Key" => "your-unique-key-here",
    ],
    "json" => [
        "po_number": "ABC3015",
        "ship_to": {
            "name": "Test Name",
            "company": "Test company name",
            "phone": "2152343245",
            "address_line_1": "12300 Bermuda Rd",
            "city": "Henderson",
            "state": "NV",
            "zip": "89044",
            "country": "US"
        },
        "ship_from": {
            "name": "Filter King",
            "company": "Filter King LLC",
            "phone": "305-928-8910",
            "address_line_1": "7301 NW 36th Ct",
            "city": "Miami",
            "state": "FL",
            "zip": "33147",
            "country": "US"
        },
        "shipping_method": "fedex",
        "items": [
            {
                "parent_model": "FK10x10x1-M8",
                "quantity": 40
            },
            {
                "parent_model": "FK11.625x14.5x1A-M11",
                "quantity": 10
            }
        ]
    ]
]);

$order = json_decode($response->getBody(), true);
const response = await fetch('https://filterking.com/api/v1/orders', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${accessToken}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': 'your-unique-key-here',
  },
  body: JSON.stringify({
    "po_number": "ABC3015",
    "ship_to": {
      "name": "Test Name",
      "company": "Test company name",
      "phone": "2152343245",
      "address_line_1": "12300 Bermuda Rd",
      "city": "Henderson",
      "state": "NV",
      "zip": "89044",
      "country": "US"
    },
    "ship_from": {
      "name": "Filter King",
      "company": "Filter King LLC",
      "phone": "305-928-8910",
      "address_line_1": "7301 NW 36th Ct",
      "city": "Miami",
      "state": "FL",
      "zip": "33147",
      "country": "US"
    },
    "shipping_method": "fedex",
    "items": [
      {
        "parent_model": "FK10x10x1-M8",
        "quantity": 40
      },
      {
        "parent_model": "FK11.625x14.5x1A-M11",
        "quantity": 10
      }
    ]
  })
});

const order = await response.json();
headers = {
    'Authorization': f'Bearer {access_token}',
    'Content-Type': 'application/json',
    'Idempotency-Key': 'your-unique-key-here'
}

data = {
    "po_number": "ABC3015",
    "ship_to": {
      "name": "Test Name",
      "company": "Test company name",
      "phone": "2152343245",
      "address_line_1": "12300 Bermuda Rd",
      "city": "Henderson",
      "state": "NV",
      "zip": "89044",
      "country": "US"
    },
    "ship_from": {
      "name": "Filter King",
      "company": "Filter King LLC",
      "phone": "305-928-8910",
      "address_line_1": "7301 NW 36th Ct",
      "city": "Miami",
      "state": "FL",
      "zip": "33147",
      "country": "US"
    },
    "shipping_method": "fedex",
    "items": [
      {
        "parent_model": "FK10x10x1-M8",
        "quantity": 40
      },
      {
        "parent_model": "FK11.625x14.5x1A-M11",
        "quantity": 10
      }
    ]
}

response = requests.post(
    'https://filterking.com/api/v1/orders',
    headers=headers,
    json=data
)

order = response.json()

Parameters

Parameter Type Description
po_number string Purchase order number (optional, max: 30 characters)
ship_to object
Shipping destination address (required)
ship_to Attributes
Attribute Type Description
name string Recipient name (max: 100 characters)
company string Company name (max: 100 characters)
phone string Phone number (US format)
address_line_1 string Street address (required)
address_line_2 string Apartment, suite, unit, etc.
city string City name (required, max: 100 characters)
state string State code (required, 2-letter ISO code, e.g., NY, FL)
zip string ZIP/postal code (required)
country string Country code (required, 2-letter ISO code, e.g., US)
ship_from object
Shipping origin address (optional, default is FilterKing).
ship_from Attributes
Attribute Type Description
name string Sender name (max: 100 characters)
company string Company name (max: 100 characters)
phone string Phone number (US format)
address_line_1 string Street address (required if provided)
address_line_2 string Apartment, suite, unit, etc.
city string City name (required if provided)
state string State code (required if provided, 2-letter ISO code, e.g., NY, FL)
zip string ZIP/postal code (required if provided)
country string Country code (required if provided, 2-letter ISO code, e.g., US)
shipping_method string Shipping carrier method: fedex or customer_pick_up
items array
Array of filter items (required, min: 1, max: 100)
items[] Attributes
Attribute Type Description
parent_model string Filter parent model in format: FK{width}x{height}x{thickness}-{merv} (e.g., FK12x12x1-M8)
quantity integer Number of units (minimum: 1)

Accepted MERV ratings: M8 (MERV 8), M11 (MERV 11), M13 (MERV 13), CO (Carbon)

Thickness: Only 0.5, 1, 2, or 4 inches are accepted.

Width and height measurements must use standard fractional increments. Accepted decimal values: .125 (1/8"), .25 (1/4"), .375 (3/8"), .5 (1/2"), .625 (5/8"), .75 (3/4"), or .875 (7/8").

Example: FK12.125x12.75x1-M8
For actual size filters, append A after thickness (e.g., FK12.125x12.75x1A-M8).

Response

{
    "success": true,
    "data": {
        "order": {
            "order_id": 12345678,
            "po_number": "ABC3015",
            "type": "wholesale",
            "status": "pending",
            "created_at": "2026-02-21T19:58:46.000000Z",
            "items": [
                {
                    "parent_model": "FK10x10x1-M8",
                    "size": "10x10x1",
                    "actual_size": "9.5 x 9.5 x .75",
                    "quantity": 40,
                    "unit_price": 2.84,
                    "item_price": 313.6
                },
                {
                    "parent_model": "FK11.625x14.5x1A-M11",
                    "size": "11.625x14.5x1a",
                    "actual_size": "11.625 x 14.5 x 0.75",
                    "quantity": 10,
                    "unit_price": 10.41,
                    "item_price": 104.1
                }
            ],
            "total": {
                "amount": 417.7,
                "currency": "USD"
            }
        }
    },
    "message": "Order created successfully"
}

GET List orders

Retrieve a paginated list of orders with optional filters.

GET /api/v1/orders

Request Examples

# Basic request - get all orders from last 24 hours
curl "https://filterking.com/api/v1/orders" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

# With pagination and filters
curl "https://filterking.com/api/v1/orders?page=1&per_page=50&status=fulfilled" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

# Get orders created after a specific date
curl "https://filterking.com/api/v1/orders?created_after=2026-02-21T19:58:46.000000Z" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

# With sorting
curl "https://filterking.com/api/v1/orders?sort_by=created_at&sort_direction=desc" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
<?php
// Basic request
$response = $client->get('https://filterking.com/api/v1/orders', [
    'headers' => [
        'Authorization' => 'Bearer ' . $accessToken,
    ]
]);

// With query parameters
$response = $client->get('https://filterking.com/api/v1/orders', [
    'headers' => [
        'Authorization' => 'Bearer ' . $accessToken,
    ],
    'query' => [
        'page' => 1,
        'per_page' => 50,
        'status' => 'fulfilled',
        'created_after' => '2026-02-21T19:58:46.000000Z',
        'sort_by' => 'created_at',
        'sort_direction' => 'desc'
    ]
]);

$orders = json_decode($response->getBody(), true);
// Basic request
const response = await fetch('https://filterking.com/api/v1/orders', {
  headers: {
    'Authorization': `Bearer ${accessToken}`
  }
});

// With query parameters
const params = new URLSearchParams({
  page: 1,
  per_page: 50,
  status: 'fulfilled',
  created_after: '2026-02-21T19:58:46.000000Z',
  sort_by: 'created_at',
  sort_direction: 'desc'
});

const response = await fetch(
  `https://filterking.com/api/v1/orders?${params}`,
  {
    headers: {
      'Authorization': `Bearer ${accessToken}`
    }
  }
);

const orders = await response.json();
headers = {
    'Authorization': f'Bearer {access_token}'
}

# Basic request
response = requests.get(
    'https://filterking.com/api/v1/orders',
    headers=headers
)

# With query parameters
params = {
    'page': 1,
    'per_page': 50,
    'status': 'fulfilled',
    'created_after': '2026-02-21T19:58:46.000000Z',
    'sort_by': 'created_at',
    'sort_direction': 'desc'
}

response = requests.get(
    'https://filterking.com/api/v1/orders',
    headers=headers,
    params=params
)

orders = response.json()

Query Parameters

Parameter Type Description
page integer Page number for pagination (default: 1, minimum: 1)
per_page integer Number of items per page (default: 15, min: 1, max: 100)
status string Filter by order status (e.g., pending, unfulfilled, fulfilled, cancelled)
created_after string Filter orders created after this ISO 8601 date (UTC). If not provided, defaults to last 24 hours.
updated_after string Filter orders updated after this ISO 8601 date (UTC).
sort_by string Field to sort by (default: created_at, options: created_at, updated_at, amount, id)
sort_direction string Sort direction (default: desc, options: asc, desc)

Default Behavior: If no date filters (created_after or updated_after) are provided, the API returns orders from the last 24 hours. Use these parameters to retrieve older orders.

Response

{
    "success": true,
    "data": {
        "orders": [
            {
                "order_id": 12345678,
                "po_number": "ABC3015",
                "type": "wholesale",
                "status": "fulfilled",
                "payment_status": "paid",
                "ship_to": {
                    "name": "Test Name",
                    "company": "Test company name",
                    "phone": "1234567890",
                    "address_line_1": "123 Main St",
                    "address_line_2": "Apt 123",
                    "city": "Anytown",
                    "state": "NY",
                    "zip": "12345",
                    "country": "US"
                },
                "ship_from": {
                    "name": "FILTER KING",
                    "company": "FILTER KING LLC",
                    "phone": "877-570-9755",
                    "address_line_1": "7301 NW 36TH COURT",
                    "address_line_2": null,
                    "city": "MIAMI",
                    "state": "FL",
                    "zip": "33147",
                    "country": "US"
                },
                "shipping_method": "fedex",
                "customer": {
                    "name": "Test Customer Name",
                    "email": "[email protected]",
                    "phone": "123-456-7890"
                },
                "items": [
                    {
                        "parent_model": "FK20x20x1-M8",
                        "size": "20x20x1",
                        "actual_size": "19.5 x 19.5 x .75",
                        "quantity": 35,
                        "unit_price": 9.42,
                        "item_price": 329.7
                    }
                ],
                "shipments": [
                    {
                        "carrier": "fedex",
                        "tracking_number": "fedex_tracking_number",
                        "date_shipped": "2026-02-21T19:58:46.000000Z",
                        "parent_model": "FK20x20x1-M8",
                        "box_id": "12345678-1-1",
                        "items_per_box": 18
                    },
                    {
                        "carrier": "fedex",
                        "tracking_number": "fedex_tracking_number",
                        "date_shipped": "2026-02-21T19:58:46.000000Z",
                        "parent_model": "FK20x20x1-M8",
                        "box_id": "12345678-1-2",
                        "items_per_box": 17
                    }
                ],
                "total": {
                    "amount": 329.7,
                    "shipping_cost": 14.68,
                    "currency": "USD"
                },
                "fulfilled_at": "2026-02-21T19:58:46.000000Z",
                "created_at": "2026-02-21T19:58:46.000000Z",
                "updated_at": "2026-02-21T19:58:46.000000Z"
            }
        ],
        "meta": {
            "current_page": 1,
            "per_page": 15,
            "total": 42,
            "last_page": 3,
            "from": 1,
            "to": 15
        },
        "links": {
            "first": "https://filterking.com/api/v1/orders?page=1",
            "last": "https://filterking.com/api/v1/orders?page=3",
            "prev": null,
            "next": "https://filterking.com/api/v1/orders?page=2"
        }
    }
}

GET Get order

Retrieve details of a specific order.

GET /api/v1/orders/{id}

URL Parameters

Parameter Type Description
id string The order ID

Request

curl https://filterking.com/api/v1/orders/12345678 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
<?php
$response = $client->get('https://filterking.com/api/v1/orders/12345678', [
    'headers' => [
        'Authorization' => 'Bearer ' . $accessToken,
    ]
]);

$order = json_decode($response->getBody(), true);
const response = await fetch('https://filterking.com/api/v1/orders/12345678', {
  headers: {
    'Authorization': `Bearer ${accessToken}`
  }
});

const order = await response.json();
headers = {
    'Authorization': f'Bearer {access_token}'
}

response = requests.get(
    'https://filterking.com/api/v1/orders/12345678',
    headers=headers
)

order = response.json()

Response

{
    "success": true,
    "data": {
        "order": {
            "order_id": 12345678,
            "po_number": "ABC3015",
            "type": "wholesale",
            "status": "fulfilled",
            "payment_status": "paid",
            "ship_to": {
                "name": "Test Name",
                "company": "Test company name",
                "phone": "1234567890",
                "address_line_1": "123 Main St",
                "address_line_2": "Apt 123",
                "city": "Anytown",
                "state": "NY",
                "zip": "12345",
                "country": "US"
            },
            "ship_from": {
                "name": "FILTER KING",
                "company": "FILTER KING LLC",
                "phone": "877-570-9755",
                "address_line_1": "7301 NW 36TH COURT",
                "address_line_2": null,
                "city": "MIAMI",
                "state": "FL",
                "zip": "33147",
                "country": "US"
            },
            "shipping_method": "fedex",
            "customer": {
                "name": "Test Customer Name",
                "email": "[email protected]",
                "phone": "123-456-7890"
            },
            "items": [
                {
                    "parent_model": "FK20x20x1-M8",
                    "size": "20x20x1",
                    "actual_size": "19.5 x 19.5 x .75",
                    "quantity": 35,
                    "unit_price": 9.42,
                    "item_price": 329.7
                }
            ],
            "shipments": [
                {
                    "carrier": "fedex",
                    "tracking_number": "fedex_tracking_number",
                    "date_shipped": "2026-02-21T19:58:46.000000Z",
                    "parent_model": "FK20x20x1-M8",
                    "box_id": "12345678-1-1",
                    "items_per_box": 18
                },
                {
                    "carrier": "fedex",
                    "tracking_number": "fedex_tracking_number",
                    "date_shipped": "2026-02-21T19:58:46.000000Z",
                    "parent_model": "FK20x20x1-M8",
                    "box_id": "12345678-1-2",
                    "items_per_box": 17
                }
            ],
            "total": {
                "amount": 329.7,
                "shipping_cost": 14.68,
                "currency": "USD"
            },
            "fulfilled_at": "2026-02-21T19:58:46.000000Z",
            "created_at": "2026-02-21T19:58:46.000000Z",
            "updated_at": "2026-02-21T19:58:46.000000Z",
        }
    }
}

GET Get order tracking

Retrieve details of a specific order shipment tracking.

GET /api/v1/orders/{id}/tracking

URL Parameters

Parameter Type Description
id string The order ID

Request

curl https://filterking.com/api/v1/orders/12345678/tracking \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
<?php
$response = $client->get('https://filterking.com/api/v1/orders/12345678/tracking', [
    'headers' => [
        'Authorization' => 'Bearer ' . $accessToken,
    ]
]);

$order = json_decode($response->getBody(), true);
const response = await fetch('https://filterking.com/api/v1/orders/12345678/tracking', {
  headers: {
    'Authorization': `Bearer ${accessToken}`
  }
});

const order = await response.json();
headers = {
    'Authorization': f'Bearer {access_token}'
}

response = requests.get(
    'https://filterking.com/api/v1/orders/12345678/tracking',
    headers=headers
)

order = response.json()

Response

{
    "success": true,
    "data": {
        "order": {
            "order_id": 12345678,
            "type": "wholesale",
            "status": "fulfilled",
            "customer": {
                "name": "Test Customer Name",
                "email": "[email protected]",
                "phone": "123-456-7890"
            },
            "shipments": [
                {
                    "carrier": "fedex",
                    "tracking_number": "fedex_tracking_number",
                    "date_shipped": "2026-02-21T19:58:46.000000Z",
                    "parent_model": "FK20x20x1-M8",
                    "box_id": "12345678-1-1",
                    "items_per_box": 18
                },
                {
                    "carrier": "fedex",
                    "tracking_number": "fedex_tracking_number",
                    "date_shipped": "2026-02-21T19:58:46.000000Z",
                    "parent_model": "FK20x20x1-M8",
                    "box_id": "12345678-1-2",
                    "items_per_box": 17
                }
            ],
            "total": {
                "amount": 329.7,
                "shipping_cost": 14.68,
                "currency": "USD"
            },
            "created_at": "2026-02-21T19:58:46.000000Z",
            "updated_at": "2026-02-21T19:58:46.000000Z",
        }
    }
}

POST Build custom filter

Build your custom filter and get parent model.

POST /api/v1/build-custom-filter
curl https://filterking.com/api/v1/build-custom-filter  \
  -X POST \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: your-unique-key-here" \
  -d '{
    "items": [
      {
        "size": "11.625x14.5x2a",
        "merv": "M11",
        "quantity": 2
      }
    ]
}'
<?php
$client = new GuzzleHttp\Client();

$response = $client->post('https://filterking.com/api/v1/build-custom-filter', [
    'headers' => [
        'Authorization' => 'Bearer ' . $accessToken,
        'Idempotency-Key' => 'your-unique-key-here',
    ],
    'json' => [
        'items' => [
            [
                'size' => '11.625x14.5x2a',
                'merv' => 'M11',
                'quantity' => 2
            ]
        ]
    ]
]);

$result = json_decode($response->getBody(), true);
const response = await fetch('https://filterking.com/api/v1/build-custom-filter', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${accessToken}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': 'your-unique-key-here',
  },
  body: JSON.stringify({
    "items": [
      {
        "size": "11.625x14.5x2a",
        "merv": "M11",
        "quantity": 2
      }
    ]
  })
});

const result = await response.json();
headers = {
    'Authorization': f'Bearer {access_token}',
    'Content-Type': 'application/json',
    'Idempotency-Key': 'your-unique-key-here'
}

data = {
    "items": [
      {
        "size": "11.625x14.5x2a",
        "merv": "M11",
        "quantity": 2
      }
    ]
}

response = requests.post(
    'https://filterking.com/api/v1/build-custom-filter',
    headers=headers,
    json=data
)

result = response.json()

Parameters

Parameter Type Description
items array
Array of filter items (required, Minimum: 1 and Maximum: 10 items)
items[] Attributes
Attribute Type Description
size string Filter size in format: {width}x{height}x{thickness} (e.g., 11.625x14.5x1). With or without ending "a" for actual size (e.g., 11.625x14.5x1a). Required.
merv string MERV rating: M8, M11, M13, or CO. Required.
quantity integer Number of units (minimum: 1, default: 1). Required.

Accepted MERV ratings: M8 (MERV 8), M11 (MERV 11), M13 (MERV 13), CO (Carbon)

Size format: {width}x{height}x{thickness} (e.g., 11.625x14.5x1)

Thickness: Only 0.5, 1, 2, or 4 inches are accepted.

Width and height measurements must use standard fractional increments. Accepted decimal values: .125 (1/8"), .25 (1/4"), .375 (3/8"), .5 (1/2"), .625 (5/8"), .75 (3/4"), or .875 (7/8").

Response

{
    "success": true,
    "data": {
        "items": [
            {
                "parent_model": "FK11.625x14.5x2A-M11",
                "size": "11.625x14.5x2a",
                "actual_size": "11.625 x 14.5 x 1.75",
                "quantity": 2,
                "unit_price": 12.48,
                "item_price": 24.96
            }
        ]
    }
}