Erply Linked Products API
Manage substitute and cross-sell products
Manage substitute and cross-sell products
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/erply-linked-products-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
description: 'Product information management API
-------
Summary
It is built top of Erply''s current product database.'
title: PIM Linked Products API
contact:
email: david.zingerman@erply.com
version: 1.143.20
tags:
- description: Manage substitute and cross-sell products
name: Linked Products
paths:
/v1/product/linked-products:
post:
security:
- sk: []
- cc: []
- jwt: []
description: Each product can have zero or more substitute products (items that the cashier could offer as alternatives if the original is out of stock) and zero or more cross-sell products (items that are often sold along the main item).
tags:
- Linked Products
summary: Link 2 products for cross-sell or substitute purposes
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/responses.Response'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/responses.MessageResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/responses.MessageResponse'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/linkedproductmodels.CreateRequest'
description: link ID and type of the link `cross-sell | substitute`
required: true
operationId: postV1ProductLinkedProducts
x-operation-id-source: derived
/v1/product/linked-products/bulk:
post:
security:
- sk: []
- cc: []
- jwt: []
description: each request contains the created resource data
tags:
- Linked Products
summary: Create product links in bulk
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/responses.BulkResponseWithResults'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/linkedproductmodels.BulkCreateRequest'
description: bulk create request
required: true
operationId: postV1ProductLinkedProductsBulk
x-operation-id-source: derived
/v1/product/linked-products/bulk/get:
post:
security:
- sk: []
- cc: []
- jwt: []
description: 'Each product can have zero or more substitute products (items that the cashier could offer as alternatives if the original is out of stock) and zero or more cross-sell products (items that are often sold along the main item).
link type (values: cross-sell or substitute)'
tags:
- Linked Products
summary: Read all products linked products and the link types
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/products.BulkReadResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/responses.MessageResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/responses.MessageResponse'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/products.BulkReadRequest'
description: request
required: true
operationId: postV1ProductLinkedProductsBulkGet
x-operation-id-source: derived
/v1/product/linked-products/{ids}:
delete:
security:
- sk: []
- cc: []
- jwt: []
description: 'Each product can have zero or more substitute products
(items that the cashier could offer as alternatives if the original is out of stock)
and zero or more cross-sell products (items that are often sold along the main item).'
tags:
- Linked Products
summary: Delete links between 2 products
parameters:
- description: up to 100 semicolon delimited link IDs
name: ids
in: path
required: true
schema:
type: string
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/responses.Response'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/responses.MessageResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/responses.MessageResponse'
operationId: deleteV1ProductLinkedProductsByIds
x-operation-id-source: derived
/v1/product/linked-products/{id}:
put:
security:
- sk: []
- cc: []
- jwt: []
description: Each product can have zero or more substitute products (items that the cashier could offer as alternatives if the original is out of stock) and zero or more cross-sell products (items that are often sold along the main item).
tags:
- Linked Products
summary: Update a link between 2 products
parameters:
- description: link ID
name: id
in: path
required: true
schema:
type: integer
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/responses.Response'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/responses.MessageResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/responses.MessageResponse'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/linkedproductmodels.UpdateRequest'
description: update request
required: true
operationId: putV1ProductLinkedProductsById
x-operation-id-source: derived
/v1/product/{productID}/linked-products:
get:
security:
- sk: []
- cc: []
- jwt: []
description: Each product can have zero or more substitute products (items that the cashier could offer as alternatives if the original is out of stock) and zero or more cross-sell products (items that are often sold along the main item).
tags:
- Linked Products
summary: Read all product's linked products and the link types
parameters:
- description: skip n records
name: skip
in: query
schema:
type: integer
- description: 'items to take, default: 20, max: 100000'
name: take
in: query
schema:
type: integer
- description: product ID
name: productID
in: path
required: true
schema:
type: integer
- description: 'link type (values: `cross-sell` or `substitute`)'
name: type
in: query
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/linkedproductmodels.Response'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/responses.MessageResponse'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/responses.MessageResponse'
operationId: getV1ProductByProductIDLinkedProducts
x-operation-id-source: derived
components:
schemas:
linkedproductmodels.CreateRequest:
type: object
properties:
linked_product_id:
type: integer
product_id:
type: integer
type:
description: Link type can be cross-sell or substitute
type: string
example: cross-sell
products.BulkReadResponse:
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/products.BulkReadResponseItem'
responses.MessageResponse:
type: object
properties:
message:
type: string
example: some message
linkedproductmodels.UpdateRequest:
type: object
properties:
linked_product_id:
type: integer
product_id:
type: integer
responses.BulkResponseWithResults:
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/responses.BulkResult'
linkedproductmodels.BulkCreateRequest:
type: object
properties:
requests:
type: array
items:
$ref: '#/components/schemas/linkedproductmodels.CreateRequest'
products.BulkReadRequestItem:
type: object
properties:
linkType:
type: string
example: cross-sell
productID:
type: integer
example: 1
skip:
type: integer
take:
type: integer
example: 20
products.BulkReadResponseItem:
type: object
properties:
error:
type: string
productID:
type: integer
results:
type: array
items:
$ref: '#/components/schemas/linkedproductmodels.Response'
responses.BulkResult:
type: object
properties:
message:
type: string
example: some message
resourceId:
description: identifier of the REST-ful response
type: integer
example: 2
resultId:
description: identifier of the result item
type: integer
example: 2
products.BulkReadRequest:
type: object
properties:
requests:
type: array
items:
$ref: '#/components/schemas/products.BulkReadRequestItem'
responses.Response:
type: object
properties:
id:
type: integer
example: 73
linkedproductmodels.Response:
type: object
properties:
added:
description: Unix timestamp
type: integer
example: 1595230999
addedby:
description: username
type: string
example: k@erp.xyz
changed:
description: Unix timestamp
type: integer
example: 1595230999
changedby:
description: username
type: string
example: k@erp.xyz
id:
description: object ID
type: integer
example: 1234
linked_product_id:
type: integer
product_id:
type: integer
type:
description: Link type can be cross-sell or substitute
type: string
example: cross-sell
securitySchemes:
cc:
type: apiKey
name: clientCode
in: header
jwt:
type: apiKey
name: jwt
in: header
sk:
type: apiKey
name: sessionKey
in: header