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
TestingTest calls can be made on our test environment, using the following URL:
https://devapi.sunfrogsolutions.com/auth/?user=myusername&key=myapikey
Live Environment
ProductionLive calls should be made on our live API server:
https://api.sunfrogsolutions.com/auth/?user=myusername&key=myapikey
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.
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
{
"TRACE": 999,
"MESSAGE": "Invalid Authentication String ",
"RETURNMESSAGE": "Invalid Authentication String ",
"EXECUTIONTIME": 14,
"mode": "test",
"HASERRORS": true,
"CONTEXT": 132
}
Print Locations
Available print locations for product art placement. Use the productionApplicationLocationId
value when creating products via the API.
| Location ID | Name |
|---|---|
1 |
Front |
2 |
Back |
3 |
Left Sleeve |
4 |
Right Sleeve |
5 |
Left Pocket |
45 |
Locker Tag |
| Location ID | Name |
|---|---|
1 |
Front |
44 |
Under Bill |
| Location ID | Name |
|---|---|
1 |
Front |
| Location ID | Name |
|---|---|
23 |
Top Right |
24 |
Top Left |
| Location ID | Name |
|---|---|
1 |
Front |
Print Types
Available print/production application types. Use the productionApplicationTypeId
value when creating products via the API.
| Type ID | Name | Abbreviation |
|---|---|---|
46 |
DTF | DTF |
49 |
DTF [iSlide] | UVIDTF |
50 |
Sublimation [Socks] | SUBL |
54 |
Blank Garment | FFUL |
56 |
PVC Heat Transfer | LASR |
59 |
Sublimation [General] | SUBL |
2 |
Embroidery | EMBR |
3 |
Decal/Sticker | STIK |
10 |
Sublimation [Drinkware] | SUBL |
16 |
Heat Transfer | BRAND |
33 |
DTF [Patch] | SUBL |
34 |
Sublimation [Flag] | SUBFLA |
35 |
Leather | LASR |
37 |
Embroidery 3D | EMBR |
45 |
DTF [iSlide Tonal] | UVIDTF |
Order Statuses
Reference of all possible order status values returned by the API when querying orders.
| Status |
|---|
Deleted |
Hold |
Printed |
Refund |
Shipped |
Waiting |
| 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.
| 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 |
| 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 |
| 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 |
| 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.
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
curl -X GET "https://api.sunfrogsolutions.com/product/?user=myusername&key=myapikey"
{
"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
curl -X GET "https://api.sunfrogsolutions.com/product/?user=myusername&key=myapikey&publicArtId=100000001"
{
"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
}
]
}
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.
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
{
"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 |
{
"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
}
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.
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
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 |
{
"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
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 |
{
"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
}
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.
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
{
"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
productTitle— cannot be empty, max 255 charactersproductSKU— cannot be empty, max 50 charactersproductType— cannot be emptysizeGroupId— must reference a valid size groupcolorId— must reference a valid color ID (validated against system records)colorName— cannot be emptysizes— each color must have at least one size entrysizeId— must reference a valid size ID (validated against system records)
Response
{
"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 |
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.
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
curl -X GET "https://api.sunfrogsolutions.com/orders/?user=myusername&key=myapikey&publicOrderId=30"
{
"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.
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
curl -X GET "https://api.sunfrogsolutions.com/orders/?user=myusername&key=myapikey&OrderId=12345"
{
"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.
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
curl -X GET "https://api.sunfrogsolutions.com/orders/?user=myusername&key=myapikey&OrderItemId=30"
{
"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 |
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.
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) |
| 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
{
"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
}
]
}
]
}
{
"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)
{
"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"
}
]
}
}
]
}
]
}
{
"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 |
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.
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
curl -X GET "https://api.sunfrogsolutions.com/catalog/?user=myusername&key=myapikey&productStyleId=1306"
{
"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"
}
]
}
]
}
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.
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
curl -X GET "https://api.sunfrogsolutions.com/catalog/?user=myusername&key=myapikey&productStyleId=8"
{
"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..."
}
]
}
sizeId, colorid, and productStyleId values returned
from this endpoint are the exact parameters needed when
creating POD products and
placing orders.