1. Home
  2. /
  3. Docs
  4. /
  5. Articles Report Writer
  6. /
  7. Webhook
  8. /
  9. Webhook API Information

Webhook API Information

Table of Contents


Overview

Trigger report printing programmatically by posting a JSON payload to the Articles local webhook listener. Useful for integrating with external applications, schedulers, or custom Delphi/VCL hosts.

Endpoint: POST http://localhost:3000/webhook


Authentication

Every request must include the X-Webhook-Secret header matching the secret configured in Articles settings. Requests without a valid secret are rejected with 401.

Header Value
Content-Type application/json
X-Webhook-Secret Your secret GUID from Articles settings

Request body

Send a JSON object with the following fields:

Field Type Required Description
ReportFileName string Yes Full path to the .fr3 report file on the server machine.
Parameters object No Key/value pairs injected as report variables. All values must be strings.

Reserved parameter keys

These keys inside Parameters control print behaviour and are applied before the report runs. All values are passed as strings.

Key Description Example value
PrintOptions_Copies Number of copies to print. Default: 1. "2"
PrintOptions_Printer Printer display name. Defaults to the Windows default printer. "Zebra ZT230"
PrintOptions_PageRange "all" or "range". Default: "all". "range"
PrintOptions_FromPage Start page when PrintOptions_PageRange is "range". "2"
PrintOptions_ToPage End page when PrintOptions_PageRange is "range". "5"
PrintOptions_Collate Collate copies. Pass "true" to enable. "true"

Responses

Status Meaning
200 Report queued and printed successfully.
401 Missing or invalid X-Webhook-Secret.
404 Report file not found at the specified path.
500 Articles encountered an internal error running the report.

Example — Delphi

procedure TForm1.SendWebhook;
var
  Client: THTTPClient;
  Params: TJSONObject;
  JSON: TJSONObject;
  Body: TStringStream;
  Resp: IHTTPResponse;
begin
  Client := THTTPClient.Create;
  JSON   := TJSONObject.Create;
  try
    JSON.AddPair('ReportFileName',
      'C:\ProgramData\Articles\Reports\Label_2x1.fr3');

    Params := TJSONObject.Create;
    Params.AddPair('PrintOptions_Copies', '2');
    Params.AddPair('PrintOptions_Printer', 'Zebra ZT230');
    Params.AddPair('StartDate', '2026-01-01');
    Params.AddPair('CompanyName', 'Acme Corp');
    JSON.AddPair('Parameters', Params);

    Body := TStringStream.Create(JSON.ToJSON, TEncoding.UTF8);
    try
      Resp := Client.Post(
        'http://localhost:3000/webhook',
        Body,
        nil,
        [
          TNameValuePair.Create('Content-Type', 'application/json'),
          TNameValuePair.Create('X-Webhook-Secret',
            '32F81205-ED2A-4D4C-B719-12F5A2D61012')
        ]
      );
      if Resp.StatusCode = 200 then
        ShowMessage('Report sent to printer.')
      else
        ShowMessage('Error ' + IntToStr(Resp.StatusCode)
          + ': ' + Resp.ContentAsString);
    finally
      Body.Free;
    end;
  finally
    JSON.Free;
    Client.Free;
  end;
end;

Example — Postman

Save the JSON below as a .json file and import via File → Import in Postman.

{
  "info": {
    "name": "Articles Webhook",
    "_postman_id": "articles-webhook-v1",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "Print report - 2 copies",
      "request": {
        "method": "POST",
        "header": [
          { "key": "Content-Type", "value": "application/json" },
          { "key": "X-Webhook-Secret", "value": "32F81205-ED2A-4D4C-B719-12F5A2D61012" }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"ReportFileName\": \"C:\\\\ProgramData\\\\Articles\\\\Reports\\\\Label_2x1.fr3\",\n  \"Parameters\": {\n    \"PrintOptions_Copies\": \"2\",\n    \"PrintOptions_Printer\": \"Zebra ZT230\",\n    \"StartDate\": \"2026-01-01\",\n    \"CompanyName\": \"Acme Corp\"\n  }\n}",
          "options": { "raw": { "language": "json" } }
        },
        "url": {
          "raw": "http://localhost:3000/webhook",
          "protocol": "http",
          "host": ["localhost"],
          "port": "3000",
          "path": ["webhook"]
        }
      }
    }
  ]
}

Example — Bruno

Save the text below as print-report.bru inside your Bruno collection folder.

meta {
  name: Print report - 2 copies
  type: http
  seq: 1
}

post {
  url: http://localhost:3000/webhook
  body: json
  auth: none
}

headers {
  Content-Type: application/json
  X-Webhook-Secret: 32F81205-ED2A-4D4C-B719-12F5A2D61012
}

body:json {
  {
    "ReportFileName": "C:\\ProgramData\\Articles\\Reports\\Label_2x1.fr3",
    "Parameters": {
      "PrintOptions_Copies": "2",
      "PrintOptions_Printer": "Zebra ZT230",
      "StartDate": "2026-01-01",
      "CompanyName": "Acme Corp"
    }
  }
}

Example — curl

Run from a Windows Command Prompt:

curl -X POST http://localhost:3000/webhook ^
  -H "Content-Type: application/json" ^
  -H "X-Webhook-Secret: 32F81205-ED2A-4D4C-B719-12F5A2D61012" ^
  -d "{\"ReportFileName\":\"C:\\ProgramData\\Articles\\Reports\\Label_2x1.fr3\",\"Parameters\":{\"PrintOptions_Copies\":\"2\",\"PrintOptions_Printer\":\"Zebra ZT230\",\"StartDate\":\"2026-01-01\",\"CompanyName\":\"Acme Corp\"}}"

Note: All parameter values — including numeric ones like PrintOptions_Copies — must be sent as JSON strings, not numbers. Articles converts them internally.