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.
# 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:
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)
|
||||||||||||
items |
array |
Array of filter items
|
||||||||||||
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_from |
object |
Shipping origin address (optional, default is FilterKing).
|
|||||||||||||||||||||||||||||||||
shipping_method |
string |
Shipping carrier method: fedex or customer_pick_up |
|||||||||||||||||||||||||||||||||
items |
array |
Array of filter items (required, min: 1, max: 100)
|
|||||||||||||||||||||||||||||||||
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)
|
|||||||||||||||
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
}
]
}
}