The Posterflow API is a RESTful API, that uses HTTP(S) protocol with HTTP GET and POST methods for communication

The Posterflow RESTful API

The Basics

API key and Authentication

To access the API you need an API key which we will provide you on request.

Keep that key secret, as anyone with the key can access you order data.

Posterflow uses HTTP basic authentication for the API requests.

To authorize, you need to add the Authorization header with your API key when performing a request. So if the API key is KNRBW9VdshULxjJ1xw0sDw, then you need to add this header to the API request:

Authorization: Basic KNRBW9VdshULxjJ1xw0sDw

The API Request Endpoint

All API requests have to be sent to this URL: https://api.posterflow.de/api/

2

Operations

Get a list of all your orders that are currently in Production

Send an HTTP GET request to https://api.posterflow.de/api/orders

 

Request:

GET /api/orders HTTP/1.1
Authorization: Basic yV9ClgL7h5vGGLAJhd9FuNBCdd1KvYPlsGuudI6gfXs
Host: api.posterflow.de

On success, the Server responds with status 200 and a JSON object with details on all active orders in production.

Response:

[{
  "External_orderid": "4711",
  "orderid": "TT4711",
  "createdat": "2021-08-03T16:24:41.347Z",
  "items": [{
       "size": "30x40",
       "type": "satin250",
       "color": "Whitemap",
       "createdat": "2021-08-03T16:24:40.580Z",
       "url": "https://dl.dropboxusercontent.com/s/10nm8d4oot3lg8f/TT_30x40.pdf",
       "downloaded": 1,
       "item_accessory": "RSD40",
       "id": "itemi1",
       "completed": 0
  }],
  "accessory": [{
       "partnumber": "INVOICE",
       "quantity": 1,
       "url": "https://dl.dropboxusercontent.com/s/ru58nl6se4escmd/TT_Rechnung.pdf",
       "downloaded": 1
  }, {
       "partnumber": "RSD40",
       "quantity": 1,
       "url": "",
       "downloaded": 0
  }],
  "shipping": [{
       "filename": "TT_TT4711_Label.",
       "type": "DHL",
       "api": 1,
       "apiresponse": "Die angegebene Strasse kann nicht gefunden werden.",
       "trackingid": "00340434498787103876",
       "fileurl": "https://cig.dhl.de/gkvlabel/PRODUCTIONAZURE/dhl-vls/gw/shpmntws/printShipment?token=x5xzrHE7ctmqPqk33k%2BKkKVOF7rDdlCe35HwWACAmA5yiaN4QeyVlJ2S%2FyRW1IQrAo7W1DDqhw82UofLc%2BDAzurgzoO6MrjST%2FOE69eW2sS06PP%2B0qBKkTk0MVA3EHKmnrcAlF2tsHkvVpD2GPUT%2F1VgOKXtxIGUeNCCtN8zQRY%3D",
       "countrycode": "DE",
       "weight": 0.89,
       "createdat": "2021-08-03T16:24:41.330Z",
       "service": null
  }]
}]

 

Get status of a specific order

Send an HTTP GET request to https://api.posterflow.de/api/orders

with parameter: 'orderid': 'YourOrderNumber'.

Example: https://api.posterflow.de/api/orders?orderid=4711

 

Request:

GET /api/orders?orderid=4711 HTTP/1.1
Authorization: Basic yV9ClgL7h5vGGLAJhd9FuNBCdd1KvYPlsGuudI6gfXs
Host: api.posterflow.de

On success, the server responds with status 200 and a JSON object with details on the requested order.

Response:

[{
  "External_orderid": "4711",
  "orderid": "TT4711",
  "createdat": "2021-08-03T16:24:41.347Z",
  "completedat": null,
  "items": [{
       "size": "30x40",
       "type": "satin250",
       "color": "Whitemap",
       "createdat": "2021-08-03T16:24:40.580Z",
       "url": "https://dl.dropboxusercontent.com/s/10nm8d4oot3lg8f/TT_30x40.pdf",
       "downloaded": 1,
       "item_accessory": "RSD40",
       "id": "itemi1"
  }],
  "accessory": [{
       "partnumber": "INVOICE",
       "quantity": 1,
       "Url": "https://dl.dropboxusercontent.com/s/ru58nl6se4escmd/TT_Rechnung.pdf",
       "Downloaded": 1
  }, {
       "partnumber": "RSD40",
       "quantity": 1,
       "Url": "",
       "Downloaded": 0
  }],
  "shipping": [{
       "filename": "TT_TT4711_Label.",
       "type": "DHL",
       "api": 1,
       "apiresponse": "Die angegebene Strasse kann nicht gefunden werden.",
       "trackingid": "00340434498787103876",
       "fileurl": "https://cig.dhl.de/gkvlabel/PRODUCTIONAZURE/dhl-vls/gw/shpmntws/printShipment?token=x5xzrHE7ctmqPqk33k%2BKkKVOF7rDdlCe35HwWACAmA5yiaN4QeyVlJ2S%2FyRW1IQrAo7W1DDqhw82UofLc%2BDAzurgzoO6MrjST%2FOE69eW2sS06PP%2B0qBKkTk0MVA3EHKmnrcAlF2tsHkvVpD2GPUT%2F1VgOKXtxIGUeNCCtN8zQRY%3D",
       "countrycode": "DE",
       "weight": 0.89,
       "createdat": "2021-08-03T16:24:41.330Z",
       "service": null
  }]
}]

Get available products

Send an HTTP GET request to https://api.posterflow.de/api/articles

 

Request:

GET /api/articles HTTP/1.1
Authorization: Basic yV9ClgL7h5vGGLAJhd9FuNBCdd1KvYPlsGuudI6gfXs
Host: api.posterflow.de

 

On success, the server responds with status 200 and a JSON object with all currently available products.

The List can contain the following products types:

  1. Substrate = Mainitem. Paper to print on

  2. Print = Accessory. Will be printed and shipped with your order. Like an      Invoice ('rechnung')

  3. Item = Accessory. Pick and Pack item that will be shipped with your order. Like a key-ring, or a toy.

  4. Frame = Accessory. A (wooden) picture-frame in which your poster will be shipped. The poster will be completely framed.

  5. Hanger = Accessory. A magnetic Poster hanger that will be shipped with the poster

  6. Service = Accessory. Special services on request

  7. Board = Mainitem. Rigid material (wood, metal, plastic) to print your file on.
     

Response:

[{
  "partnumber": "metal3mm",
  "type": "Board",
  "description": "Aluminum Composite Board 3mm / UV direct printed",
  "available sizes for print": ["30x40", "40x50", "50x70"]
}, {
  "partnumber": "pinewood18mm",
  "type": "Board",
  "description": "Pinewood natural / 18mm / UV-Direct-Printing",
  "available sizes for print": ["30x40"]
}, {
  "partnumber": "rnd40",
  "type": "Frame",
  "description": "Frame natural PREMIUM 30x40",
  "width in cm": 30,
  "height in cm": 40
}, {
  "partnumber": "rnd50",
  "type": "Frame",
  "description": "Frame natural PREMIUM 40x50",
  "width in cm": 40,
  "height in cm": 50
}, {
  "partnumber": "rnd70",
  "type": "Frame",
  "description": "Frame natural PREMIUM 70x50",
  "width in cm": 50,
  "height in cm": 70
}, {
  "partnumber": "rni40",
  "type": "Frame",
  "description": "Frame natural STANDARD 30x40",
  "width in cm": 30,
  "height in cm": 40
}, {
  "partnumber": "rni50",
  "type": "Frame",
  "description": "Frame natural STANDARD 40x50",
  "width in cm": 40,
  "height in cm": 50
}, {
  "partnumber": "rni70",
  "type": "Frame",
  "description": "Frame natural STANDARD 70x50",
  "width in cm": 50,
  "height in cm": 70
}, {
  "partnumber": "rni70_2025",
  "type": "Frame",
  "description": "Frame natural STANDARD 70x50 - Pinewood wide profile 20/25 mm",
  "width in cm": 50,
  "height in cm": 70
}, {
  "partnumber": "rsd40",
  "type": "Frame",
  "description": "Frame Black PREMIUM 30x40",
  "width in cm": 30,
  "height in cm": 40
}, {
  "partnumber": "rsd50",
  "type": "Frame",
  "description": "Frame Black PREMIUM 40x50",
  "width in cm": 40,
  "height in cm": 50
}, {
  "partnumber": "rsd70",
  "type": "Frame",
  "description": "Frame Black PREMIUM 70x50",
  "width in cm": 50,
  "height in cm": 70
}, {
  "partnumber": "rsi40",
  "type": "Frame",
  "description": "Frame Black STANDARD 30x40",
  "width in cm": 30,
  "height in cm": 40
}, {
  "partnumber": "rsi50",
  "type": "Frame",
  "description": "Frame Black STANDARD 40x50",
  "width in cm": 40,
  "height in cm": 50
}, {
  "partnumber": "rsi70",
  "type": "Frame",
  "description": "Frame Black STANDARD 70x50",
  "width in cm": 50,
  "height in cm": 70
}, {
  "partnumber": "rsi70_2025",
  "type": "Frame",
  "description": "Frame Black STANDARD 70x50 - Pinewood wide profile 20/25 mm",
  "width in cm": 50,
  "height in cm": 70
}, {
  "partnumber": "rwd40",
  "type": "Frame",
  "description": "Frame white PREMIUM 30x40",
  "width in cm": 30,
  "height in cm": 40
}, {
  "partnumber": "rwd50",
  "type": "Frame",
  "description": "Frame white PREMIUM 40x50",
  "width in cm": 40,
  "height in cm": 50
}, {
  "partnumber": "rwd70",
  "type": "Frame",
  "description": "Frame white PREMIUM 70x50",
  "width in cm": 50,
  "height in cm": 70
}, {
  "partnumber": "rwi40",
  "type": "Frame",
  "description": "Frame white STANDARD 30x40",
  "width in cm": 30,
  "height in cm": 40
}, {
  "partnumber": "rwi50",
  "type": "Frame",
  "description": "Frame white STANDARD 40x50",
  "width in cm": 40,
  "height in cm": 50
}, {
  "partnumber": "rwi70",
  "type": "Frame",
  "description": "Frame white STANDARD 70x50",
  "width in cm": 50,
  "height in cm": 70
}, {
  "partnumber": "rwi70_2025",
  "type": "Frame",
  "description": "Frame white STANDARD 70x50 - wide profile 20/25 mm",
  "width in cm": 50,
  "height in cm": 70
}, {
  "partnumber": "pn30",
  "type": "Hanger",
  "description": "Poster hanger pinewood natural 30 cm ",
  "width in cm": 30,
  "height in cm": 3
}, {
  "partnumber": "pn40",
  "type": "Hanger",
  "description": "Poster hanger pinewood natural 40 cm ",
  "width in cm": 40,
  "height in cm": 3
}, {
  "partnumber": "pn50",
  "type": "Hanger",
  "description": "Poster hanger pinewood natural 50 cm ",
  "width in cm": 50,
  "height in cm": 3
}, {
  "partnumber": "ps30",
  "type": "Hanger",
  "description": "Poster hanger pinewood Black 30 cm  ",
  "width in cm": 30,
  "height in cm": 3
}, {
  "partnumber": "ps40",
  "type": "Hanger",
  "description": "Poster hanger pinewood Black 40 cm ",
  "width in cm": 40,
  "height in cm": 3
}, {
  "partnumber": "ps50",
  "type": "Hanger",
  "description": "Poster hanger pinewood Black 50 cm  ",
  "width in cm": 50,
  "height in cm": 3
}, {
  "partnumber": "pw40",
  "type": "Hanger",
  "description": "Poster hanger pinewood white 40 cm ",
  "width in cm": 40,
  "height in cm": 3
}, {
  "partnumber": "pw50",
  "type": "Hanger",
  "description": "Poster hanger pinewood white 50 cm ",
  "width in cm": 50,
  "height in cm": 3
}, {
  "partnumber": "deliverynote",
  "type": "Print",
  "description": "Printed delivery note in red pouchbag"
}, {
  "partnumber": "invoice",
  "type": "Print",
  "description": "Printed Invoice in red pouch"
}, {
  "partnumber": "satin250",
  "type": "Substrate",
  "description": "Photo paper satin 250 grams",
  "available sizes for print": ["21x30", "30x40", "40x50", "50x70", "60x90", "70x100"]
}, {
  "partnumber": "warmwhite210",
  "type": "Substrate",
  "description": "Matte natural paper warmwhite 210 grams",
  "available sizes for print": ["21x30", "30x40", "40x50", "50x70", "60x90", "70x100"]
}, {
  "partnumber": "white210",
  "type": "Substrate",
  "description": "Matte natural paper white 210 grams",
  "available sizes for print": ["21x30", "30x40", "40x50", "50x70", "60x90", "70x100"]
}]


Place an Order

Request (raw): request.txt

To place an order, you have to send a POST request to https://api.posterflow.de/api/

The body of the request (data) contains all the information (as JSON) needed to place an order:

{
   "data": {
       "type": "submit",
       "orderid": "4711",
       "shipping": {
           "shippingcompany": "DHL",
           "destination": {
               "postnumber": "",
               "packstationnumber": "",
               "postfilialnumber": "",
               "exportinvoicenumber": "12345",
               "exportvalue": "50",
               "email": "daniel@test.com",
               "first_name": "Daniel",
               "street": "Mustergasse",
               "street_number": "12",
               "phone": "",
               "city": "Mannheim",
               "zip": "68229",
               "province": "",
               "country": "Germany",
               "last_name": "Mustermann",
               "address2": "",
               "company": "Die Firma",
               "name": "Max",
               "country_code": "DE"
           },
           "shipper": {
               "email": "daniel@test.com",
               "first_name": "Daniel",
               "street": "Mustergasse ",
               "street_number": "25",
               "phone": "",
               "city": "Berlin",
               "zip": "10777",
               "province": "Berlin",
               "country": "Germany",
               "last_name": "Mustersender",
               "address2": "",
               "company": "Mustershop",
               "latitude": "",
               "longitude": "",
               "name": "Max",
               "country_code": "DE",
               "province_code": "BER"
           }
       },
       "label": {
           "fileurl": "",
           "filetype": "",
           "shippingcompany": ""
       },
       "mainitems": [
           {
               "id": "itemi1",
               "type": "satin250",
               "size": "30x40",
               "fileurl": "https://sampleurl.de/3lg8f/TT_30x40.pdf",
               "filetype": "pdf",
               "designname": "Whitemap",
               "item_accessory": "RSD40"
           }
       ],
       "accessory": [
           {
               "partnumber": "RSD40",
               "fileurl": "",
               "quantity": 1
           },
           {
               "partnumber": "RECHNUNG",
               "fileurl": "https://sampleurl.de/6se4escmd/TT_Rechnung.pdf",
               "filetype": "pdf",
               "quantity": 1
           }
       ]
   }
}

The JSON-Schema with a detailed description of all properties and values can be found here: Posterflow_API_JSON_Schema.txt

On success, the API will respond with status code 200 and a JSON with all the information of the fulfillment, including shipment information.

NOTE: The Production will start immediately, changes can not be made after you have transferred an order.

If the server encounters a problem with your request, it will respond with status 400 and further information on the errors. If the server responds with status 408 you may try again.

Sample result (success with status 200):

[{
  "External_orderid": "4711",
  "orderid": "TT4711",
  "createdat": "2021-08-03T11:48:04.917Z",
  "completedat": null,
  "items": [{
       "size": "30x40",
       "type": "satin250",
       "color": "Whitemap",
       "createdat": "2021-08-03T11:48:04.063Z",
       "url": "https://sampleurl.de/3lg8f/TT_30x40.pdf",
       "downloaded": 0,
       "item_accessory": "RSD40",
       "id": "itemi1"
  }],
  "accessory": [{
       "partnumber": "RECHNUNG",
       "quantity": 1,
       "Url": "https://sampleurl.de/6se4escmd/TT_Rechnung.pdf",
       "Downloaded": 0
  }, {
       "partnumber": "RSD40",
       "quantity": 1,
       "Url": "",
       "Downloaded": 0
  }],
  "shipping": [{
       "filename": "TT_TT4711_Label.",
       "type": "DHL",
       "api": 1,
       "apiresponse": "Die angegebene Strasse kann nicht gefunden werden.",
       "trackingid": "00340434498787103807",
       "fileurl": "https://cig.dhl.de/gkvlabel/PRODUCTIONAZURE/dhl-vls/gw/shpmntws/printShipment?token=x5xzrHE7ctmqPqk33k%2BKkKVOF7rDdlCe35HwWACAmA5yiaN4QeyVlJ2S%2FyRW1IQrAo7W1DDqhw82UofLc%2BDAzurgzoO6MrjST%2FOE69eW2sSFGsZdw19%2FQuDHMOni%2BODCoU0nGdgbiZGEFX8oHLI6tFVgOKXtxIGUeNCCtN8zQRY%3D",
       "countrycode": "DE",
       "weight": 0.89,
       "createdat": "2021-08-03T11:48:04.897Z",
       "service": null
  }]
}]

Webhooks

To get production updates you can use our webhook-system.

When you order is printed a qr-code will be scanned as the orders will be prepared for shipment and webhook to your server will be triggered.

The order update willl be sent to your endpoint as HTTP POST:

 

https://yourserver/External_orderid/printed

The orderid can also be passed within the body of the request.

Your server should respond with STATUS 200 on success.

To use this service just contact us and provide the url where the webhook should POST to.

 

Shopify & Posterly

If you are using a Shopify-Shop and the Posterly-App you can easily connect to Posterflow with Zapier.

New orders from your shop will be automatically transferred to our production-system with the help of Zapier. We will set up the connection and you can start selling Posters without any additional programming.

Just contact us or Posterly if you need more information how to start.