SunFrog Solutions API

Build powerful integrations with the SunFrog platform. Our RESTful API allows you to create, manage and access your products, orders, and more.

Environment

The SunFrog Solutions API supports both a staging environment for testing and a live environment for production use. Use the staging environment to validate your integration before going live.

Staging Environment

Testing

Test calls can be made on our test environment, using the following URL:

Base URL
https://devapi.sunfrogsolutions.com/auth/?user=myusername&key=myapikey

Live Environment

Production

Live calls should be made on our live API server:

Base URL
https://api.sunfrogsolutions.com/auth/?user=myusername&key=myapikey
Note: LIVE and Staging API logs can be found in the SunFrog Solutions Manager portal as well.

Authentication

All API requests must be made over HTTPS and with authentication in the request URL as a query parameter. You can access your API keys in the SunFrog Solutions Manager or by contacting your account manager.

Note: Keep your API key secure. Do not expose it in client-side code or public repositories. If you need to rotate your API credentials, you can do so in the SunFrog Solutions Manager.
Query Parameter
https://api.sunfrogsolutions.com/auth/?user=myusername&key=myapikey
Example Request
curl -X GET "https://api.sunfrogsolutions.com/auth/?user=myusername&key=myapikey"
const user = 'myusername';
const key  = 'myapikey';

const response = await fetch(
  `https://api.sunfrogsolutions.com/auth/?user=${user}&key=${key}`
);

const data = await response.json();
console.log(data);
import requests

params = {
    'user': 'myusername',
    'key': 'myapikey'
}

response = requests.get(
    'https://api.sunfrogsolutions.com/auth/',
    params=params
)

data = response.json()
print(data)
using var client = new HttpClient();

var user = "myusername";
var key  = "myapikey";

var response = await client.GetAsync(
    $"https://api.sunfrogsolutions.com/auth/?user={user}&key={key}"
);

var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);

Error Handling

The API uses standard HTTP status codes to indicate the success or failure of requests. Error responses include a JSON body with details.

Status Code Meaning Description
200 OK Request succeeded
201 Created Resource successfully created
400 Bad Request Invalid request parameters or body
401 Unauthorized Missing or invalid API key
403 Forbidden Valid API key but insufficient permissions
404 Not Found The requested resource does not exist
429 Too Many Requests Rate limit exceeded
500 Server Error Something went wrong on our end
Error Response Format
JSON
{
    "TRACE": 999,
    "MESSAGE": "Invalid Authentication String ",
    "RETURNMESSAGE": "Invalid Authentication String ",
    "EXECUTIONTIME": 14,
    "mode": "test",
    "HASERRORS": true,
    "CONTEXT": 132
}

Order Statuses

Reference of all possible order status values returned by the API when querying orders.

Order Statuses
Status
Deleted
Hold
Printed
Refund
Shipped
Waiting
Order Item Statuses
Status
Hold
On Order
Out of Stock
Printed
In-Progress
Refunded
Shipped
Waiting
Cubed
Caught
Produced
Packaging
Deleted
Expedite

Shipping Methods

Available shipping methods and their identifiers. Use the methodName value when creating orders via the API. Weight limits are in ounces.

DHL
Method Name Display Name Min Weight Max Weight International
BEX BPM Expedited 0.00 oz 2464.00 oz No
BGN BPM Ground 0.00 oz 2464.00 oz No
EXP Parcel Expedited 0.00 oz 2464.00 oz No
EXP Parcel Plus Expedited 0.00 oz 2464.00 oz No
GND Parcel Ground 0.00 oz 2464.00 oz No
GND Parcel Plus Ground 0.00 oz 2464.00 oz No
MAX Parcel Expedited Max 0.00 oz 2464.00 oz No
PID Parcel International Direct Standard 0.00 oz 2464.00 oz Yes
PIY Parcel International Direct Priority 0.00 oz 2464.00 oz Yes
PKY Packet International 0.00 oz 2464.00 oz Yes
PLT Parcel International Direct 0.00 oz 2464.00 oz Yes
PLY Parcel International Standard 0.00 oz 2464.00 oz Yes
FedEx
Method Name Display Name Min Weight Max Weight International
FedEx_2_Day FedEx 2 Day 0.00 oz 2400.00 oz No
FedEx_2_Day_AM FedEx 2 Day AM 0.00 oz 2400.00 oz No
FedEx_Express_Saver FedEx Express Saver 0.00 oz 2400.00 oz No
FedEx_Ground FedEx Ground 0.00 oz 2400.00 oz No
FedEx_International_Connect_Plus FedEx International Connect Plus 0.00 oz 1120.00 oz Yes
First_Overnight First Overnight 0.00 oz 2400.00 oz No
Ground_Home_Delivery Ground Home Delivery 0.00 oz 2400.00 oz No
International_Economy International Economy 0.00 oz 2400.00 oz Yes
International_First International First 0.00 oz 2400.00 oz Yes
International_Priority International Priority 0.00 oz 2400.00 oz Yes
One Rate FedEx One Rate 0.00 oz 1200.00 oz Yes
Priority_Overnight Priority Overnight 0.00 oz 2400.00 oz No
Smart_Post Smart Post 0.00 oz 1120.00 oz No
Standard_Overnight Standard Overnight 0.00 oz 2400.00 oz No
UPS
Method Name Display Name Min Weight Max Weight International
2nd Day Air 2nd Day Air 0.00 oz 99999.00 oz No
2nd Day Air AM 2nd Day Air AM 0.00 oz 99999.00 oz No
3 Day Select 3 Day Select 0.00 oz 99999.00 oz No
Economy Mail Innovations Economy Mail Innovations 1.00 oz 70.40 oz No
Expedited Mail Innovations Expedited Mail Innovations 1.00 oz 16.00 oz Yes
First Class Mail First Class Mail 0.00 oz 99999.00 oz No
Flats Flats 0.00 oz 70.40 oz No
Ground Ground 0.00 oz 99999.00 oz No
Next Day Air Next Day Air 0.00 oz 99999.00 oz No
Next Day Air Early Next Day Air Early 0.00 oz 99999.00 oz No
Next Day Air Saver Next Day Air Saver 0.00 oz 99999.00 oz No
Priority Mail Priority Mail 0.00 oz 99999.00 oz No
Priority Mail Innovations Priority Mail Innovations 14.40 oz 1120.00 oz No
Standard International Standard International 0.00 oz 99999.00 oz Yes
SurePost Heavy SurePost Heavy 0.00 oz 2464.00 oz No
SurePost Light SurePost Light 0.00 oz 16.00 oz No
Worldwide Expedited Worldwide Expedited 0.00 oz 99999.00 oz Yes
Worldwide Express Worldwide Express 0.00 oz 99999.00 oz Yes
Worldwide Express Frieght Worldwide Express Frieght 0.00 oz 99999.00 oz Yes
Worldwide Express Plus Worldwide Express Plus 0.00 oz 99999.00 oz Yes
Worldwide Saver Worldwide Saver 0.00 oz 99999.00 oz Yes
USPS
Method Name Display Name Min Weight Max Weight International
First Class First Class 0.00 oz 13.00 oz Yes
Priority Priority 0.00 oz 1120.00 oz Yes
USPS_GROUND_ADVANTAGE Ground Advantage 0.00 oz 0.00 oz No

Get Product (POD)

Retrieve your print-on-demand product listings. Returns all products by default, or a single product when a publicArtId is provided.

GET /product/?user={user}&key={key}

Returns a list of all POD products associated with your account. To retrieve a specific product, include the optional publicArtId query parameter.

Query Parameters
Parameter Type Required Description
user string Required Your API username
key string Required Your API key
publicArtId integer Optional Return a single product by its public art ID instead of the full list
Response Fields
Field Type Description
executionTime integer Server-side execution time in milliseconds
mode string API mode — live or test
productlist[] array Array of product objects
productType string The product type — pod for print-on-demand
MockupID integer Unique identifier for the product mockup
mockupImage string URL for the product mockup image
title string Product display title
description string Product description text
publicArtId integer Unique public art identifier — use this to fetch a single product
Example: List All Products
Request
curl -X GET "https://api.sunfrogsolutions.com/product/?user=myusername&key=myapikey"
JSON — 200 OK
{
  "executionTime": 19,
  "mode": "live",
  "productlist": [
    {
      "productType": "pod",
      "MockupID": 123456001,
      "mockupImage": "https://ao.sunfrog.com/123456/100000001/123456-1-100000001-26060201061853.jpg",
      "description": "A sample product description",
      "title": "SunFrog Classic Black Tee",
      "publicArtId": 100000001
    },
    {
      "productType": "pod",
      "MockupID": 123456002,
      "mockupImage": "https://ao.sunfrog.com/123456/100000002/123456-1-100000002-260602110635655.jpg",
      "description": "Another sample product",
      "title": "SunFrog Logo Hoodie",
      "publicArtId": 100000002
    },
    {
      "productType": "pod",
      "MockupID": 123456003,
      "mockupImage": "https://ao.sunfrog.com/123456/100000003/123456-1-100000003-260529020526903.jpg",
      "description": "8 oz.(US) 13.3 oz.(CA), 50/50 preshrunk cotton/polyester...",
      "title": "SunFrog Crewneck Sweatshirt",
      "publicArtId": 100000003
    }
  ]
}
Example: Get Single Product
Request
curl -X GET "https://api.sunfrogsolutions.com/product/?user=myusername&key=myapikey&publicArtId=100000001"
JSON — 200 OK
{
  "executionTime": 61,
  "mode": "live",
  "productlist": [
    {
      "productType": "pod",
      "MockupID": 123456001,
      "mockupImage": "https://ao.sunfrog.com/123456/100000001/123456-1-100000001-26060201061853.jpg",
      "description": "A sample product description",
      "title": "SunFrog Classic Black Tee",
      "publicArtId": 100000001
    }
  ]
}
Tip: When a publicArtId is provided, the response productlist array contains only the single matching product.

Create Product (POD)

Create a new print-on-demand product listing. The response includes pricing details for each available size variant.

POST /product/?user={user}&key={key}

Creates a new POD product. Send a JSON body with product details and art file URLs. The response returns pricing for all available size variants.

Request Body
Parameter Type Required Description
productTitle string Required Product display title
productType string Required Product type — POD (print-on-demand) or PS
retailPrice numeric Required Retail price in USD
productStyleId numeric Required Product style ID (e.g. 8 for a basic tee)
defaultColor string / numeric Required Default garment color — name (e.g. Black) or color ID
art array Required Array of art objects (see Art Fields below)
productDescription string Optional Product description text
designSku string Optional User-defined SKU for the design
GTIN numeric Optional Global Trade Item Number — replaces productStyleId, designSku, and defaultColor
mfgSku string Optional Manufacturer SKU — in place of productStyleId (e.g. 5000, 3001CVC)
Art Object Fields
Field Type Description
artfile string (URL) URL to the art/design file
mockupFile string (URL) URL to the product mockup image
productionApplicationTypeId numeric Production application type identifier
productionApplicationLocationId numeric Production application location identifier
colorCount numeric Number of colors in the art (use 999 for full color)
Example Request
JSON Body
{
  "productDescription": "A Product description",
  "productType": "POD",
  "defaultColor": "Black",
  "productTitle": "A Basic Black T-Shirt",
  "art": [
    {
      "colorCount": 999,
      "mockupFile": "https://d2yrwu03yq0f9f.cloudfront.net/mp/123456/m_123456-front-200131020141651.jpg",
      "productionApplicationTypeId": 1,
      "productionApplicationLocationId": 1,
      "artfile": "https://d2yrwu03yq0f9f.cloudfront.net/mp/123456/m_123456-front-200131020141651.jpg"
    }
  ],
  "retailPrice": 19,
  "productStyleId": 8,
  "designSku": "MySku1234"
}
Response

The response includes a pricing array with an entry for each available size variant. Below is a truncated example showing 2 of 8 size entries.

Response Fields
Field Type Description
hasErrors boolean Whether the request encountered errors
errorMsg string Error message (empty on success)
publicArtId integer The newly created product's public art ID
executionTime integer Server-side execution time in milliseconds
mode string API mode — live or test
pricing[] array Array of pricing objects per size variant
Pricing Object Fields
Field Type Description
altSizeName string Size label (e.g. S, M, L, XL)
sizeId integer Internal size identifier
costGarment decimal Garment cost for this size
costProductionTotal decimal Total production cost (printing)
costTotal decimal Total cost (garment + production)
weight decimal Weight of the product in ounces
mockupId integer Mockup identifier
mockupGroupId integer Mockup group identifier (matches publicArtId)
status string Current status (e.g. ArtQueue)
billingItemAddons string (JSON) JSON string of available add-on options and costs
JSON — 200 OK (truncated)
{
  "hasError": "false",
  "trace": "4",
  "pricing": [
    {
      "proofImageDir": "mp/123456/",
      "mockupId": 123456001,
      "billingItemAddons": "[...]",
      "shipGround": 0,
      "mockupGroupId": 100000010,
      "sizeId": 2,
      "costGarment": 3.46,
      "free": 0,
      "costTotal": 10.96,
      "status": "ArtQueue",
      "invoiceNotes": "[]",
      "proofImage": "123456-1-100000010-260609110635441.jpg",
      "altSizeName": "S",
      "costPrintBack": 0,
      "costPrintFront": 0,
      "colorId": 20,
      "costProductionTotal": 7.5,
      "mockupTypeId": 8,
      "weight": 5.6,
      "byoaTemplateId": 0
    },
    {
      "proofImageDir": "mp/123456/",
      "mockupId": 123456001,
      "billingItemAddons": "[...]",
      "shipGround": 0,
      "mockupGroupId": 100000010,
      "sizeId": 3,
      "costGarment": 2.53,
      "free": 0,
      "costTotal": 10.03,
      "status": "ArtQueue",
      "invoiceNotes": "[]",
      "proofImage": "123456-1-100000010-260609110635441.jpg",
      "altSizeName": "M",
      "costPrintBack": 0,
      "costPrintFront": 0,
      "colorId": 20,
      "costProductionTotal": 7.5,
      "mockupTypeId": 8,
      "weight": 6.6,
      "byoaTemplateId": 0
    }
  ],
  "errorMsg": "",
  "executionTime": 2093,
  "mode": "live",
  "publicArtId": 100000010,
  "hasErrors": false
}
Note: The pricing array contains one entry per available size (S through XXXXXL). The example above is truncated — a full response typically includes 8 size variants.

Get Product (3PL)

Retrieve your third-party logistics product listings. Returns a paginated list of all 3PL products by default, or detailed information for a single product when a publicTypeId is provided.

GET /3pl/?user={user}&key={key}

Returns 3PL product data. Without a publicTypeId, returns a paginated summary list. With a publicTypeId, returns full product details including colors, sizes, pricing, and inventory.

Query Parameters
Parameter Type Required Description
user string Required Your API username
key string Required Your API key
publicTypeId integer Optional Return a single product with full details (colors, sizes, pricing, inventory)
Example: List All 3PL Products
Request
curl -X GET "https://api.sunfrogsolutions.com/3pl/?user=myusername&key=myapikey"
List Response Fields
Field Type Description
PRODUCTS[] array Array of product summary objects
publicTypeId integer Unique 3PL product identifier
productTitle string Product display title
productSKU string Product SKU
manufacturer string Manufacturer name
productType integer Product type identifier
PAGINATION object Contains perPage, totalPages, totalProducts, currentPage
JSON — 200 OK (truncated)
{
  "TRACE": 0,
  "LASTENDPOINT": "3PL",
  "PRODUCTS": [
    {
      "productDescription": "",
      "productType": 1,
      "publicTypeId": 123456,
      "productTitle": "SunFrog Premium Tee",
      "productSKU": "SF-TEE-001",
      "manufacturer": "SunFrog"
    },
    {
      "productDescription": "",
      "productType": 1,
      "publicTypeId": 123457,
      "productTitle": "SunFrog Logo Cap",
      "productSKU": "SF-CAP-001",
      "manufacturer": "SunFrog"
    }
  ],
  "EXECUTIONTIME": 89,
  "mode": "test",
  "PAGINATION": {
    "perPage": 50,
    "totalPages": 1,
    "totalProducts": 8,
    "currentPage": 1
  },
  "HASERRORS": false
}
Example: Get Single 3PL Product
Request
curl -X GET "https://api.sunfrogsolutions.com/3pl/?user=myusername&key=myapikey&publicTypeId=123457"
Single Product Response Fields
Field Type Description
PRODUCT object Full product detail object
PRODUCTTITLE string Product display title
PRODUCTSKU string Product SKU
PRODUCTDESCRIPTION string Product description text
PUBLICTYPEID integer Unique 3PL product identifier
MANUFACTURER string Manufacturer name
COSTRETAIL numeric Retail cost
COSTWHOLESALE numeric Wholesale cost
TAGS[] array Array of tag objects with value field
COLORS[] array Array of color variants (see Color/Size fields below)
Color & Size Fields
Field Type Description
colorName string Color display name
colorId integer Internal color identifier
hexCode string CSS hex color code (e.g. #000000)
sizes[] array Array of size objects for this color
sizeName string Size label (e.g. XS, S, M, L)
sizeId integer Internal size identifier
cost numeric Cost for this color/size variant
msrp numeric Manufacturer's suggested retail price
stockQty integer Current stock quantity on hand
orderedQty integer Quantity currently on order
gtin string Global Trade Item Number for this variant
upc string Universal Product Code for this variant
JSON — 200 OK (truncated to 1 color)
{
  "TRACE": 0,
  "LASTENDPOINT": "3PL",
  "PRODUCT": {
    "PRODUCTDESCRIPTION": "",
    "PRODUCTTYPE": 1,
    "COSTWHOLESALE": 25,
    "COLORS": [
      {
        "sizes": [
          {
            "msrp": 60,
            "sizeName": "XS",
            "cost": 50,
            "gtin": "0001",
            "orderedQty": 0,
            "upc": "1001",
            "sizeId": 1,
            "stockQty": 0
          },
          {
            "msrp": 60,
            "sizeName": "S",
            "cost": 50,
            "gtin": "0002",
            "orderedQty": 0,
            "upc": "1002",
            "sizeId": 2,
            "stockQty": 0
          },
          {
            "msrp": 60,
            "sizeName": "M",
            "cost": 50,
            "gtin": "0003",
            "orderedQty": 0,
            "upc": "1003",
            "sizeId": 3,
            "stockQty": 0
          },
          {
            "msrp": 60,
            "sizeName": "L",
            "cost": 50,
            "gtin": "0004",
            "orderedQty": 0,
            "upc": "1004",
            "sizeId": 4,
            "stockQty": 0
          }
        ],
        "colorName": "Black",
        "colorId": 20,
        "hexCode": "#000000"
      }
    ],
    "PUBLICTYPEID": 123457,
    "PRODUCTTITLE": "SunFrog Logo Cap",
    "COSTRETAIL": 50,
    "PRODUCTSKU": "SF-CAP-001",
    "MANUFACTURER": "SunFrog",
    "TAGS": [
      { "value": "Apparel" },
      { "value": "Headwear" }
    ]
  },
  "EXECUTIONTIME": 178,
  "mode": "test",
  "HASERRORS": false
}
Tip: The single product response includes full COLORS with nested sizes arrays, giving you inventory levels (stockQty), pricing (cost, msrp), and identifiers (gtin, upc) for every color/size combination.

Create Product (3PL)

Create a new third-party logistics product with color variants, size options, and pricing.

POST /3pl/?user={user}&key={key}

Creates a new 3PL product with color/size variants. Send a JSON body with product details, a colors array containing nested sizes, and optional tags.

Request Body
Parameter Type Required Description
productTitle string Required Product display title (max 255 characters)
productSKU string Required Product SKU (max 50 characters)
productType integer Required Product type identifier
sizeGroupId integer Required Size group identifier — must reference a valid size group
colors array Required Array of color objects with nested sizes (see below)
costRetail numeric Optional Retail cost applied to all inventory records. Default: 0
costWholesale numeric Optional Wholesale cost applied to all inventory records. Default: 0
productDescription string Optional Product description text
tags array Optional Array of tag objects, each with a value field
Color Object Fields
Field Type Required Description
colorId integer Required Color identifier — must reference a valid color
colorName string Required Color display name (cannot be empty)
sizes array Required Array of size objects — must contain at least one entry
hexCode string Optional CSS hex color code (e.g. #000000)
Size Object Fields
Field Type Required Description
sizeId integer Required Size identifier — must reference a valid size
upc string Optional Universal Product Code for this variant
gtin string Optional Global Trade Item Number for this variant
cost numeric Optional Cost for this variant. Default: 0
msrp numeric Optional Manufacturer's suggested retail price. Default: 0
Example Request
JSON Body
{
  "productTitle": "Title 30",
  "productSKU": "SKU94",
  "productDescription": "",
  "costRetail": 50,
  "costWholesale": 25,
  "productType": 1,
  "sizeGroupId": 1,
  "colors": [
    {
      "colorId": 20,
      "colorName": "Black",
      "hexCode": "#000000",
      "sizes": [
        { "sizeId": 1, "upc": "1001", "gtin": "0001", "cost": 50, "msrp": 60 },
        { "sizeId": 2, "upc": "1002", "gtin": "0002", "cost": 50, "msrp": 60 },
        { "sizeId": 3, "upc": "1003", "gtin": "0003", "cost": 50, "msrp": 60 },
        { "sizeId": 4, "upc": "1004", "gtin": "0004", "cost": 50, "msrp": 60 }
      ]
    },
    {
      "colorId": 5,
      "colorName": "Antique Irish Green",
      "hexCode": "#00843d",
      "sizes": [
        { "sizeId": 1, "upc": "2001", "gtin": "0011", "cost": 60, "msrp": 70 },
        { "sizeId": 2, "upc": "2002", "gtin": "0012", "cost": 60, "msrp": 70 },
        { "sizeId": 3, "upc": "2003", "gtin": "0013", "cost": 60, "msrp": 70 },
        { "sizeId": 4, "upc": "2004", "gtin": "0014", "cost": 60, "msrp": 70 }
      ]
    }
  ],
  "tags": [
    { "value": "Tag" },
    { "value": "TEST2" }
  ]
}
Validation Rules
Requirements:
  • productTitle — cannot be empty, max 255 characters
  • productSKU — cannot be empty, max 50 characters
  • productType — cannot be empty
  • sizeGroupId — must reference a valid size group
  • colorId — must reference a valid color ID (validated against system records)
  • colorName — cannot be empty
  • sizes — each color must have at least one size entry
  • sizeId — must reference a valid size ID (validated against system records)
Response
JSON — 200 OK
{
  "TRACE": 0,
  "MESSAGE": "Product created successfully.",
  "PUBLICTYPEID": 123458,
  "LASTENDPOINT": "3PL",
  "EXECUTIONTIME": 1084,
  "mode": "test",
  "HASERRORS": false
}
Response Fields
Field Type Description
HASERRORS boolean Whether the request encountered errors
MESSAGE string Success or error message
PUBLICTYPEID integer The newly created product's public type ID
EXECUTIONTIME integer Server-side execution time in milliseconds
mode string API mode — live or test
Tip: After creating a product, use the returned PUBLICTYPEID with the Get Product (3PL) endpoint to retrieve the full product details including all color/size variants.

Get Order via publicOrderId

Retrieve the status of an order using SunFrog's public order ID (returned when the order was created). This endpoint can also be configured as a webhook callback to signal when an order has shipped. To enable this feature, contact your account manager.

GET /orders/?user={user}&key={key}&publicOrderId={publicOrderId}

Returns order status, tracking information, and item-level details by SunFrog’s internal publicOrderId.

Query Parameters
Parameter Type Required Description
user string Required Your API username
key string Required Your API key
publicOrderId numeric Required SunFrog’s internal order ID (returned from Create Order)
Example Request
Request
curl -X GET "https://api.sunfrogsolutions.com/orders/?user=myusername&key=myapikey&publicOrderId=30"
JSON — 200 OK
{
  "orders": [
    {
      "receivedDate": "2020-04-02T13:56:31.150",
      "orderComplete": 1,
      "orderId": 123456789,
      "publicOrderId": 30,
      "orderItems": [
        {
          "receivedDate": "2020-04-02T13:56:31.150",
          "publicOrderItemId": 30,
          "itemStatus": "Complete",
          "shipMethod": "Priority",
          "trackingNumber": 123456
        }
      ]
    }
  ],
  "mode": "test",
  "hasErrors": false
}

Get Order via OrderId

Retrieve the status of an order using your client-supplied order ID.

GET /orders/?user={user}&key={key}&OrderId={OrderId}

Searches for an order based on the client-supplied orderid you provided when creating the order.

Query Parameters
Parameter Type Required Description
user string Required Your API username
key string Required Your API key
OrderId numeric Required Your client-supplied order ID (the orderid you sent when creating the order)
Example Request
Request
curl -X GET "https://api.sunfrogsolutions.com/orders/?user=myusername&key=myapikey&OrderId=12345"
JSON — 200 OK
{
  "orders": [
    {
      "receivedDate": "2020-04-02T13:56:31.150",
      "orderComplete": 1,
      "orderId": 123456789,
      "publicOrderId": 30,
      "orderItems": [
        {
          "receivedDate": "2020-04-02T13:56:31.150",
          "publicOrderItemId": 30,
          "itemStatus": "Complete",
          "shipMethod": "Priority",
          "trackingNumber": 123456
        }
      ]
    }
  ],
  "mode": "test",
  "hasErrors": false
}

Get Order via OrderItemId

Retrieve the status of an order using your client-supplied order item ID.

GET /orders/?user={user}&key={key}&OrderItemId={OrderItemId}

Searches for an order based on the client-supplied orderItemId you provided within an item when creating the order.

Query Parameters
Parameter Type Required Description
user string Required Your API username
key string Required Your API key
OrderItemId numeric Required Your client-supplied order item ID (the orderItemId you sent within an item)
Example Request
Request
curl -X GET "https://api.sunfrogsolutions.com/orders/?user=myusername&key=myapikey&OrderItemId=30"
JSON — 200 OK
{
  "orders": [
    {
      "receivedDate": "2020-04-02T13:56:31.150",
      "orderComplete": 1,
      "orderId": 123456789,
      "publicOrderId": 30,
      "orderItems": [
        {
          "receivedDate": "2020-04-02T13:56:31.150",
          "publicOrderItemId": 30,
          "itemStatus": "Complete",
          "shipMethod": "Priority",
          "trackingNumber": 123456
        }
      ]
    }
  ],
  "mode": "test",
  "hasErrors": false
}
Response Fields
Field Type Description
hasErrors boolean Whether the request encountered errors
orders[] array Array of matching order objects
orderId numeric Internal order identifier
publicOrderId integer SunFrog public order ID
receivedDate string ISO 8601 timestamp when the order was received
orderComplete integer Completion flag — 1 = complete, 0 = in progress
mode string API mode — live or test
Order Item Fields
Field Type Description
publicOrderItemId integer Public order item identifier
itemStatus string Current status (e.g. Complete, Waiting, In Production)
shipMethod string Shipping method used (e.g. Priority, First Class)
trackingNumber numeric Shipment tracking number (populated when shipped)
receivedDate string ISO 8601 timestamp when the item was received
Webhook Support: These endpoints can also be configured as a webhook callback to automatically notify your system when an order has shipped. To enable webhook callbacks, contact our development / sales team.

Create Order

Submit one or more orders with existing products or create new products inline. Supports batch ordering and optional quote mode for price checks.

POST /orders/?user={user}&key={key}

Creates one or more orders. Send a JSON body with an orders array. Each order must include a shipping address and an items array. Items can reference existing products or include a product object to create a new POD product inline.

Order Object Fields
Parameter Type Required Description
name string Required Recipient full name
address1 string Required Primary shipping address line
city string Required Shipping city
state string Required Shipping state/province
postalcode string / numeric Required Shipping postal/zip code
country string Required Country code (e.g. US, CA)
email string Required Customer email address
items array Required Array of line item objects (see Items below)
orderid string Optional Your external order ID for reference
quoteOrder boolean Optional Set to true to get pricing without committing the order
address2 string Optional Secondary address line (apt, suite, etc.)
phone string Optional Customer phone number
shipCarrier string Optional Carrier for passthru shipping (e.g. UPS, USPS, FEDEX)
shipMethod string Optional Shipping method for passthru (e.g. Economy Mail Innovations, 2nd Day Air)
Items — Existing Product

Use these fields to order an existing product by referencing its identifiers.

Field Type Required Description
qty numeric Required Quantity to order
publicArtId numeric Required Public art ID of the existing product
productStyleId numeric Required Product style identifier
colorId numeric / string Required* Color identifier — can use colorName alternatively
colorName string Optional* Color name — can be used in place of colorId
sizeId numeric Required* Size identifier — can use sizeName alternatively
sizeName string Optional* Size name — can be used in place of sizeId
orderItemId string Optional Your external order item ID
styleCode string Optional Concatenation of productStyleId-colorId-sizeId — replaces individual params
GTIN numeric Optional Replaces productStyleId, sizeId, colorId, and styleCode
UPC string Optional Can be used in place of colorId, productStyleId, sizeId, publicArtId
mfgSku string Optional Manufacturer SKU — replaces productStyleId (e.g. 3001, 8000)
Items — New Product (Inline Creation)

Include a product object within an item to create a new POD product and order it simultaneously.

Field Type Required Description
product object Required Product definition object (see nested fields below)
product.productTitle string Required Product display title
product.productType string Required Product type — POD or PS
product.retailPrice numeric Required Retail price in USD
product.art array Required Array of art objects with artfile, mockupFile, productionApplicationTypeId, productionApplicationLocationId
product.productDescription string Optional Product description text
product.designSku string Optional User-defined design SKU
product.styleCode string Optional Concatenation of productStyleId-colorId-sizeId
Example 1: Order with Existing Product
JSON Body
{
  "orders": [
    {
      "orderid": 12345,
      "postalcode": 10001,
      "city": "New York",
      "country": "US",
      "phone": "1234567897",
      "state": "NY",
      "address1": "101 Main St.",
      "email": "help@sunfrog.com",
      "name": "Bob Customer",
      "address2": "",
      "items": [
        {
          "qty": 1,
          "productStyleId": 8,
          "colorId": 20,
          "publicArtId": 100000001,
          "sizeId": 3
        }
      ]
    }
  ]
}
JSON — 200 OK
{
  "errors": [],
  "orders": [
    {
      "customerOrderId": 123,
      "orderid": 123,
      "publicOrderId": 20,
      "batchId": 2,
      "name": "Joe Customer",
      "address1": "101 Main St.",
      "address2": "",
      "city": "New York",
      "state": "MI",
      "postalcode": 10001,
      "country": "US",
      "iso2": "US",
      "email": "",
      "phone": 0000000000,
      "totalItems": 1,
      "costTotal": 9.35,
      "shipTotal": 3.27,
      "shipWhere": "USPS 2-5 Days",
      "mailClass": "First Class",
      "mailPiece": "Thick Envelopes",
      "weight": 14.6,
      "items": [
        {
          "publicArtId": 100000001,
          "productStyleId": 8,
          "colorId": 20,
          "sizeId": 4,
          "altSizeName": "L",
          "qty": 1,
          "serviceType": "POD",
          "status": "Waiting",
          "costGarment": 2.35,
          "costProductionTotal": 7,
          "costTotal": 9.35,
          "shippingTotal": 3.27,
          "weight": 7.3,
          "mockupId": 123456001,
          "proofImage": "123456-front-200317050305118.jpg",
          "proofImageDir": "mp/123456/",
          "billingItemAddOns": [
            {
              "addonTitle": "DTG - [GT3]",
              "productionApplicationTypeId": 1,
              "productionApplicationLocationId": 1,
              "addonCost": 7
            }
          ]
        }
      ]
    }
  ],
  "mode": "test",
  "hasErrors": false
}
Example 2: Order with New Product (Inline)
JSON Body
{
  "orders": [
    {
      "address1": "1234 Main St.",
      "email": "some@email.com",
      "name": "Joe Customer",
      "address2": "",
      "postalcode": 10001,
      "orderid": 456,
      "city": "New York",
      "country": "US",
      "phone": "1234567890",
      "state": "NY",
      "items": [
        {
          "productStyleId": 204,
          "sizeName": "L",
          "qty": 1,
          "colorId": 20,
          "product": {
            "productDescription": "Amazing Sweatshirt!",
            "productTitle": "Sweatshirt",
            "retailPrice": 29.99,
            "designSku": "",
            "art": [
              {
                "mockupFile": "https://s3.amazonaws.com/artfiles.sunfrog.com/.../front.png",
                "productionApplicationTypeId": 1,
                "productionApplicationLocationId": 1,
                "artfile": "https://s3.amazonaws.com/artfiles.sunfrog.com/.../front.png"
              }
            ]
          }
        }
      ]
    }
  ]
}
JSON — 200 OK
{
  "errors": [],
  "orders": [
    {
      "customerOrderId": 123,
      "orderid": 123,
      "publicOrderId": 19,
      "batchId": 2,
      "name": "Joe Customer",
      "address1": "101 Main St.",
      "city": "New York",
      "state": "MI",
      "postalcode": 10001,
      "country": "US",
      "totalItems": 1,
      "costTotal": 10.08,
      "shipTotal": 6.19,
      "shipWhere": "USPS 2-3 Days",
      "mailClass": "Priority",
      "weight": 44,
      "items": [
        {
          "publicArtId": 43,
          "productStyleId": 204,
          "colorId": 20,
          "sizeId": 4,
          "altSizeName": "L",
          "qty": 1,
          "serviceType": "POD",
          "status": "Waiting",
          "costGarment": 10.08,
          "costTotal": 10.08,
          "shippingTotal": 6.19,
          "weight": 22,
          "product": {
            "productDescription": "Amazing Sweatshirt!",
            "productType": "POD",
            "defaultColor": 20,
            "productStyleId": 204,
            "productTitle": "Sweatshirt that amazes",
            "art": [
              {
                "colorCount": 999,
                "mockupFile": "https://s3.amazonaws.com/artfiles.sunfrog.com/.../front.png",
                "productionApplicationTypeId": 1,
                "productionApplicationLocationId": 1,
                "artfile": "https://s3.amazonaws.com/artfiles.sunfrog.com/.../front.png"
              }
            ],
            "retailPrice": 29.99,
            "designSku": ""
          }
        }
      ]
    }
  ],
  "mode": "test",
  "hasErrors": false
}
Response Fields
Field Type Description
hasErrors boolean Whether the request encountered errors
errors[] array Array of error messages (empty on success)
orders[] array Array of created order objects
publicOrderId integer SunFrog's internal order ID
customerOrderId integer Customer-facing order identifier
costTotal decimal Total product cost for the order
shipTotal decimal Total shipping cost
shipWhere string Shipping carrier and estimated delivery
mailClass string Mail class used (e.g. First Class, Priority)
mode string API mode — live or test
Tip: Set quoteOrder to true in the order object to receive full pricing (including shipping estimates) without actually placing the order.

Get Catalog

Retrieve top-level product information from the SunFrog catalog. Use the unfiltered call to list all available products, or pass a productStyleId to get variant details and costs.

GET /catalog/?user={user}&key={key}

Returns a list of products available through the API. Without a productStyleId, returns top-level product information. With a productStyleId, returns full variant detail including colors, sizes, pricing, and stock levels.

Query Parameters
Parameter Type Required Description
user string Required Your API username
key string Required Your API key
productStyleId numeric Optional Filter by product style to get variant-level detail and costs
Product Fields
Field Type Description
productStyleId integer Product style identifier
typeName string Product display name (e.g. Ollie Cap - AD527)
core integer Whether this is a core product (1 = yes)
coreQty integer Number of core color options
colorOptions string Color option codes available
lowCost decimal Lowest variant cost
highCost decimal Highest variant cost
productOptions[] array Array of variant objects (populated when filtering by productStyleId)
Product Option Fields
Field Type Description
colorid integer Color identifier
colorname string Color display name
hexcode string CSS hex color code
sizeId integer Size identifier
sizeName string Size display name (e.g. OS, S, M)
altName string Alternate size label (e.g. One Size)
cost decimal Garment cost for this variant
productionCost decimal Production/printing cost
productionApplicationTypeId integer / null Production application type (null if not applicable)
inventoryid integer Inventory record identifier
stockQty integer Current stock quantity
inStock integer Whether the variant is in stock (1 = yes, 0 = no)
inventoryAlert string / null Inventory alert message (null if no alerts)
restock_estimate string / null Estimated restock date (null if not applicable)
sortOrder integer Display sort order
Example: Filtered by productStyleId
Request
curl -X GET "https://api.sunfrogsolutions.com/catalog/?user=myusername&key=myapikey&productStyleId=1306"
JSON — 200 OK (truncated to 1 variant)
{
  "products": [
    {
      "core": 1,
      "productStyleId": 1306,
      "coreQty": 2,
      "lowCost": 3.9293,
      "colorOptions": "OL102",
      "typeName": "Ollie Cap - AD527",
      "highCost": 5.5556,
      "productOptions": [
        {
          "sizeName": "OS",
          "productionCost": 4.00,
          "inventoryAlert": null,
          "inStock": 0,
          "restock_estimate": null,
          "productionApplicationTypeId": null,
          "sizeId": 23,
          "stockQty": 0,
          "sortOrder": 1,
          "cost": 3.92,
          "inventoryid": 25799,
          "colorname": "Black",
          "colorid": 20,
          "altName": "One Size",
          "hexcode": "#000000"
        }
      ]
    }
  ]
}
Tip: Use the unfiltered call (without productStyleId) to discover available products, then pass a specific productStyleId to get full variant details including color/size combinations, costs, and inventory levels.

Get Catalog Item

Retrieve detailed variant information for a specific product style, including colors, sizes, costs, GTIN codes, and manufacturer details.

GET /catalog/?user={user}&key={key}&productStyleId={productStyleId}

Returns option, size, and cost information for a specified product. The sizeId, colorId, and productStyleId returned here are the parameters used when creating products and placing orders.

Query Parameters
Parameter Type Required Description
user string Required Your API username
key string Required Your API key
productStyleId numeric Required The product style ID to retrieve variant details for
Product Fields
Field Type Description
productStyleId integer Product style identifier
typeName string Product display name
manufacturer string Product manufacturer (e.g. Gildan)
styleDescription string Full product description with material, weight, and construction details
artOwnerId integer Art owner identifier
core integer Whether this is a core product (1 = yes)
coreQty integer Number of core color options
colorOptions string / numeric Color option code or count
lowCost decimal Lowest variant cost
highCost decimal Highest variant cost
productOptions[] array Array of color/size variant objects
Variant Fields (productOptions)
Field Type Description
colorid integer Color identifier — used when creating products and orders
colorname string Color display name
hexcode string CSS hex color code
sizeId integer Size identifier — used when creating products and orders
sizeName string Size display name (e.g. S, M, L)
altName string Alternate size label (e.g. XXL, XXXL)
cost decimal Garment cost for this variant
gtin numeric Global Trade Item Number for this variant
sortOrder integer Display sort order
Example Request
Request
curl -X GET "https://api.sunfrogsolutions.com/catalog/?user=myusername&key=myapikey&productStyleId=8"
JSON — 200 OK (truncated to 3 variants)
{
  "products": [
    {
      "core": 1,
      "coreQty": 28,
      "lowCost": 2.35,
      "colorOptions": 5000,
      "typeName": "Heavy Cotton T-Shirt",
      "highCost": 5.23,
      "productOptions": [
        {
          "sizeName": "S",
          "sortOrder": 2,
          "cost": 2.35,
          "colorname": "Antique Cherry Red",
          "colorid": 3,
          "sizeId": 2,
          "altName": "S",
          "hexcode": "#971b2f",
          "gtin": 1234567989
        },
        {
          "sizeName": "M",
          "sortOrder": 3,
          "cost": 2.35,
          "colorname": "Antique Cherry Red",
          "colorid": 3,
          "sizeId": 3,
          "altName": "M",
          "hexcode": "#971b2f",
          "gtin": 1234567988
        },
        {
          "sizeName": "2XL",
          "sortOrder": 6,
          "cost": 4.15,
          "colorname": "Antique Cherry Red",
          "colorid": 3,
          "sizeId": 6,
          "altName": "XXL",
          "hexcode": "#971b2f",
          "gtin": 1234567985
        }
      ],
      "productStyleId": 8,
      "artOwnerId": 0,
      "manufacturer": "Gildan",
      "styleDescription": "This heavy cotton t-shirt is made of durable, 5.3 oz, pre-shrunk, 100% cotton material..."
    }
  ]
}
Tip: The sizeId, colorid, and productStyleId values returned from this endpoint are the exact parameters needed when creating POD products and placing orders.