Skip to content

Document Generation (OPG)

The OPG integration API allows PDF documents to be generated. Clients can interact directly with this API for bulk document generation.

Authentication

The client authenticates using a bearer token for requests other than PDF document generation.

This token must be sent in the Authorization header of each HTTP request. For example:

POST https://opg.obmessage.ai/api/v1/templates/
Authorization: Bearer {{JWT_TOKEN}}

Create template

HTTP request to create a template

POST https://opg.obmessage.ai/api/v1/templates/
X-Api-Key: {{API_KEY}}
Content-Type: application/json
{
    "name": "string",
    "max_data_per_page": 16,
    "max_rows_per_page": 24,
    "status": true,
    "fixed_key_password": "string",
    "master_password": "string"
}

Try it in Postman

Field description

Field Description Required
name PDF template name. Yes
max_data_per_page In dynamic tables, indicates how many rows will be filled with data. Yes
max_rows_per_page In dynamic tables, indicates how many rows the table will have. Yes
status Template status. Yes
fixed_key_password Dynamic password field for each document. No
master_password Master password. No

Sample JSON payload

POST https://opg.obmessage.ai/api/v1/templates/
Authorization: Bearer {{JWT_TOKEN}}
Content-Type: application/json
{
    "name": "EstadoTC",
    "max_data_per_page": 16,
    "max_rows_per_page": 24,
    "status": true,
    "fixed_key_password": "",
    "master_password": ""
}

Response

The API returns 200 OK with the template code:

{
    "id": "{{ID-TEMPLATE}}"
}

Edit template

Send the template code with the modified data.

PATCH https://opg.obmessage.ai/api/v1/templates/{{ID-TEMPLATE}}
Authorization: Bearer {{JWT_TOKEN}}
Content-Type: application/json
{
    "name": "EstadoTC",
    "max_data_per_page": 16,
    "max_rows_per_page": 24,
    "status": true,
    "fixed_key_password": "",
    "master_password": "ofimatic"
}

Try it in Postman

Template configuration

Send the template code with the document configuration.

POST https://opg.obmessage.ai/api/v1/templates/{{ID-TEMPLATE}}/settings
Authorization: Bearer {{JWT_TOKEN}}
Content-Type: application/json
{
    "orientation": "string",
    "margin_left": 0.0,
    "margin_right": 0.0,
    "margin_top": 0.0,
    "margin_bottom": 0.0,
    "page_height": 279.4,
    "page_width": 215.9,
    "dpi": 200
}

Field description

Field Description Required
orientation Document orientation. Example: portrait. Yes
margin_left Left document margin in millimeters. Yes
margin_right Right document margin in millimeters. Yes
margin_top Top document margin in millimeters. Yes
margin_bottom Bottom document margin in millimeters. Yes
page_height Document height in millimeters. Yes
page_width Document width in millimeters. Yes
dpi Pixel resolution. Yes

Sample JSON payload

POST https://opg.obmessage.ai/api/v1/templates/{{ID-TEMPLATE}}/settings
Authorization: Bearer {{JWT_TOKEN}}
Content-Type: application/json
{
    "orientation": "portrait",
    "margin_left": 0.0,
    "margin_right": 0.0,
    "margin_top": 0.0,
    "margin_bottom": 10.0,
    "page_height": 279.4,
    "page_width": 215.9,
    "dpi": 200
}

Edit template configuration

Send the template code with the modified configuration.

PATCH https://opg.obmessage.ai/api/v1/templates/{{ID-TEMPLATE}}/settings
Authorization: Bearer {{JWT_TOKEN}}
Content-Type: application/json
{
    "orientation": "portrait",
    "margin_left": 0.0,
    "margin_right": 0.0,
    "margin_top": 0.0,
    "margin_bottom": 10.0,
    "page_height": 279.4,
    "page_width": 215.9,
    "dpi": 200
}

Variable field mapping

Creation and editing

Send the template code with the data mapping.

PUT https://opg.obmessage.ai/api/v1/templates/{{ID-TEMPLATE}}/mappings
Authorization: Bearer {{JWT_TOKEN}}
Content-Type: application/json
{
    "fixed_keys": [
        "NAME",
        "EMAIL",
        "ADDRESS",
        "CARDTYPE",
        "CARDNUMBER",
        "CORTE",
        "CICLO",
        "FACTURACION",
        "DISPONIBLE",
        "BALANCEANTERIOR",
        "PAGOS",
        "COMPRAS",
        "BALANCECORTE",
        "PAGUEANTESFECHA",
        "DISPONIBLEUS",
        "BALANCEANTERIORUS",
        "PAGOSUS",
        "COMPRASUS",
        "BALANCECORTEUS",
        "CUOTASVENCIDAS",
        "IMPORTEVENCIDO",
        "PAGOMINIMOPUNTOSOFIMATIC",
        "PAGOMINIMO",
        "PAGOTOTALPUNTOSOFIMATIC",
        "PAGOTOTAL",
        "CUOTASVENCIDASUS",
        "IMPORTEVENCIDOUS",
        "PAGOMINIMOPUNTOSOFIMATICUS",
        "PAGOMINIMOUS",
        "CARDNUMBERUS",
        "PAGOTOTALPUNTOSOFIMATICUS",
        "PAGOTOTALUS",
        "TOTALDECOMPRAS",
        "CUOTAPUNTOSOFIMATIC"
    ],
    "dynamic_keys": [
        {
            "key": "fecha_transaccion",
            "td_code": "<td style=\"text-align:center\">",
            "index": 0
        },
        {
            "key": "fecha_entrada",
            "td_code": "<td style=\"text-align:center\">",
            "index": 1
        },
        {
            "key": "numero_referencia",
            "td_code": "<td style=\"text-align:center\">",
            "index": 2
        },
        {
            "key": "concepto",
            "td_code": "<td style=\"text-align:center\">",
            "index": 3
        },
        {
            "key": "debito",
            "td_code": "<td style=\"text-align:center\">",
            "index": 4
        },
        {
            "key": "credito",
            "td_code": "<td style=\"text-align:center\">",
            "index": 5
        }
    ]
}

Try it in Postman

Field Description Required
fixed_keys Fields with fixed values inside the document. Yes
dynamic_keys Fields with dynamic values inside a table. Yes

Create document

Create document body using an HTML template

The document is built using HTML templates, which can be uploaded using the html_content, html_header, and html_footer tags associated with the created template ID.

For more details about building the template, see the html_readme.pdf file.

POST https://opg.obmessage.ai/api/v1/templates/{{ID-TEMPLATE}}/html
Authorization: Bearer {{JWT_TOKEN}}
Content-Type: multipart/form-data
--form 'html_content=@"/path/to/file"' \
--form 'html_header=@"/path/to/file"' \
--form 'html_footer=@"/path/to/file"'

Try it in Postman

Field Description Required
html_content Document content. Yes
html_header Document header. No
html_footer Document footer. No

Edit HTML template

PUT https://opg.obmessage.ai/api/v1/templates/{{ID-TEMPLATE}}/html
Authorization: Bearer {{JWT_TOKEN}}
Content-Type: multipart/form-data
--form 'html_content=@"/path/to/file"' \
--form 'html_header=@"/path/to/file"' \
--form 'html_footer=@"/path/to/file"'

Generate document

Authentication

The client authenticates using an API_KEY, which will be provided by Ofimatic SRL.

This API_KEY must be sent in the X-Api-Key header of each HTTP request.

Generate PDF

POST https://opg.obmessage.ai/api/v1/templates/{{ID-TEMPLATE}}/generate-pdf
X-Api-Key: {{API_KEY}}
Content-Type: application/json
{
    "fixed_data": {},
    "dynamic_data": [
        {}
    ]
}
Field Description Required
fixed_data Fixed fields defined with their values. Yes
dynamic_data Array of objects containing dynamic fields and their values. Yes

Sample JSON payload

{
    "fixed_data": {
        "NAME": "Juan Ant. Perez de Los Santos",
        "EMAIL": "demo@ofimatic.com",
        "ADDRESS": "Calle Nicolás Ureña de Mendoza #3, Los Prados, Santo Domingo",
        "CARDTYPE": "Clasica Internacional",
        "CARDNUMBER": "**** **** **** 1111",
        "CORTE": "30/04/2022",
        "CICLO": "5",
        "FACTURACION": "21",
        "DISPONIBLE": "100,000.00",
        "BALANCEANTERIOR": "40,000.00",
        "PAGOS": "10,000.00",
        "COMPRAS": "50.00",
        "BALANCECORTE": "5,900.00",
        "PAGUEANTESFECHA": "24/05/2022",
        "DISPONIBLEUS": "2,000.00",
        "BALANCEANTERIORUS": "1,000.00",
        "PAGOSUS": "1.00",
        "COMPRASUS": "165.00",
        "BALANCECORTEUS": "235.55",
        "CUOTASVENCIDAS": "2",
        "IMPORTEVENCIDO": "100.00",
        "PAGOMINIMOPUNTOSOFIMATIC": "2,300.00",
        "PAGOMINIMO": "523.00",
        "PAGOTOTALPUNTOSOFIMATIC": "963.00",
        "PAGOTOTAL": "3,543.22",
        "CUOTASVENCIDASUS": "2",
        "IMPORTEVENCIDOUS": "522.00",
        "PAGOMINIMOPUNTOSOFIMATICUS": "12.00",
        "PAGOMINIMOUS": "1,232.00",
        "CARDNUMBERUS": "**** **** **** 1112",
        "PAGOTOTALPUNTOSOFIMATICUS": "1,235.55",
        "PAGOTOTALUS": "3,543.01",
        "TOTALDECOMPRAS": "1,235.22",
        "CUOTAPUNTOSOFIMATIC": "0",
        "BALANCEALCORTE": "242.00",
        "CREDITODISPONIBLE": "50.00"
    },
    "dynamic_data": [
        {
            "fecha_transaccion": "2020-01-01",
            "fecha_entrada": "2020-01-01",
            "numero_referencia": "123456789123456789",
            "concepto": "Pruebas",
            "debito": "RD$ 1,000.00",
            "credito": "RD$ 2,000.00"
        },
        {
            "fecha_transaccion": "2020-01-01",
            "fecha_entrada": "2020-01-01",
            "numero_referencia": "123456789123456789",
            "concepto": "Pruebas",
            "debito": "RD$ 3,000.00",
            "credito": "RD$ 4,000.00"
        }
    ]
}

Try it in Postman

Response

The API returns 200 OK with the generation code and the document in base64:

{
    "data": {
        "id": "{{ID-FILE}}",
        "file": "{{BASE-FILE}}"
    }
}

Query

Query generated documents

POST https://opg.obmessage.ai/api/v1/templates/{{ID-TEMPLATE}}/requests/{{ID-REQUEST}}
Authorization: Bearer {{JWT_TOKEN}}
Content-Type: application/json

Try it in Postman