top of page

The Posterflow RESTful API

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

The Basics

API key and Authentication

​

To access the API you need an API key which you can easily generate if register an account above. After login go to "API-Access" and
generate your personal access token. Please 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 Basic 84jTUCQJCiEPfhZl2gV_1zb2uy146_r0wYqjg5D09QQ, then you need to add this header to the API request:

Authorization: Basic 84jTUCQJCiEPfhZl2gV_1zb2uy146_r0wYqjg5D09QQ
 

For Testing us this Key: Basic 84jTUCQJCiEPfhZl2gV_1zb2uy146_r0wYqjg5D09QQ

​

The API Request Endpoint

​

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

Test the API on Swagger

Test the API (OAS3.0) on Swagger

​

​

 
 

 

 

 
 

 

 

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 84jTUCQJCiEPfhZl2gV_1zb2uy146_r0wYqjg5D09QQ
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,

       "id": "id001",
       "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 84jTUCQJCiEPfhZl2gV_1zb2uy146_r0wYqjg5D09QQ
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,

       "id": "id001",
       "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 84jTUCQJCiEPfhZl2gV_1zb2uy146_r0wYqjg5D09QQ
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

               "id": "id string - optional",
           },
           {
               "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.

​

​

​

ETSY + CSV-Import

​

If you have an ETSY-Shop, you can easily transfer print jobs from Etsy to Posterflow with the help of a CSV-File. Etsy has a build in function to Export your order-items in a CSV-File which you just send to our import e-mail.
All included print jobs will be imported automatically and you will receive an E-Mail with the tracking-Link of each order

​

A detailed description can be found here (German)

 

 

 
 

 

 

 
 

 

 

 
 

 

 

Operations:
- GET Orders
- GET Order Status
- GET Products
- POST Order
Webhooks
Shopify & Posterly
Etsy + CSV-Import
bottom of page