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.
openapi: 3.2.0
info:
description: "\n\n## Overview\n\n\n\nThis application offers an API for managing assignments and tasks.\n\n\n\nGraphQL endpoint for the same API is [also available](/graph)\n\n\n\n<details><summary>Authentication</summary>\n\n\n\n> \n\n> Authenticate using your Erply credentials and get a sessionKey. This sessionKey and your Erply clientCode must be provided in the HTTP headers of every request. You do not have to authenticate against this API - valid Erply sessionKey-s from other sources are also acceptable. To authenticate using this API, use the `POST /api/v1/auth` endpoint.\n\n>\n\n</details>\n\n"
title: assignments Assortment Linked Products API
contact: {}
version: 2.36.5
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
/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
/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
/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'
/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
/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'
components:
schemas:
linkedproductmodels.BulkCreateRequest:
type: object
properties:
requests:
type: array
items:
$ref: '#/components/schemas/linkedproductmodels.CreateRequest'
linkedproductmodels.UpdateRequest:
type: object
properties:
linked_product_id:
type: integer
product_id:
type: integer
products.BulkReadRequestItem:
type: object
properties:
linkType:
type: string
example: cross-sell
productID:
type: integer
example: 1
skip:
type: integer
take:
type: integer
example: 20
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
responses.Response:
type: object
properties:
id:
type: integer
example: 73
products.BulkReadRequest:
type: object
properties:
requests:
type: array
items:
$ref: '#/components/schemas/products.BulkReadRequestItem'
responses.MessageResponse:
type: object
properties:
message:
type: string
example: some message
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
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
responses.BulkResponseWithResults:
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/responses.BulkResult'
products.BulkReadResponse:
type: object
properties:
results:
type: array
items:
$ref: '#/components/schemas/products.BulkReadResponseItem'
products.BulkReadResponseItem:
type: object
properties:
error:
type: string
productID:
type: integer
results:
type: array
items:
$ref: '#/components/schemas/linkedproductmodels.Response'
securitySchemes:
AccessToken:
type: apiKey
name: accessToken
in: header
ErplyClientCode:
type: apiKey
name: clientCode
in: header
ErplyJWT:
type: apiKey
name: jwt
in: header
ErplySession:
type: apiKey
name: sessionKey
in: header
RequestKey:
type: apiKey
name: requestKey
in: header