Steps to Get Started

To get started you will need to retrieve your web_api_key and app_key. Both can be found when you login to your FinerWorks account. These should be included in as request parameters in the header of any request. Alternatively you can include these as querystring paramaters in the request uri.

You can build on the platform of your choice. For initial development we recommend POSTMAN which allows you to test your calls and even generate sample code use can use in your application. FinerWorks does not provide direct programming support so will not be able to tell you how to “code”. If programming code is beyond your abilities, you will need to find someone with experience in building apps.

While you are building and testing your app, your app should note be in a test mode status meaning you have not enabled your app as "live".

While in test mode nothing will be processed or billed from orders originating from that particular app. All responses will be valid and simulate what you receive in a live environment so you can build your app accordingly.

When you have completed testing and are ready to go live, switch your app_key to a "live" mode. This can be done by going to your FinerWorks account's where you retrieved your api Authentication Credentials. Once your App is live any orders you place will be processed unless you cancel or place an order on hold.

End Points Reference List

You are responsible for insuring the privacy of your customer's data when being submitted therefore SSL is recommended however at this time is not required. View the Help page for the full list of endpoint and method combinations.

Click here for a list of endpoint uris and examples.

About Providing Product Info

When submitting orders you will be required to provide either a "sku" from your FinerWorks virtual inventory. Alternatively you can provide a Product Code in place of a sku which represents the style to print and options along with the appropriate image files. Product codes can be found within the various product pages or when ever you setup a print online at

Shipping Codes

Below are available generic shipping codes however you can choose more specific shipping codes by retrieving them via an endpoint call.

shipping_codedescriptionTransit Time AvgNotes
ECEconomy3-7 daysGoes the least expensive method
SDStandard2-5 daysUsually goes via UPS ground or USPS Priority
EXExpress2-3 daysUsually goes via UPS 2 day or Pruirity Mail (which ever is estimated faster)
ONOvernight1-2 daysUsually goes via Next Day Air or Express Mail. May not be available for some orders in which case the fastest method will be selected.

Future Development and Changes

Overtime FinerWorks will offer additional options and make structural changes based on products and services being offered. Structural changes should not create any disruption to existing applications.

Billing Policy

There are no fees to develop or use the API however once you go live and submit valid orders, you will be required to have a credit card on file in which we will bill you for all pending orders submitted prior to noon of that day. In the advent that a card is declined for any reason you will be notified by email so that appropriate arrangements can be made to update your account with either a new card. We will attempt to rebill the following business day for those orders and any new orders. If after a 3rd attempt or no response after the 4th business day, any pending orders will be cancelled and need to be resubmitted.

Code Examples

Below is some actual example code formatted for popular programing languages. The samples utlize the endpoint to Get Product Details as an example. You can use this as a template for calling the other endpoints or use the sample code provided with each endpoint documentation page. In many cases you will only need to change the endpoint uri and the JSON in the body of the request. All endpoints can be found here.

                curl --location --request POST '' \
                --header 'Content-Type: application/json' \
                --header 'web_api_key: my-web-api-key-goes-here' \
                --header 'app_key: my-app-key-goes-here' \
                --data-raw '[{
                "product_qty": 3,
                "product_sku": "AP6543P49875",
                "product_qty": 3,
                "product_sku": "AP6543P58353",

                'follow_redirects' => TRUE
                'Content-Type' => 'application/json',
                'web_api_key' => 'my-web-api-key-goes-here',
                'app_key' => 'my-app-key-goes-here'
                \n        "product_order_po":null,
                \n          "product_qty": 3,
                \n          "product_sku": "AP6543P49875"
                \n        "product_order_po":null,
                \n          "product_qty": 3,
                \n          "product_sku": "AP6543P58353"
                try {
                $response = $request->send();
                if ($response->getStatus() == 200) {
                echo $response->getBody();
                else {
                echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
                catch(HTTP_Request2_Exception $e) {
                echo 'Error: ' . $e->getMessage();

                var client = new RestClient("");
                client.Timeout = -1;
                var request = new RestRequest(Method.POST);
                request.AddHeader("Content-Type", "application/json");
                request.AddHeader("web_api_key", "my-web-api-key-goes-here");
                request.AddHeader("app_key", "my-app-key-goes-here");
                request.AddParameter("application/json", "[{\r\n        \"product_order_po\":null,\r\n          \"product_qty\": 3,\r\n          \"product_sku\": \"AP6543P49875\"\r\n},\r\n{\r\n        \"product_order_po\":null,\r\n          \"product_qty\": 3,\r\n          \"product_sku\": \"AP6543P58353\"\r\n}\r\n]",  ParameterType.RequestBody);
                IRestResponse response = client.Execute(request);

                var settings = {
                "url": "",
                "method": "POST",
                "timeout": 0,
                "headers": {
                "Content-Type": "application/json",
                "web_api_key": "my-web-api-key-goes-here",
                "app_key": "my-app-key-goes-here"
                "data": JSON.stringify([{"product_order_po":null,"product_qty":3,"product_sku":"AP6543P49875"},{"product_order_po":null,"product_qty":3,"product_sku":"AP6543P58353"}]),

                $.ajax(settings).done(function (response) {

                var https = require('follow-redirects').https;
                var fs = require('fs');

                var options = {
                'method': 'POST',
                'hostname': '',
                'path': '/v3/get_product_details',
                'headers': {
                'Content-Type': 'application/json',
                'web_api_key': 'my-web-api-key-goes-here',
                'app_key': 'my-app-key-goes-here'
                'maxRedirects': 20

                var req = https.request(options, function (res) {
                var chunks = [];

                res.on("data", function (chunk) {

                res.on("end", function (chunk) {
                var body = Buffer.concat(chunks);

                res.on("error", function (error) {

                var postData = JSON.stringify([{"product_order_po":null,"product_qty":3,"product_sku":"AP6543P49875"},{"product_order_po":null,"product_qty":3,"product_sku":"AP6543P58353"}]);



                require "uri"
                require "net/http"

                url = URI("")

                https =, url.port)
                https.use_ssl = true

                request =
                request["Content-Type"] = "application/json"
                request["web_api_key"] = "my-web-api-key-goes-here"
                request["app_key"] = "my-app-key-goes-here"
                request.body = "[{\r\n        \"product_order_po\":null,\r\n          \"product_qty\": 3,\r\n          \"product_sku\": \"AP6543P49875\"\r\n},\r\n{\r\n        \"product_order_po\":null,\r\n          \"product_qty\": 3,\r\n          \"product_sku\": \"AP6543P58353\"\r\n}\r\n]"

                response = https.request(request)
                puts response.read_body