POST
/
api
/
external
/
v2
/
products
Create a product
curl --request POST \
  --url https://app.pennylane.com/api/external/v2/products \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "label": "Product 1",
  "description": "This is product 1",
  "external_reference": "0e67fc3c-c632-4feb-ad34-e18ed5fbf66a",
  "price_before_tax": 12.5,
  "vat_rate": "FR_200",
  "unit": "piece",
  "currency": "EUR",
  "reference": "REF-123",
  "ledger_account_id": 42
}'
{
  "id": 1,
  "label": "Product 1",
  "description": "This is product 1",
  "external_reference": "0e67fc3c-c632-4feb-ad34-e18ed5fbf66a",
  "price_before_tax": 12.5,
  "vat_rate": "FR_200",
  "price": 13.6,
  "unit": "piece",
  "currency": "EUR",
  "reference": "REF-123",
  "ledger_account": {
    "id": 123
  },
  "archived_at": "2023-09-30T10:08:08.146343Z",
  "created_at": "2023-08-30T10:08:08.146343Z",
  "updated_at": "2023-08-30T10:08:08.146343Z"
}

Authorizations

Authorization
string
header
required

The access token received from the authorization server in the OAuth 2.0 flow.

Body

application/json
label
string
required

Product label

Example:

"Product 1"

price_before_tax
string
required

Product price without taxes

Example:

12.5

vat_rate
enum<string>
required

Product VAT rate. A 20% VAT in France is FR_200.

Available options:
FR_1_05,
FR_1_75,
FR_09,
FR_21,
FR_40,
FR_50,
FR_55,
FR_60,
FR_65,
FR_85,
FR_92,
FR_100,
FR_130,
FR_15_385,
FR_160,
FR_196,
FR_200,
AD_10,
AD_45,
AD_95,
AT_100,
AT_130,
AT_200,
BE_60,
BE_120,
BE_210,
BG_90,
BG_200,
CH_25,
CH_26,
CH_37,
CH_38,
CH_77,
CH_81,
CY_30,
CY_50,
CY_90,
CY_190,
CZ_100,
CZ_120,
CZ_150,
CZ_210,
DE_70,
DE_190,
DK_250,
EE_90,
EE_200,
EE_220,
EE_240,
ES_40,
ES_100,
ES_210,
FI_100,
FI_140,
FI_240,
FI_255,
GB_50,
GB_200,
GR_60,
GR_130,
GR_240,
HR_50,
HR_130,
HR_250,
HU_50,
HU_180,
HU_270,
IE_48,
IE_90,
IE_135,
IE_210,
IE_230,
IT_40,
IT_50,
IT_100,
IT_220,
LT_50,
LT_90,
LT_210,
LU_30,
LU_70,
LU_80,
LU_120,
LU_130,
LU_140,
LU_160,
LU_170,
LV_50,
LV_120,
LV_210,
MC_09,
MC_21,
MC_55,
MC_85,
MC_100,
MC_200,
MT_50,
MT_70,
MT_180,
MU_150,
NL_90,
NL_210,
PL_50,
PL_80,
PL_230,
PT_60,
PT_130,
PT_160,
PT_230,
RO_50,
RO_90,
RO_190,
SE_60,
SE_120,
SE_250,
SI_50,
SI_95,
SI_220,
SK_100,
SK_190,
SK_200,
SK_230,
NO_120,
NO_150,
NO_250,
exempt,
extracom,
intracom_21,
intracom_55,
intracom_85,
intracom_100,
crossborder,
FR_85_construction,
FR_100_construction,
FR_200_construction,
mixed
Example:

"FR_200"

description
string

Product description. Maximum 5,000 characters.

Example:

"This is product 1"

external_reference
string

You can use your own unique value when creating the product. If not provided, Pennylane will pick one for you. Value must be unique

Example:

"0e67fc3c-c632-4feb-ad34-e18ed5fbf66a"

unit
string

Product unit

Example:

"piece"

currency
enum<string>
default:EUR
Available options:
EUR,
USD,
GBP,
AED,
AFN,
ALL,
AMD,
ANG,
AOA,
ARS,
AUD,
AWG,
AZN,
BAM,
BBD,
BDT,
BGN,
BHD,
BIF,
BMD,
BND,
BOB,
BRL,
BSD,
BTN,
BWP,
BYN,
BYR,
BZD,
CAD,
CDF,
CHF,
CLF,
CLP,
CNY,
COP,
CRC,
CUC,
CUP,
CVE,
CZK,
DJF,
DKK,
DOP,
DZD,
EGP,
ERN,
ETB,
FJD,
FKP,
GEL,
GGP,
GHS,
GIP,
GMD,
GNF,
GTQ,
GYD,
HKD,
HNL,
HRK,
HTG,
HUF,
IDR,
ILS,
IMP,
INR,
IQD,
IRR,
ISK,
JEP,
JMD,
JOD,
JPY,
KES,
KGS,
KHR,
KMF,
KPW,
KRW,
KWD,
KYD,
KZT,
LAK,
LBP,
LKR,
LRD,
LSL,
LTL,
LVL,
LYD,
MAD,
MDL,
MGA,
MKD,
MMK,
MNT,
MOP,
MRO,
MUR,
MVR,
MWK,
MXN,
MYR,
MZN,
NAD,
NGN,
NIO,
NOK,
NPR,
NZD,
OMR,
PAB,
PEN,
PGK,
PHP,
PKR,
PLN,
PYG,
QAR,
RON,
RSD,
RUB,
RWF,
SAR,
SBD,
SCR,
SDG,
SEK,
SGD,
SHP,
SLL,
SOS,
SRD,
STD,
SVC,
SYP,
SZL,
THB,
TJS,
TMT,
TND,
TOP,
TRY,
TTD,
TWD,
TZS,
UAH,
UGX,
UYU,
UZS,
VEF,
VND,
VUV,
WST,
XAF,
XCD,
XDR,
XOF,
XPF,
YER,
ZAR,
ZMK,
ZMW,
ZWL
reference
string

Product reference

Example:

"REF-123"

ledger_account_id
integer
Example:

42

Response

The created product

id
integer
required
Example:

1

label
string
required

Product label

Example:

"Product 1"

description
string
required

Product description

Example:

"This is product 1"

external_reference
string
required

The unique external reference assigned to this Product, assigned on creation either by you or Pennylane. (Same attribute as source_id in the API v1)

Example:

"0e67fc3c-c632-4feb-ad34-e18ed5fbf66a"

price_before_tax
string
required

Product price without taxes

Example:

12.5

vat_rate
enum<string>
required

Product VAT rate. A 20% VAT in France is FR_200.

Available options:
FR_1_05,
FR_1_75,
FR_09,
FR_21,
FR_40,
FR_50,
FR_55,
FR_60,
FR_65,
FR_85,
FR_92,
FR_100,
FR_130,
FR_15_385,
FR_160,
FR_196,
FR_200,
AD_10,
AD_45,
AD_95,
AT_100,
AT_130,
AT_200,
BE_60,
BE_120,
BE_210,
BG_90,
BG_200,
CH_25,
CH_26,
CH_37,
CH_38,
CH_77,
CH_81,
CY_30,
CY_50,
CY_90,
CY_190,
CZ_100,
CZ_120,
CZ_150,
CZ_210,
DE_70,
DE_190,
DK_250,
EE_90,
EE_200,
EE_220,
EE_240,
ES_40,
ES_100,
ES_210,
FI_100,
FI_140,
FI_240,
FI_255,
GB_50,
GB_200,
GR_60,
GR_130,
GR_240,
HR_50,
HR_130,
HR_250,
HU_50,
HU_180,
HU_270,
IE_48,
IE_90,
IE_135,
IE_210,
IE_230,
IT_40,
IT_50,
IT_100,
IT_220,
LT_50,
LT_90,
LT_210,
LU_30,
LU_70,
LU_80,
LU_120,
LU_130,
LU_140,
LU_160,
LU_170,
LV_50,
LV_120,
LV_210,
MC_09,
MC_21,
MC_55,
MC_85,
MC_100,
MC_200,
MT_50,
MT_70,
MT_180,
MU_150,
NL_90,
NL_210,
PL_50,
PL_80,
PL_230,
PT_60,
PT_130,
PT_160,
PT_230,
RO_50,
RO_90,
RO_190,
SE_60,
SE_120,
SE_250,
SI_50,
SI_95,
SI_220,
SK_100,
SK_190,
SK_200,
SK_230,
NO_120,
NO_150,
NO_250,
exempt,
extracom,
intracom_21,
intracom_55,
intracom_85,
intracom_100,
crossborder,
FR_85_construction,
FR_100_construction,
FR_200_construction,
mixed
Example:

"FR_200"

price
string
required
Example:

13.6

unit
string
required

Product unit

Example:

"piece"

currency
enum<string>
default:EUR
required
Available options:
EUR,
USD,
GBP,
AED,
AFN,
ALL,
AMD,
ANG,
AOA,
ARS,
AUD,
AWG,
AZN,
BAM,
BBD,
BDT,
BGN,
BHD,
BIF,
BMD,
BND,
BOB,
BRL,
BSD,
BTN,
BWP,
BYN,
BYR,
BZD,
CAD,
CDF,
CHF,
CLF,
CLP,
CNY,
COP,
CRC,
CUC,
CUP,
CVE,
CZK,
DJF,
DKK,
DOP,
DZD,
EGP,
ERN,
ETB,
FJD,
FKP,
GEL,
GGP,
GHS,
GIP,
GMD,
GNF,
GTQ,
GYD,
HKD,
HNL,
HRK,
HTG,
HUF,
IDR,
ILS,
IMP,
INR,
IQD,
IRR,
ISK,
JEP,
JMD,
JOD,
JPY,
KES,
KGS,
KHR,
KMF,
KPW,
KRW,
KWD,
KYD,
KZT,
LAK,
LBP,
LKR,
LRD,
LSL,
LTL,
LVL,
LYD,
MAD,
MDL,
MGA,
MKD,
MMK,
MNT,
MOP,
MRO,
MUR,
MVR,
MWK,
MXN,
MYR,
MZN,
NAD,
NGN,
NIO,
NOK,
NPR,
NZD,
OMR,
PAB,
PEN,
PGK,
PHP,
PKR,
PLN,
PYG,
QAR,
RON,
RSD,
RUB,
RWF,
SAR,
SBD,
SCR,
SDG,
SEK,
SGD,
SHP,
SLL,
SOS,
SRD,
STD,
SVC,
SYP,
SZL,
THB,
TJS,
TMT,
TND,
TOP,
TRY,
TTD,
TWD,
TZS,
UAH,
UGX,
UYU,
UZS,
VEF,
VND,
VUV,
WST,
XAF,
XCD,
XDR,
XOF,
XPF,
YER,
ZAR,
ZMK,
ZMW,
ZWL
reference
string | null
required

Product reference

Example:

"REF-123"

ledger_account
object | null
required
archived_at
string<date-time> | null
required

The time the product has been archived

Example:

"2023-09-30T10:08:08.146343Z"

created_at
string<date-time>
required
Example:

"2023-08-30T10:08:08.146343Z"

updated_at
string<date-time>
required
Example:

"2023-08-30T10:08:08.146343Z"