Introduction
The 2invoice API is organized around REST: predictable, resource-oriented URLs, conventional HTTP response codes, and JSON for all responses, including errors. All requests must be made over HTTPS with a valid access token.
Request Limits
The API accepts 60 requests per second per user. The limits are also communicated in the response headers: X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset.
Errors
Codes in the 2xx range indicate success, 4xx an error caused by the request, and 5xx an error on 2invoice's servers.
| Code | Description |
|---|---|
| 200 | Everything worked as expected. |
| 400 | Bad request, often a missing required parameter. |
| 401 | No valid API key provided. |
| 402 | The parameters were valid but the request failed. |
| 404 | The requested resource doesn't exist. |
| 422 | Validation failed (invalid or missing values). |
| 429 | Too many requests. Use exponential backoff. |
| 500, 502, 503, 504 | Something went wrong on 2invoice's end. |
Authentication
- In your 2invoice account, create an API user.
- Using that username and password, generate an access token.
- Send the token in the
Authorizationheader with the Bearer scheme.
Tokens expire after one year. It's recommended to run a script every few months that revokes the current token and generates a new one.
Generate token POST /auth/generate-token
Example request:
curl -X POST "https://api.2invoice.ro/auth/generate-token" \
-H "Accept: application/json" \
-d '{"username": "api_user", "password": "secret"}'
Example response:
{
"status": "OK",
"created_at": "2018-09-19 11:59:07",
"expires_at": "2019-09-19 11:59:07",
"token_type": "Bearer",
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImQxNDU0Zjk4MDA...."
}
Token information GET /auth/token-information
Example request:
curl -X GET "https://api.2invoice.ro/auth/token-information" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"token": {
"created_at": "2018-09-19 11:59:07",
"expires_at": "2019-09-19 11:59:07",
"revoked": false
}
}
Revoke token GET /auth/revoke-token
Revokes the token that made the request.
Example request:
curl -X GET "https://api.2invoice.ro/auth/revoke-token" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{ "status": "OK" }
Revoke all tokens GET /auth/revoke-all-tokens
Revokes all tokens for this user.
Example request:
curl -X GET "https://api.2invoice.ro/auth/revoke-all-tokens" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{ "status": "OK" }
Clients
List GET /clients
Returns a list of clients.
Example request:
curl -X GET "https://api.2invoice.ro/clients" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"clients": [
{
"id": 139881,
"company_type_id": 1,
"client_name": "Clientul Demo",
"company_name": "Clientul Demo",
"ssn_fiscal_code": "654321",
"trade_register_number": "J21/4321/4321",
"address": "str. Bulevard. nr. 10",
"country_iso": "RO",
"county_id": 40,
"city_id": 11925,
"email": "contact@client2invoice.ro",
"phone": "0787654321",
"bank_details": "Banca: Numele Bancii\nCont: RO00AAAA1B31007593840000",
"delegates": [
{
"id": 31329,
"first_name": "Popescu",
"last_name": "Ionescu",
"phone": "0712345678",
"email": "delegat@client2invoice.ro"
}
]
}
]
}
Create POST /clients
Creates a new client.
Example request:
curl -X POST "https://api.2invoice.ro/clients" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"company_type_id": 1, "company_name": "Clientul Demo", "ssn_fiscal_code": "654321"}'
Example response:
{
"status": "OK",
"client_id": 12345,
"delegates_ids": [12345, 12346]
}
Parameters
| Parameter | Type | Status | Description |
|---|---|---|---|
| company_type_id | numeric | required | 1 - Company, 2 - Person, 3 - Authorized person, 4 - Non-Profit Organization |
| company_name | string | - | Required if company_type_id is not 2 |
| last_name | string | - | Required if company_type_id is 2 |
| first_name | string | optional | |
| country_iso | string[2] | optional | ISO 3166-1 alpha-2. Default: RO. |
| county_id | numeric | optional | If country_iso is RO. Valid county ID. |
| city_id | numeric | optional | If country_iso is RO. Valid city ID. |
| county | string | optional | If country_iso isn't RO. |
| city | string | optional | If country_iso isn't RO. |
| address | string | optional | |
| postal_code | string | optional | |
| phone | string | optional | |
| fax | string | optional | |
| string | optional | ||
| website | string | optional | |
| bank_details | text | optional | |
| delegates.*.last_name | string | required | When delegates are sent |
| delegates.*.first_name | string | optional | |
| delegates.*.phone | string | optional | |
| delegates.*.email | string | optional | |
| delegates.*.ssn | string | optional | |
| delegates.*.id_series | string | optional | |
| delegates.*.id_number | numeric | optional | |
| delegates.*.transport | string | optional | |
| delegates.*.transport_number | string | optional | |
| delegates.*.mentions | string | optional |
Show GET /clients/{client}
Gets information for a specified client.
Example request:
curl -X GET "https://api.2invoice.ro/clients/{client}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"client": {
"id": 139881,
"company_type_id": 1,
"client_name": "Clientul Demo",
"company_name": "Clientul Demo",
"ssn_fiscal_code": "654321",
"address": "str. Bulevard. nr. 10",
"country_iso": "RO",
"email": "contact@client2invoice.ro",
"delegates": [ ... ]
}
}
Update PUT /clients/{client}
Updates an existing client. PATCH is also accepted. Same parameters as Create.
Example request:
curl -X PUT "https://api.2invoice.ro/clients/{client}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"company_type_id": 1, "company_name": "Clientul Demo (updated)"}'
Example response:
{
"status": "OK",
"client_id": 12345,
"delegates_ids": [12345, 12346]
}
Company branch offices
List GET /branch-offices
Returns a list of branch offices.
Example request:
curl -X GET "https://api.2invoice.ro/branch-offices" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"branch_offices": [],
"default": null
}
Custom statuses
Custom statuses are defined per account and enabled per document type. Accepted document_type values: invoice, delivery_note, reception_note, supplier_orders and picking (hyphenated variants such as delivery-note are also accepted). An invalid type returns 404.
List GET /custom-statuses/{document_type}
Returns the statuses enabled for a document type, ordered by the position of that type.
Example request:
curl -X GET "https://api.2invoice.ro/custom-statuses/supplier_orders" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"document_type": "supplier_orders",
"custom_statuses": [
{"id": 3, "name": "In lucru", "color": "#742b43", "position": 2},
{"id": 4, "name": "Livrata", "color": "#356ca7", "position": 5}
]
}
Get document status GET /custom-statuses/{document_type}/{document_id}
Returns the status currently set on a document. custom_status is null when no status is set or the referenced status no longer exists; custom_status_id always contains the stored value. custom_status_user_id is only present for document types that track it (invoice, supplier_orders).
Example request:
curl -X GET "https://api.2invoice.ro/custom-statuses/supplier_orders/67944" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"document_type": "supplier_orders",
"document_id": 67944,
"custom_status": {"id": 3, "name": "In lucru", "color": "#742b43", "position": 2},
"custom_status_id": 3,
"custom_status_updated_at": "2026-10-26 09:12:00",
"custom_status_user_id": 1839
}
Set document status PUT|POST /custom-statuses/{document_type}/{document_id}
Sets the status of a document. The status must be enabled for the given document type, otherwise 422 is returned. Sending custom_status: 0 clears the status.
Example request:
curl -X PUT "https://api.2invoice.ro/custom-statuses/supplier_orders/67944" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"custom_status": 3}'
Example response:
{
"status": "OK",
"message": "Statusul a fost actualizat cu succes.",
"document_type": "supplier_orders",
"document_id": 67944,
"custom_status": {"id": 3, "name": "In lucru", "color": "#742b43", "position": 2},
"custom_status_id": 3,
"custom_status_updated_at": "2026-10-26 09:12:00",
"custom_status_user_id": 1839
}
Parameters
| Parameter | Type | Status | Description |
|---|---|---|---|
| custom_status | numeric | required | Custom status ID, or 0 to clear the status. Must be enabled for the document type. |
Delivery notes
List GET /delivery-notes
Returns a paginated list of delivery notes.
Example request:
curl -X GET "https://api.2invoice.ro/delivery-notes" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"delivery_notes": {
"current_page": 1,
"per_page": 20,
"last_page": 1,
"total": 1,
"data": [
{
"id": 2997,
"issue_date": "2018-09-18",
"document_series": "A",
"document_series_delimiter": "/",
"document_number": "1",
"currency": "RON",
"total_price": 100,
"client": {"id": 2997, "client_name": "Clientul Demo"}
}
]
}
}
Create POST /delivery-notes
Creates a new delivery note. Same parameters as Invoices > Create, except add_receipt, due_date and show_due_date.
Example request:
curl -X POST "https://api.2invoice.ro/delivery-notes" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"client_id": 139881, "currency": "RON", "products": [{"name": "Produsul A", "quantity": 1, "unit_price": 100}]}'
Example response:
{ "status": "OK", "delivery_note_id": 12345 }
Show GET /delivery-notes/{delivery_note}
Gets information for a specified delivery note, including its products.
Example request:
curl -X GET "https://api.2invoice.ro/delivery-notes/{delivery_note}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"delivery_note": {
"id": 2997,
"client_id": 139881,
"issue_date": "2018-09-18",
"document_series": "A",
"document_number": "1",
"currency": "RON",
"total_price": 100,
"client": {"company_name": "Clientul Demo", "address": "str. Bulevard. nr. 10, Timisoara, Timis, 654321"},
"products": [
{
"id": 22551,
"name": "Produsul A",
"quantity": 1,
"unit_price": "100",
"total_price": "100",
"um": "buc",
"vat_value": "0.00"
}
]
}
}
Update PUT /delivery-notes/{delivery_note}
Updates an existing delivery note. PATCH is also accepted. Same parameters as Create.
Example response:
{ "status": "OK", "delivery_note_id": 12345 }
Remove DELETE /delivery-notes/{delivery_note}
Removes an existing delivery note.
Example response:
{ "status": "OK", "message": "Factura a fost stearsa cu succes." }
Base64 (PDF) GET /delivery-notes/{delivery_note}/base64
Returns the base64 code of the PDF file for the requested delivery note.
Example response:
{
"status": "OK",
"base64": "JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUg..."
}
Document series
List GET /document-series
Returns a list of document series.
Example request:
curl -X GET "https://api.2invoice.ro/document-series" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"document_series": [
{"id": 20587, "name": "F", "delimiter": "/", "start_number": "1", "type": "invoice"},
{"id": 20588, "name": "P", "delimiter": "/", "start_number": "1", "type": "proform"},
{"id": 20589, "name": "C", "delimiter": "/", "start_number": "1", "type": "receipt"},
{"id": 20590, "name": "A", "delimiter": "/", "start_number": "1", "type": "delivery_note"}
],
"default": null
}
Next number GET /document-series/{document_series}/next-number
Returns the next number for the specified document series.
Example request:
curl -X GET "https://api.2invoice.ro/document-series/{document_series}/next-number" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{ "status": "OK", "number": 2 }
Emails
Default inputs GET /emails/default-informations/{document_type}/{document_id}
Predefined values for from, to, subject and body when emailing a document.
Example request:
curl -X GET "https://api.2invoice.ro/emails/default-informations/invoice/401802" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"froms": [
{"type": "company", "name": "Demo 2invoice", "email": "contact@2invoice.ro"},
{"type": "user", "name": "Demo 2invoice", "email": "george.dragnea@demo2invoice.ro"}
],
"default_from": "user",
"to": "delegat@client2invoice.ro",
"subject": "Factura F/1",
"body": "Acest mesaj contine factura F/1 din data de 19.09.2018.",
"document_url": "http://.../document/inv4130dc.../download-pdf"
}
Send POST /emails/send
Sends an email with a document attached.
Example request:
curl -X POST "https://api.2invoice.ro/emails/send" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"from": "user", "to": "delegat@client2invoice.ro", "subject": "Factura F/1", "body": "Buna ziua", "document_type": "invoice", "document_id": 401802}'
Parameters
| Parameter | Type | Status | Description |
|---|---|---|---|
| from | string | required | company or user - who the email is sent on behalf of |
| to | string | required | Valid email address |
| subject | string | required | |
| body | string | required | |
| document_type | string | required | invoice, proform, delivery_note or receipt |
| document_id | numeric | required | The document ID to attach |
Inventories
List GET /inventories
Returns a list of inventories.
Example request:
curl -X GET "https://api.2invoice.ro/inventories" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"inventories": [
{
"id": 577,
"name": "Depozit A",
"branch_office_id": null,
"type": 1,
"administrator": "Ionescu Popescu",
"decimals": 4,
"download": "FIFO"
}
]
}
Invoices
List GET /invoices
Returns a paginated list of invoices.
Example request:
curl -X GET "https://api.2invoice.ro/invoices" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"invoices": {
"current_page": 1,
"per_page": 20,
"last_page": 1,
"total": 1,
"data": [
{
"id": 401802,
"issue_date": "2018-09-19",
"document_series": "F",
"document_series_delimiter": "/",
"document_number": "1",
"currency": "RON",
"total_price": 166.6,
"api_key": "inv4130dc1604b7f2a1cff70dddd9647d891537350859",
"client": {"id": 402113, "client_name": "Clientul Demo"}
}
]
}
}
Create POST /invoices
Creates a new invoice.
Example request:
curl -X POST "https://api.2invoice.ro/invoices" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"client_id": 139881, "currency": "RON", "products": [{"name": "Produsul A", "quantity": 2, "unit_price": 20}]}'
Example response:
{
"status": "OK",
"invoice_id": 12345,
"api_key": "inv4130dc1604b7f2a1cff70dddd9647d891537350859"
}
Parameters
| Parameter | Type | Status | Description |
|---|---|---|---|
| client_id | numeric | required* | Must be a valid client ID. *Or pass a client object with the fields from Clients > Create |
| document_series_id | numeric | optional | Valid document series ID. If not set, the account's default invoice series is used. |
| document_number | numeric | optional | If not set, the next number for the series is used. |
| issue_date | date | optional | If not set, the current day is used. |
| additional_text | text | optional | Text shown above the products table. |
| observation | text | optional | Text shown below the products table. |
| delegate_id | numeric | optional | Valid delegate ID belonging to the client. |
| representant_id | numeric | optional | Valid user ID. If not set, no representant appears on the document. |
| branch_office_id | numeric | optional | Valid branch office ID. |
| currency | string[3] | required | ISO 4217 currency code, e.g. RON, EUR. |
| currency_display | string | - | Required if currency is not RON: ron, currency, ron_currency, currency_ron |
| currency_rate | numeric | optional | If not set, the last BNR rate is used. |
| due_date | date | - | Required if show_due_date is true. |
| show_due_date | boolean | optional | Show the due date on the document. |
| inventory_id | numeric | optional | Valid inventory ID. |
| update_stock | boolean | optional | Default false. Update the inventory stock. |
| products.*.code | string | optional | Product code, when working with inventories. |
| products.*.name | text | optional | |
| products.*.description | string | optional | |
| products.*.um | string | optional | Unit of measure. |
| products.*.quantity | numeric | optional | |
| products.*.unit_price | numeric | optional | |
| products.*.total_price | numeric | optional | |
| products.*.vat_id | numeric | optional | Valid VAT ID. If not set, the default VAT is used. |
| products.*.discount_description | text | optional | |
| products.*.discount_percent | numeric | optional | |
| products.*.discount_unit_price | numeric | optional | |
| products.*.discount_total_price | numeric | optional | |
| accept_credit_card | boolean | optional | The payment method must be enabled in your account. |
| accept_paypal | boolean | optional | The payment method must be enabled in your account. |
| accept_bank_transfer | boolean | optional | The payment method must be enabled in your account. |
| language_id | numeric | optional | Valid language ID. |
| template_id | numeric | optional | Valid template ID. |
| add_receipt | boolean | optional | Automatically add a receipt for this invoice. |
Show GET /invoices/{invoice}
Gets information for a specified invoice, including its products.
Example request:
curl -X GET "https://api.2invoice.ro/invoices/{invoice}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"invoice": {
"id": 401802,
"client_id": 139881,
"issue_date": "2018-09-19",
"document_series": "F",
"document_number": "1",
"currency": "RON",
"total_price": 166.6,
"client": {"company_name": "Clientul Demo", "address": "str. Bulevard. nr. 10, Timisoara, Timis, 654321"},
"products": [
{
"id": 925028,
"code": "P123",
"name": "P123 Produs din gestiune",
"quantity": 2,
"unit_price": "20",
"total_price": "47.6",
"um": "buc",
"vat_value": "7.6",
"vat_id": 133659
}
]
}
}
Update PUT /invoices/{invoice}
Updates an existing invoice. PATCH is also accepted. Same parameters as Create.
Example response:
{ "status": "OK", "invoice_id": 12345 }
Remove DELETE /invoices/{invoice}
Removes an existing invoice.
Example response:
{ "status": "OK", "message": "Factura a fost stearsa cu succes." }
Base64 (PDF) GET /invoices/{invoice}/base64
Returns the base64 code of the PDF file for the requested invoice.
Example response:
{
"status": "OK",
"base64": "JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUg..."
}
Unpaid amount GET /invoices/{invoice}/amount-due
Returns the unpaid amount for the requested invoice.
Example request:
curl -X GET "https://api.2invoice.ro/invoices/{invoice}/amount-due" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"amount_due": 0,
"amount_due_ron": 0,
"currency": "RON",
"currency_display": "ron"
}
Languages
List GET /languages
Returns a list of languages.
Example request:
curl -X GET "https://api.2invoice.ro/languages" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"languages": [
{"id": 127788, "name": "romana"},
{"id": 127789, "name": "engleza"},
{"id": 127790, "name": "romana/engleza"}
]
}
Map
Countries GET /map/countries
Returns a list of countries with their ISO codes.
Example request:
curl -X GET "https://api.2invoice.ro/map/countries" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"countries": [
{"iso": "RO", "name": "Romania"},
{"iso": "DE", "name": "Germany"}
]
}
Counties GET /map/counties
Returns a list of Romanian counties.
Example request:
curl -X GET "https://api.2invoice.ro/map/counties" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"counties": [
{"id": 1, "name": "Alba"},
{"id": 40, "name": "Timis"}
]
}
Cities GET /map/cities/{county?}
Returns a list of cities. Pass a county ID (e.g. /map/cities/11) to get the cities of one county.
Example request:
curl -X GET "https://api.2invoice.ro/map/cities/{county?}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"cities": [
{"id": 3479, "county_id": 11, "name": "Bucuresti"}
]
}
Products
List GET /products
Returns a paginated list of products, sorted by code. Without inventory_id the account products are returned; with it, the products of that inventory (including price, stock and custom fields).
Example request:
curl -X GET "https://api.2invoice.ro/products?inventory_id=577&page=1&per_page=50" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"current_page": 1,
"total_pages": 1,
"per_page": 50,
"total": 1,
"products": [
{
"inventory_id": 577,
"inventory_product_id": 22646,
"code": "P123",
"manufacturer": "",
"category": "",
"name": "P123 Produs din gestiune",
"description": "Descrierea produsului",
"price": "14.38",
"price_with_vat": "",
"currency": "RON",
"quantity": 10,
"type": 0,
"um": "buc",
"ums": [{"um": "buc"}],
"vat": 19,
"first_price": 1,
"pu_acquisition": "10.00",
"pu_with_vat_acquisition": "12.10",
"inventory_fields": []
}
]
}
Account products (no inventory_id) have a simpler shape: {"id": 123, "name": "Produs A", "code": "P123", "description": "", "from_inventory": "no"}.
Parameters
| Parameter | Type | Status | Description |
|---|---|---|---|
| inventory_id | numeric | optional | Return the products of that inventory instead of the account products. |
| page | numeric | optional | Page number, starting at 1. Default 1. |
| per_page | numeric | optional | Results per page. Default 500, max 1000. |
Search GET /products/search
Returns products whose name or code contains the keyword. Hard cap: 30 account products + 30 inventory products. An empty query returns {"status": "OK", "data": []}.
Example request:
curl -X GET "https://api.2invoice.ro/products/search?query=P123&inventory_id=577" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"products": [
{"id": 123, "name": "Produs A", "code": "P123", "from_inventory": "no"},
{"id": 22646, "name": "Produs B", "code": "P456", "from_inventory": "yes"}
]
}
Parameters
| Parameter | Type | Status | Description |
|---|---|---|---|
| query | string | optional | Keyword matched against the product name or code. Empty query returns an empty list. |
| inventory_id | numeric | optional | Also search the products of that inventory. |
Show GET /products/show/{from_inventory}/{id_or_code}/{parameterType?}
Returns a product with its name and description processed for documents, plus stock (quantity) for inventory products.
Example request:
curl -X GET "https://api.2invoice.ro/products/show/yes/22646" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"product": {
"inventory_id": 577,
"inventory_product_id": 22646,
"code": "P123",
"manufacturer": "",
"category": "",
"name": "P123 Produs din gestiune",
"description": "Descrierea produsului",
"price": "14.38",
"currency": "RON",
"quantity": 10,
"type": 0,
"um": "buc",
"vat": 19,
"first_price": 1,
"pu_acquisition": "10.00",
"pu_with_vat_acquisition": "12.10",
"inventory_fields": []
}
}
Parameters
| Parameter | Type | Status | Description |
|---|---|---|---|
| from_inventory | string | required | yes or no |
| id_or_code | string | required | Product ID, or product code when parameterType is cod |
| parameterType | string | optional | id (default) or cod. Only used when from_inventory is yes. |
Show processed GET /products/processed/{from_inventory}/{product}
Returns a product with its name and description processed, as configured in the document display settings.
Example request:
curl -X GET "https://api.2invoice.ro/products/processed/yes/22646" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"product": {
"inventory_id": 577,
"inventory_product_id": 22646,
"code": "P123",
"manufacturer": "",
"category": "",
"price": "",
"currency": "RON",
"quantity": 1,
"type": 0,
"um": "buc",
"ums": [],
"vat": 19,
"first_price": 1,
"name": "P123 Produs din gestiune",
"description": "Descrierea produsului din gestiune"
}
}
Parameters
| Parameter | Type | Status | Description |
|---|---|---|---|
| from_inventory | string | required | yes or no |
| product | numeric | required | Product ID (account product for no, inventory product ID for yes) |
Proforms
List GET /proforms
Returns a paginated list of proforms.
Example request:
curl -X GET "https://api.2invoice.ro/proforms" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"proforms": {
"current_page": 1,
"per_page": 20,
"last_page": 1,
"total": 1,
"data": [
{
"id": 28749,
"issue_date": "2018-09-19",
"document_series": "P",
"document_number": "1",
"currency": "RON",
"total_price": 166.6,
"client": {"id": 28745, "client_name": "Clientul Demo"}
}
]
}
}
Create POST /proforms
Creates a new proform. Same parameters as Invoices > Create, except add_receipt.
Example request:
curl -X POST "https://api.2invoice.ro/proforms" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"client_id": 139881, "currency": "RON", "products": [{"name": "Produsul A", "quantity": 2, "unit_price": 20}]}'
Example response:
{ "status": "OK", "proform_id": 12345 }
Show GET /proforms/{proform}
Gets information for a specified proform, including its products.
Example request:
curl -X GET "https://api.2invoice.ro/proforms/{proform}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"proform": {
"id": 28749,
"client_id": 139881,
"issue_date": "2018-09-19",
"document_series": "P",
"document_number": "1",
"currency": "RON",
"total_price": 166.6,
"client": {"company_name": "Clientul Demo"},
"products": [ ... ]
}
}
Update PUT /proforms/{proform}
Updates an existing proform. PATCH is also accepted. Same parameters as Create.
Example response:
{ "status": "OK", "proform_id": 12345 }
Remove DELETE /proforms/{proform}
Removes an existing proform.
Example response:
{ "status": "OK", "message": "Factura a fost stearsa cu succes." }
Base64 (PDF) GET /proforms/{proform}/base64
Returns the base64 code of the PDF file for the requested proform.
Example response:
{
"status": "OK",
"base64": "JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUg..."
}
Receipts
List GET /receipts
Returns a paginated list of receipts.
Example request:
curl -X GET "https://api.2invoice.ro/receipts" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"receipts": {
"current_page": 1,
"per_page": 15,
"last_page": 1,
"total": 1,
"data": [
{
"id": 74202,
"issue_date": "2018-09-19",
"document_series": "C",
"document_number": "1",
"currency": "RON",
"total": "166.6",
"client": {"id": 74194, "client_name": "Clientul Demo"}
}
]
}
}
Create POST /receipts
Creates a new receipt.
Example request:
curl -X POST "https://api.2invoice.ro/receipts" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token" \
-d '{"issue_date": "2018-09-19", "document_series_id": 20589, "associate_invoice": true, "client_id": 139881, "invoices": [{"invoice_id": 401802}], "total": 166.6, "currency": "RON"}'
Example response:
{ "status": "OK", "receipt_id": 12345 }
Parameters
| Parameter | Type | Status | Description |
|---|---|---|---|
| issue_date | date | required | |
| document_series_id | numeric | required | Valid receipt series ID. |
| document_number | numeric | optional | If not set, the next number for the series is used. |
| associate_invoice | boolean | required | Whether the receipt is associated with invoices. |
| total | numeric | required | |
| currency | string[3] | required | ISO 4217 currency code. |
| client_id | numeric | - | Required if associate_invoice is true. |
| invoices.*.invoice_id | numeric | - | Required if associate_invoice is true. |
| company_name | string | - | Required if associate_invoice is false (receipt without an invoice). |
| branch_office_id | numeric | optional | Valid branch office ID. |
| language_id | numeric | optional | Valid language ID. |
| template_id | numeric | optional | Valid template ID. |
Show GET /receipts/{receipt}
Gets information for a specified receipt.
Example request:
curl -X GET "https://api.2invoice.ro/receipts/{receipt}" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"receipt": {
"id": 74202,
"client_id": 139881,
"issue_date": "2018-09-19",
"document_series": "C",
"document_number": "1",
"currency": "RON",
"total": "166.6",
"representing": "contravaloare factura: F/1",
"invoices": [
{"id": 401802, "document_series": "F", "document_number": "1", "amount_due": 0, "currency": "RON"}
],
"client": {"client_name": "Clientul Demo"}
}
}
Update PUT /receipts/{receipt}
Updates an existing receipt. PATCH is also accepted. Same parameters as Create.
Example response:
{ "status": "OK", "receipt_id": 12345 }
Remove DELETE /receipts/{receipt}
Removes an existing receipt.
Example response:
{ "status": "OK", "message": "Chitanta a fost stearsa cu succes." }
Base64 (PDF) GET /receipts/{receipt}/base64
Returns the base64 code of the PDF file for the requested receipt.
Example response:
{
"status": "OK",
"base64": "JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUg..."
}
Supplier orders
Supplier orders are the orders placed to suppliers. Recurring orders are excluded from the list. They use the custom statuses of the supplier_orders document type (see Custom statuses).
List GET /supplier_orders
Returns a paginated list of supplier orders, most recent first. custom_status is null when no status is set or the referenced status no longer exists; custom_status_id always contains the stored value.
Example request:
curl -X GET "https://api.2invoice.ro/supplier_orders?supplier_id=30116&date_from=2026-01-01" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"supplier_orders": {
"current_page": 1,
"per_page": 20,
"last_page": 1,
"total": 1,
"data": [
{
"id": 67944,
"top_number": "64694",
"date_on": "2026-10-26",
"delivery_date": null,
"supplier_id": 30116,
"supplier_name": "SC Ex. SRL",
"user_id": 1839,
"order_type": "manual",
"proces_logistic_name": null,
"custom_status_id": 7095,
"custom_status": {"id": 7095, "name": "In lucru", "color": "#742b43", "position": 2},
"custom_status_updated_at": "2026-10-26 09:12:00",
"custom_status_user_id": 1839,
"reception_note_id": null
}
]
}
}
Parameters
| Parameter | Type | Status | Description |
|---|---|---|---|
| supplier_id | numeric | optional | Filter by supplier. |
| date_from | date | optional | Filter by order date (date_on >=). |
| date_to | date | optional | Filter by order date (date_on <=). |
| custom_status | numeric | optional | Filter by custom status ID. |
| keyword | string | optional | Matches the order number, the supplier name or a product code from the order items. |
| sort | string | optional | date (default) or position (by custom status position). |
| page | numeric | optional | Page number, starting at 1. Default 1. |
| per_page | numeric | optional | Results per page. Default 20, max 1000. |
Items GET /supplier_orders/{supplier_order}/items
Returns the items of a supplier order (deleted items are excluded). Item status is the reception status: 0 = nothing received, 1 = fully received, >1 = partially received (null when not set). The received quantity is quantity when status = 1 and quantity_received when status > 1.
Example request:
curl -X GET "https://api.2invoice.ro/supplier_orders/67944/items" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"supplier_order_id": 67944,
"items": [
{
"id": 123456,
"code": "1234567890123",
"product_name": "Produs X",
"um": "buc",
"quantity": "10",
"quantity_received": 5,
"pu": "14.38",
"currency": "RON",
"status": 2,
"inventory_id": 736,
"inventory_product_id": 98765
}
]
}
Templates
List GET /templates
Returns a list of templates.
Example request:
curl -X GET "https://api.2invoice.ro/templates" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"templates": [
{"id": 15459, "name": "Servicii 3"}
]
}
Users (Representants)
List GET /users
Returns a list of users.
Example request:
curl -X GET "https://api.2invoice.ro/users" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"users": [
{
"id": 16449,
"first_name": "Demo",
"last_name": "2invoice",
"phone": "0746310333",
"email": "george.dragnea@demo2invoice.ro"
}
]
}
VATs
List GET /vats
Returns a list of VATs.
Example request:
curl -X GET "https://api.2invoice.ro/vats" \
-H "Accept: application/json" \
-H "Authorization: Bearer generated_access_token"
Example response:
{
"status": "OK",
"vats": [
{"id": 133659, "name": "19%", "value": 19, "notice": null},
{"id": 133660, "name": "9%", "value": 9, "notice": ""},
{"id": 133665, "name": "Inversa", "value": 0, "notice": "Taxa inversa"}
]
}