topi Seller API (1.0.0)
Download OpenAPI specification:Download
Strings returned can be localized when the Accept-Language header is provided in the request. It should follow the RFC-2616 convention.
Calculate pricing for a whole basket
Deprecated
Calculate pricing endpoint is being replaced by two other endpoints:
- listRecommendedRentalPrices
- cartRentalOverview
Please make sure to migrate to one of the above endpoints based on your use case.
Description
calculate the price for a product
Authorizations:
Request Body schema: application/jsonrequired
required | Array of objects (BasketPricingRequest) The pricing to request | ||||||||||||
Array
| |||||||||||||
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "pricing_requests": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "identifier": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "quantity": 1,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "sublines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}
}
]
}
]
}Response samples
- 200
- 401
- 403
{- "basket_total_pay_now": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "basket_total_rent": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "summaries": [
- {
- "available_contract_types": [
- "rent"
], - "default_tenure": 1,
- "identifier": "abc123",
- "is_supported": true,
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "pay_now_excluding_sublines": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": [
- {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
], - "rent_excluding_sublines": [
- {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
], - "sublines": [
- {
- "available_contract_types": [
- "rent"
], - "default_tenure": 1,
- "identifier": "abc123",
- "is_supported": true,
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": [
- {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
], - "summary": "Rent with topi for €24.32/month",
- "total_pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "total_rent": [
- {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
]
}
], - "summary": "Rent with topi for €24.32/month",
- "total_pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "total_rent": [
- {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
]
}
]
}Get rental overview for products
Authorizations:
Request Body schema: application/jsonrequired
required | Array of objects (RentalOverviewRequest) | ||||||||
Array
| |||||||||
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "products": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "quantity": 1,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}
}
]
}Response samples
- 200
- 401
- 403
{- "can_checkout": false,
- "currency": "EUR",
- "product_prices": [
- {
- "available_rental_terms": [
- {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
], - "can_checkout": false,
- "currency": "EUR",
- "has_rental_terms": false,
- "quantity": 1,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "summary": "Rent with topi from €23.45/month",
- "total_rental_amount": 1
}
], - "total_rental_amount": 1,
- "total_rental_summary": "Rent with topi from €123.45/month"
}Check if products are supported
Checks whether the products with the given references are supported or not.
When using in the Sandbox
Returns the requested products with their available contract terms, depending on the combination of the supplied Source and Reference values:
- To get a product with
PayNowcontract terms : The suppliedsourceshould beSAPwithreferencespecified as1234-5678. - To get a product with
Rentcontract terms : There are two ways to get this value either when the suppliedsourceisSAPand thereferenceis1111-1111or withsourceset toB6andreferencespecified as2222-2222. - To get a product that is not topi supported: Specify the
sourceasSAPandreferenceshould be8765-4321.
In other cases this method will return an empty array.
This method has been defined as POST because the size of the input values could grow fast.
Authorizations:
Request Body schema: application/jsonrequired
required | Array of objects (SellerProductReference) the ids for obtains the available contract terms. | ||||
Array
| |||||
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
]
}Response samples
- 200
- 401
- 403
{- "products": [
- {
- "available_contract_terms": {
- "can_pay_now": false,
- "can_rent": false,
- "rent": {
- "duration": 1
}
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "is_supported": false,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}
}
]
}Import products into the catalog
Add a batch of products to the catalog.
When using in the Sandbox
Use the following scenarios to get different fixtures:
- Status
"completed":Send a catalog with less than 10 products - Status
"created":Send a catalog with 10 products or more - Status
"failed":Send a product inside the catalog with the "source" or the "reference" in the "seller_product_reference" as empty string
Authorizations:
Request Body schema: application/jsonrequired
required | Array of objects (AddProduct) non-empty Product payload | ||||||||||||||||||||||||||||
Array (non-empty)
| |||||||||||||||||||||||||||||
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "products": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "description": "aaa",
- "extra_details": [
- {
- "property": "memory",
- "value": "16GB DDR5"
}
], - "is_active": false,
- "manufacturer": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "product_standard_identifiers": [
- {
- "id": "123ab-4567",
- "identifier_type": "EAN"
}
], - "seller_categories": [
- {
- "id": "abc123",
- "name": "abc123",
- "parent_category_id": "abc123"
}
], - "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}, - {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "seller_product_type": "software",
- "subtitle": "abc123",
- "title": "abc123"
}, - {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "description": "aaa",
- "extra_details": [
- {
- "property": "memory",
- "value": "16GB DDR5"
}
], - "is_active": false,
- "manufacturer": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "product_standard_identifiers": [
- {
- "id": "123ab-4567",
- "identifier_type": "EAN"
}
], - "seller_categories": [
- {
- "id": "abc123",
- "name": "abc123",
- "parent_category_id": "abc123"
}
], - "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}, - {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "seller_product_type": "software",
- "subtitle": "abc123",
- "title": "abc123"
}
]
}Response samples
- 200
- 401
- 403
{- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "status": "started",
- "summary": {
- "sample_products_rejected": [
- {
- "error_code": "unsupported_product",
- "error_description": "the product type is not supported",
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}
}
], - "total_products": 1,
- "total_products_imported": 1,
- "total_products_rejected": 1
}
}Create a CSV import job
Creates a new CSV import job and returns the created import id and a pre-signed upload URL.
Upload flow
- Call
POST /importswith thefilenameof your CSV file. The response contains the importidand anupload_url— a temporary link to upload the file to. - Upload the file with an HTTP
PUTrequest toupload_url. The request must include two headers:Content-Type: text/csvandx-goog-content-length-range: 0,262144000. Uploads without them are rejected. The file may be at most 250 MB. - The file is then checked and processed in the background. Call
GET /imports/{id}to follow progress. When some rows could not be imported, the response links to a downloadable CSV listing each failed row and the reason. If the file fails the initial check (for example a required column is missing), the import status becomesfailedand theerrorfield explains why.
A seller can have at most 5 imports running at the same time. Starting a sixth returns a
TooManyRequests error — wait for an earlier import to finish and try again.
CSV format
The first line of the file must be a header row with column names. Column names are not case-sensitive and surrounding spaces are ignored; any column not listed below is simply skipped.
Re-uploading a product you imported before (same reference) updates that product instead of
creating a duplicate. Leaving an optional cell empty on re-import keeps the product's existing
value for that field.
Required columns
The import is rejected if any of these are missing from the header.
| Column | Description | Format |
|---|---|---|
title |
Product name shown to customers | Non-empty text |
reference |
Your product identifier(s) | One or more values joined by |; count must match reference_source |
reference_source |
Source/type of each reference (e.g. sku, ean) |
|-separated, same count as reference |
is_active |
Whether the product is sellable | true/false, 1/0, yes/no, y/n (case-insensitive) |
price_gross |
Sale price incl. VAT | Number > 0, must be >= price_net |
price_net |
Sale price excl. VAT | Number > 0 |
Optional columns
| Column | Description | Format |
|---|---|---|
currency |
Currency code, e.g. EUR |
Defaults to the seller currency if blank |
manufacturer |
Brand / maker | Text |
subtitle |
Short tagline under the title | Text |
description |
Long product description | Text, max 2000 characters |
base_rental_price_gross |
Monthly rental price incl. VAT | Number > 0, must be >= net if both set |
base_rental_price_net |
Monthly rental price excl. VAT | Number > 0 |
ean |
EAN barcode | Text |
mpn |
Manufacturer part number | Text |
image_url |
Product image | Valid URL |
seller_category_id |
Your category ID | Text |
seller_category_name |
Your category name | Text |
seller_category_parent_id |
Parent category ID | Text |
seller_product_type |
Product type | One of hardware, software, service, hardware_built_to_order, or blank |
shop_product_description_url |
Link to the product page on your shop | Valid URL |
extra_details |
Custom key/value attributes | key=value pairs joined by | |
Prices
- Prices are written in whole currency units, not cents:
2499.00means 2,499 euros. price_gross(with VAT) must be greater than or equal toprice_net(without VAT).- Both decimal styles are accepted: a point (
1999.99) or a comma (1999,99) before the decimals. Thousands separators are also fine in either style:1,234.56and1.234,56both mean one thousand two hundred thirty-four euros and 56 cents. - One shape cannot be told apart: a value like
1,234could mean1.234or1234, so that row is rejected with an error. To avoid this, always write the cents explicitly —1234.00(or1.234,00) for one thousand two hundred thirty-four euros,1.23(or1,23) for one euro and 23 cents.
Notes
- Multiple references: a product can carry several identifiers — pipe-separate them in
reference(e.g.MBP14-001|0719726100000) with matching kinds inreference_source(e.g.sku|ean). The two columns must have an equal number of|-separated values. - Duplicate references within the same file are rejected per row; the rest of the file still imports.
- A row that fails validation does not stop the import: valid rows still import, and every failed row is listed with its reason in the downloadable error CSV.
Example
title,reference,reference_source,is_active,price_gross,price_net,currency,manufacturer,seller_product_type,extra_details
Apple MacBook Pro 14,MBP14-001,sku,true,2499.00,2099.16,EUR,Apple,hardware,color=Space Black|warranty=24 months
Dell UltraSharp Monitor,DELL-U2724|0719726100000,sku|ean,1,649.00,545.38,EUR,Dell,hardware,resolution=3840x2160|panel=IPS
Authorizations:
Request Body schema: application/jsonrequired
| filename | string The name of the CSV file to import |
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "filename": "abc123"
}Response samples
- 201
- 401
- 403
{- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
}Cancel a CSV import job
Cancels a CSV import job.
Only imports in pending, queued, and running status can be cancelled. Cancelling a completed or already-cancelled import returns an error.
Authorizations:
path Parameters
| id required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The import job ID to cancel. |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X DELETE https://seller-api.topi.eu/v1/catalog/imports/{id} \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 401
- 403
"abc123"Get CSV import job details
Retrieves the details of a CSV import job.
Failure reporting
There are two distinct failure surfaces:
error— set when the import fails before any rows are processed, e.g. a required column is missing from the header, the uploaded file is not a valid CSV, or the upload has the wrong content type. The job status isfailed, the row counters stay at 0, and no error CSV is produced. Fix the file and create a new import.failed/errors_url— row-level failures during processing. The import keeps going; rows that failed are counted infailedand detailed in the downloadable CSV aterrors_url. Theerrorfield stays empty in this case.
Authorizations:
path Parameters
| id required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The import job ID. |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X GET https://seller-api.topi.eu/v1/catalog/imports/{id} \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
{- "categorization": {
- "done": false,
- "pending": 1,
- "supported": 1,
- "to_be_reviewed": 1,
- "total": 1,
- "unsupported": 1
}, - "created_at": "1970-01-01T00:00:01Z",
- "error": "abc123",
- "failed": 1,
- "filename": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "processed": 1,
- "status": "queued",
- "succeeded": 1,
- "updated_at": "1970-01-01T00:00:01Z"
}List recommended rental prices for products
Given a list of products, retrieve information about the recommended monthly rental price and term, if applicable, for each of the requested products.
Authorizations:
Request Body schema: application/jsonrequired
required | Array of objects (PricingRequest) List of product pricing to request. | ||||||
Array
| |||||||
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "pricing_requests": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}
}
]
}Response samples
- 200
- 401
- 403
[- {
- "currency": "EUR",
- "has_rental_terms": false,
- "monthly_rental_amount": 100000,
- "monthly_rental_terms": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}, - "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "summary": "Rent with topi from €23.45/month"
}
]Calculate pricing for a single product
Deprecated
Calculate pricing endpoint is being replaced by two other endpoints:
- listRecommendedRentalPrices
- cartRentalOverview
Please make sure to migrate to one of the above endpoints based on your use case.
Description
calculate the price for a product
Authorizations:
Request Body schema: application/jsonrequired
required | object (PricingRequest) | ||||||
| |||||||
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "pricing_request": {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}
}
}Response samples
- 200
- 401
- 403
{- "available_contract_types": [
- "rent"
], - "is_supported": true,
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": [
- {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
], - "sublines": [
- {
- "available_contract_types": [
- "rent"
], - "is_supported": true,
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": [
- {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
], - "summary": "Rent with topi for €24.32/month"
}
], - "summary": "Rent with topi for €24.32/month"
}Search products by term
get products that match a search term
Authorizations:
query Parameters
| term | string Example: term=abc123 The Seller Product Reference |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X GET https://seller-api.topi.eu/v1/catalog/products \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
[- {
- "archived": false,
- "available_contract_terms": {
- "can_pay_now": false,
- "can_rent": false,
- "rent": {
- "duration": 1
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "description": "abc123",
- "ean": "abc123",
- "list_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "manufacturer": "abc123",
- "mpn": "abc123",
- "origin": "abc123",
- "pretty_id": "abc123",
- "pricing_category": "abc123",
- "product_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "reference": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
]Paginated product search by term, note: this method will not support any filtering, please refer to the POST endpoint for filtering.
get paginated products that match a search term, note: this method will not support any filtering.
Authorizations:
query Parameters
| term | string Example: term=abc123 The Seller Product Reference |
| limit | integer <int64> Example: limit=1 the size of the page |
| page | integer <int64> Example: page=1 the index of the page |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X GET https://seller-api.topi.eu/v1/catalog/products_paginated \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
{- "limit": 1,
- "page": 1,
- "rows": [
- {
- "archived": false,
- "available_contract_terms": {
- "can_pay_now": false,
- "can_rent": false,
- "rent": {
- "duration": 1
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "description": "abc123",
- "ean": "abc123",
- "list_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "manufacturer": "abc123",
- "mpn": "abc123",
- "origin": "abc123",
- "pretty_id": "abc123",
- "pricing_category": "abc123",
- "product_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "reference": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "totalPages": 1,
- "totalRows": 1
}Paginated product search by term, filtering by provided options
get paginated products that match a search term and the provided filters
Authorizations:
query Parameters
| term | string Example: term=abc123 The Seller Product Reference |
| limit | integer <int64> Example: limit=1 the size of the page |
| page | integer <int64> Example: page=1 the index of the page |
Request Body schema: application/jsonrequired
| filtering_logic | string Enum: "AND" "OR" The logic to use for filtering the products. Can be 'and' or 'or'. |
Array of objects (FilteringOption) Filtering options for the search |
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "filtering_logic": "OR",
- "filtering_options": [
- {
- "operation": ">",
- "property": "abc123",
- "value": "abc123"
}
]
}Response samples
- 200
- 401
- 403
{- "limit": 1,
- "page": 1,
- "rows": [
- {
- "archived": false,
- "available_contract_terms": {
- "can_pay_now": false,
- "can_rent": false,
- "rent": {
- "duration": 1
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "description": "abc123",
- "ean": "abc123",
- "list_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "manufacturer": "abc123",
- "mpn": "abc123",
- "origin": "abc123",
- "pretty_id": "abc123",
- "pricing_category": "abc123",
- "product_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "reference": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "totalPages": 1,
- "totalRows": 1
}OfferUpdates
We will ping the URL provided whenever an offer has changed its status to: "accepted", "declined", "voided", "pending_review" or "expired".
Payload:
- same as show offer
id:stringcreated_at:string <date-time>status:string enum: "accepted" | "declined" | "pending_review" | "voided" | "expired"checkout_redirect_url:string <uri>
List all offers (deprecated) Deprecated
Lists the offers created by the calling seller, with filters or query. (deprecated)
This method is deprecated. Please use List all offers with pagination instead.
Authorizations:
query Parameters
| query | string Examples:
Search query. It can be a string or a number or both |
| created_by | string Example: created_by=sales-agent@example.com,anothergreatone@example.com a comma-separated list of sales agents emails |
| partners_only | boolean Example: partners_only=false a boolean indicating whether to retrieve offers from partner sellers only |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X GET https://seller-api.topi.eu/v1/offers \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
[- {
- "created_at": "1970-01-01T00:00:01Z",
- "customer": {
- "company": {
- "billing_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "region": "Bavaria"
}, - "name": "Unicorn Corp",
- "tax_number": "123456789",
- "vat_number": "DE123456789"
}, - "customer_group": "education",
- "email": "alice@example.com",
- "full_name": "John Butler",
- "phone_number": "abc123"
}, - "expires_at": "1970-01-01T00:00:01Z",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "lines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "sublines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "metadata": {
- "affiliate_code": "123456"
}, - "pricing_overview": {
- "breakdown": [
- {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "title": "Monthly (x36)",
- "tooltip": "The first rent fee is included in the first payment. More details later, in topi checkout."
}
], - "instead_of_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "items_summaries": [
- {
- "identifier": "abc123",
- "pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "pay_now_excluding_sublines": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "rent_excluding_sublines": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "total_pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "total_rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
]
}
], - "shipping_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "total_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "sales_agent": {
- "email": "alice@example.com",
- "external_agent_id": "abc123",
- "name": "abc123",
- "phone": "abc123"
}, - "sales_channel": "ecommerce",
- "seller_offer_reference": "ref-1234",
- "shipping": {
- "is_in_store_pickup": false,
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "seller_shipping_reference": "Sandbox Shipping Service"
}, - "shipping_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "recipient_name": "Felix Wolf",
- "region": "Bavaria"
}, - "status": "voided"
}
]Create an offer
Creates a topi offer.
Returns HTTP 200 plus basic information about the offer on success.
The request returns an HTTP Unprocessable Entity in the following scenarios:
- When
"lines"is an empty array. - When
"lines"contains any products that are not available in the topi catalog - When the
"seller_offer_reference"is reusing a value of an offer that is currently active
When using in the Sandbox
The following seller offer references are considered to be "active":
"ref-1234"
The following seller product references are considered to be available in the catalog:
{"source": "sap", "reference": "123"}{"source": "sap", "reference": "456"}{"source": "sku", "reference": "123abc"}
The following seller product references are considered to be available in the catalog but not supported:
{"source": "sku", "reference": "unsupported-1"}
The following shipping reference is considered to be available but not supported:
"unsupported-shipping-reference"
Authorizations:
Request Body schema: application/jsonrequired
object (CustomerInfo) Customer information | |
| draft_offer_id | string The ID of the draft offer from which an offer is being created |
| exit_redirect | string <uri> URL to redirect to when something went wrong along the process. We will add the following parameters to the query string: |
| expires_at required | string <date-time> Expiration date and time for the offer (UTC) |
required | Array of objects (OfferLinePayload) non-empty List of product lines |
object Metadata you can attach to and offer. You can store here any JSON information | |
object (SalesAgent) Sales agent related to an offer | |
| sales_channel required | string Enum: "telesales" "ecommerce" "in_store_pos" Channel from where the offer is created |
| seller_offer_reference required | string Seller's own reference for the offer |
object (ShippingInfo) Shipping information | |
object (ShippingAddress) Shipping Address. If the sales_channel is ecommerce, this field will be required | |
| success_redirect | string <uri> URL to redirect to when the user finishes the checkout in topi. We will add the following parameters to the query string: |
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "customer": {
- "company": {
- "billing_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "region": "Bavaria"
}, - "name": "Unicorn Corp",
- "tax_number": "123456789",
- "vat_number": "DE123456789"
}, - "customer_group": "education",
- "email": "alice@example.com",
- "full_name": "John Butler",
- "phone_number": "abc123"
}, - "draft_offer_id": "abc123",
- "expires_at": "1970-01-01T00:00:01Z",
- "lines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "sub_lines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}, - {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "sub_lines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "metadata": {
- "affiliate_code": "123456"
}, - "sales_agent": {
- "email": "alice@example.com",
- "external_agent_id": "abc123",
- "name": "abc123",
- "phone": "abc123"
}, - "sales_channel": "ecommerce",
- "seller_offer_reference": "ref-1234",
- "shipping": {
- "is_in_store_pickup": false,
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "seller_shipping_reference": "Sandbox Shipping Service"
}, - "shipping_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "recipient_name": "Felix Wolf",
- "region": "Bavaria"
},
}Response samples
- 201
- 401
- 403
- 422
{- "created_at": "1970-01-01T00:00:01Z",
- "customer": {
- "company": {
- "billing_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "region": "Bavaria"
}, - "name": "Unicorn Corp",
- "tax_number": "123456789",
- "vat_number": "DE123456789"
}, - "customer_group": "education",
- "email": "alice@example.com",
- "full_name": "John Butler",
- "phone_number": "abc123"
}, - "expires_at": "1970-01-01T00:00:01Z",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "lines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "sublines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "metadata": {
- "affiliate_code": "123456"
}, - "pricing_overview": {
- "breakdown": [
- {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "title": "Monthly (x36)",
- "tooltip": "The first rent fee is included in the first payment. More details later, in topi checkout."
}
], - "instead_of_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "items_summaries": [
- {
- "identifier": "abc123",
- "pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "pay_now_excluding_sublines": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "rent_excluding_sublines": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "total_pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "total_rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
]
}
], - "shipping_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "total_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "sales_agent": {
- "email": "alice@example.com",
- "external_agent_id": "abc123",
- "name": "abc123",
- "phone": "abc123"
}, - "sales_channel": "ecommerce",
- "seller_offer_reference": "ref-1234",
- "shipping": {
- "is_in_store_pickup": false,
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "seller_shipping_reference": "Sandbox Shipping Service"
}, - "shipping_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "recipient_name": "Felix Wolf",
- "region": "Bavaria"
}, - "status": "voided"
}Retrieve an offer
Returns a single offer.
When using in the Sandbox
Use the following ID's to get different fixtures. Remember that the URL must be encoded:
- Status
"created":"739b63c2-9e58-4964-b38d-4ebb424de242" - Status
"voided":"ddd454b6-f23b-4f9c-a36d-74964766c3d6" - Status
"expired":"3beec7f7-a258-4260-8713-6c2635e5eea5" - Status
"accepted":"60412bcf-8213-4804-841e-f3c36ce46394"
Any other ID will return an HTTP 404 error.
Authorizations:
path Parameters
| id required | string <regexp> ^[0-9A-Za-z\-]+$ Example: 739b63c2-9e58-4964-b38d-4ebb424de242 topi offer ID |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X GET https://seller-api.topi.eu/v1/offers/{id} \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
{- "created_at": "1970-01-01T00:00:01Z",
- "customer": {
- "company": {
- "billing_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "region": "Bavaria"
}, - "name": "Unicorn Corp",
- "tax_number": "123456789",
- "vat_number": "DE123456789"
}, - "customer_group": "education",
- "email": "alice@example.com",
- "full_name": "John Butler",
- "phone_number": "abc123"
}, - "expires_at": "1970-01-01T00:00:01Z",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "lines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "sublines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "metadata": {
- "affiliate_code": "123456"
}, - "pricing_overview": {
- "breakdown": [
- {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "title": "Monthly (x36)",
- "tooltip": "The first rent fee is included in the first payment. More details later, in topi checkout."
}
], - "instead_of_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "items_summaries": [
- {
- "identifier": "abc123",
- "pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "pay_now_excluding_sublines": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "rent_excluding_sublines": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "total_pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "total_rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
]
}
], - "shipping_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "total_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "sales_agent": {
- "email": "alice@example.com",
- "external_agent_id": "abc123",
- "name": "abc123",
- "phone": "abc123"
}, - "sales_channel": "ecommerce",
- "seller_offer_reference": "ref-1234",
- "shipping": {
- "is_in_store_pickup": false,
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "seller_shipping_reference": "Sandbox Shipping Service"
}, - "shipping_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "recipient_name": "Felix Wolf",
- "region": "Bavaria"
}, - "status": "voided"
}Edit an offer
Edits an offer by voiding it and creating a new offer superseding it with the provided details.
Note: Offer details will be replaced with the validated payload passed to this endpoint. Make sure to send the full offer details information.
Authorizations:
path Parameters
| id required | string <regexp> ^[0-9A-Za-z\-]+$ Example: 739b63c2-9e58-4964-b38d-4ebb424de242 Offer ID |
Request Body schema: application/jsonrequired
object (CustomerInfo) Customer information | |
| draft_offer_id | string The ID of the draft offer from which an offer is being created |
| exit_redirect | string <uri> |
| expires_at required | string <date-time> |
required | Array of objects (OfferLinePayload) non-empty List of product lines |
object Metadata you can attach to and offer. You can store here any JSON information | |
object (SalesAgent) Sales agent related to an offer | |
| sales_channel required | string Enum: "telesales" "ecommerce" "in_store_pos" |
| seller_offer_reference required | string Seller's own reference for the offer |
object (ShippingInfo) Shipping information | |
object (ShippingAddress) Shipping Address. If the sales_channel is ecommerce, this field will be required | |
| success_redirect | string <uri> |
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "customer": {
- "company": {
- "billing_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "region": "Bavaria"
}, - "name": "Unicorn Corp",
- "tax_number": "123456789",
- "vat_number": "DE123456789"
}, - "customer_group": "education",
- "email": "alice@example.com",
- "full_name": "John Butler",
- "phone_number": "abc123"
}, - "draft_offer_id": "abc123",
- "expires_at": "1970-01-01T00:00:01Z",
- "lines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "sub_lines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}, - {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "sub_lines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "metadata": {
- "affiliate_code": "123456"
}, - "sales_agent": {
- "email": "alice@example.com",
- "external_agent_id": "abc123",
- "name": "abc123",
- "phone": "abc123"
}, - "sales_channel": "ecommerce",
- "seller_offer_reference": "ref-1234",
- "shipping": {
- "is_in_store_pickup": false,
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "seller_shipping_reference": "Sandbox Shipping Service"
}, - "shipping_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "recipient_name": "Felix Wolf",
- "region": "Bavaria"
},
}Response samples
- 202
- 401
- 403
- 422
{- "created_at": "1970-01-01T00:00:01Z",
- "customer": {
- "company": {
- "billing_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "region": "Bavaria"
}, - "name": "Unicorn Corp",
- "tax_number": "123456789",
- "vat_number": "DE123456789"
}, - "customer_group": "education",
- "email": "alice@example.com",
- "full_name": "John Butler",
- "phone_number": "abc123"
}, - "expires_at": "1970-01-01T00:00:01Z",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "lines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "sublines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "metadata": {
- "affiliate_code": "123456"
}, - "pricing_overview": {
- "breakdown": [
- {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "title": "Monthly (x36)",
- "tooltip": "The first rent fee is included in the first payment. More details later, in topi checkout."
}
], - "instead_of_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "items_summaries": [
- {
- "identifier": "abc123",
- "pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "pay_now_excluding_sublines": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "rent_excluding_sublines": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "total_pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "total_rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
]
}
], - "shipping_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "total_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "sales_agent": {
- "email": "alice@example.com",
- "external_agent_id": "abc123",
- "name": "abc123",
- "phone": "abc123"
}, - "sales_channel": "ecommerce",
- "seller_offer_reference": "ref-1234",
- "shipping": {
- "is_in_store_pickup": false,
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "seller_shipping_reference": "Sandbox Shipping Service"
}, - "shipping_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "recipient_name": "Felix Wolf",
- "region": "Bavaria"
}, - "status": "voided"
}Void an offer
Voids an offer. Optionally, marks an existing offer as superseding this one.
All offers can be voided except those with status accepted. A HTTP 402 Unprocesssable Entity error will be returned in this case.
If the superseding offer ID does not exist or has the same ID has the voided offer, HTTP 402 Unprocessable Entity will be returned.
When using in the Sandbox
You can use the following IDs to refer to different offer fixtures and test this endpoint. Remember that URL's must be encoded.
- Status
"created":"739b63c2-9e58-4964-b38d-4ebb424de242" - Status
"voided":"ddd454b6-f23b-4f9c-a36d-74964766c3d6" - Status
"expired":"3beec7f7-a258-4260-8713-6c2635e5eea5" - Status
"accepted":"60412bcf-8213-4804-841e-f3c36ce46394"
Keep in mind that the Sandbox does not persist state. Even if you void an offer, subsequent calls to different API endpoints will yield the same results.
Authorizations:
path Parameters
| id required | string <regexp> ^[0-9A-Za-z\-]+$ Example: 739b63c2-9e58-4964-b38d-4ebb424de242 topi offer ID |
Request Body schema: application/jsonrequired
| superseded_by_id | string <regexp> ^[0-9A-Za-z\-]+$ The topi offer ID of the offer that supersedes this voided one |
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "superseded_by_id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}Response samples
- 200
- 401
- 403
{- "created_at": "1971-05-24T04:42:31Z"
}List all offers with pagination
Lists the offers created by the calling seller, with pagination and filters. Supports offset-based pagination (page/limit) and range filters for efficient data traversal.
Recommended approach for paginating over all data: Use ID range filters with limit=100. The ID range filter (id_gt) works like cursor-based pagination, providing the most efficient way to iterate through the complete dataset. Pass the last ID from the previous page as id_gt to fetch the next batch.
Examples:
- First page: ?limit=100
- Next page: ?id_gt=
&limit=100 - Time-based sync: ?created_at_gt=
&limit=100
Authorizations:
query Parameters
| limit | integer <int64> Example: limit=1 the size of the page |
| page | integer <int64> Example: page=1 the index of the page |
| query | string Examples:
Search query. It can be a string or a number or both |
| created_by | string Example: created_by=sales-agent@example.com,anothergreatone@example.com a comma-separated list of sales agents emails |
| partners_only | boolean Example: partners_only=false a boolean indicating whether to retrieve offers from partner sellers only |
| sort_by | string Default: "created_at" Enum: "created_at" "status" "expires_at" Example: sort_by=status Field to sort by |
| sort_order | string Default: "asc" Enum: "asc" "desc" Example: sort_order=desc Sort direction |
| id_gt | string <uuid> Example: id_gt=550e8400-e29b-41d4-a716-446655440000 Filter: offer ID > value (UUID) |
| id_gte | string <uuid> Example: id_gte=550e8400-e29b-41d4-a716-446655440000 Filter: offer ID >= value (UUID) |
| id_lt | string <uuid> Example: id_lt=550e8400-e29b-41d4-a716-446655440000 Filter: offer ID < value (UUID) |
| id_lte | string <uuid> Example: id_lte=550e8400-e29b-41d4-a716-446655440000 Filter: offer ID <= value (UUID) |
| created_at_gt | string <date-time> Example: created_at_gt=2025-01-01T00:00:00Z Filter: offer created_at > value (RFC3339) |
| created_at_gte | string <date-time> Example: created_at_gte=2025-01-01T00:00:00Z Filter: offer created_at >= value (RFC3339) |
| created_at_lt | string <date-time> Example: created_at_lt=2025-12-31T23:59:59Z Filter: offer created_at < value (RFC3339) |
| created_at_lte | string <date-time> Example: created_at_lte=2025-12-31T23:59:59Z Filter: offer created_at <= value (RFC3339) |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X GET https://seller-api.topi.eu/v1/offers/paginated \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
{- "offers": [
- {
- "created_at": "1970-01-01T00:00:01Z",
- "customer": {
- "company": {
- "billing_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "region": "Bavaria"
}, - "name": "Unicorn Corp",
- "tax_number": "123456789",
- "vat_number": "DE123456789"
}, - "customer_group": "education",
- "email": "alice@example.com",
- "full_name": "John Butler",
- "phone_number": "abc123"
}, - "expires_at": "1970-01-01T00:00:01Z",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "lines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "sublines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "metadata": {
- "affiliate_code": "123456"
}, - "pricing_overview": {
- "breakdown": [
- {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "title": "Monthly (x36)",
- "tooltip": "The first rent fee is included in the first payment. More details later, in topi checkout."
}
], - "instead_of_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "items_summaries": [
- {
- "identifier": "abc123",
- "pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "pay_now_excluding_sublines": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "rent_excluding_sublines": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "total_pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "total_rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
]
}
], - "shipping_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "total_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "sales_agent": {
- "email": "alice@example.com",
- "external_agent_id": "abc123",
- "name": "abc123",
- "phone": "abc123"
}, - "sales_channel": "ecommerce",
- "seller_offer_reference": "ref-1234",
- "shipping": {
- "is_in_store_pickup": false,
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "seller_shipping_reference": "Sandbox Shipping Service"
}, - "shipping_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "recipient_name": "Felix Wolf",
- "region": "Bavaria"
}, - "status": "voided"
}
], - "pagination": {
- "page": 1,
- "page_size": 1,
- "total_count": 1,
- "total_pages": 1
}
}Create an offer for a partner
Creates a topi offer.
Returns HTTP 200 plus basic information about the offer on success.
The request returns an HTTP Unprocessable Entity in the following scenarios:
- When
"lines"is an empty array. - When
"lines"contains any products that are not available in the topi catalog - When the
"seller_offer_reference"is reusing a value of an offer that is currently active
When using in the Sandbox
The following seller offer references are considered to be "active":
"ref-1234"
The following seller product references are considered to be available in the catalog:
{"source": "sap", "reference": "123"}{"source": "sap", "reference": "456"}{"source": "sku", "reference": "123abc"}
The following seller product references are considered to be available in the catalog but not supported:
{"source": "sku", "reference": "unsupported-1"}
The following shipping reference is considered to be available but not supported:
"unsupported-shipping-reference"
Authorizations:
Request Body schema: application/jsonrequired
object (CustomerInfo) Customer information | |
| draft_offer_id | string The ID of the draft offer from which an offer is being created |
| exit_redirect | string <uri> URL to redirect to when something went wrong along the process. We will add the following parameters to the query string: |
| expires_at required | string <date-time> Expiration date and time for the offer (UTC) |
required | Array of objects (OfferLinePayload) non-empty List of product lines |
object Metadata you can attach to and offer. You can store here any JSON information | |
required | object (SalesAgent) Sales agent related to an offer |
| sales_channel required | string Enum: "telesales" "ecommerce" "in_store_pos" Channel from where the offer is created |
| seller_offer_reference required | string Seller's own reference for the offer |
object (ShippingInfo) Shipping information | |
object (ShippingAddress) Shipping Address. If the sales_channel is ecommerce, this field will be required | |
| success_redirect | string <uri> URL to redirect to when the user finishes the checkout in topi. We will add the following parameters to the query string: |
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "customer": {
- "company": {
- "billing_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "region": "Bavaria"
}, - "name": "Unicorn Corp",
- "tax_number": "123456789",
- "vat_number": "DE123456789"
}, - "customer_group": "education",
- "email": "alice@example.com",
- "full_name": "John Butler",
- "phone_number": "abc123"
}, - "draft_offer_id": "abc123",
- "expires_at": "1970-01-01T00:00:01Z",
- "lines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "sub_lines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}, - {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "sub_lines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "metadata": {
- "affiliate_code": "123456"
}, - "sales_agent": {
- "email": "alice@example.com",
- "external_agent_id": "abc123",
- "name": "abc123",
- "phone": "abc123"
}, - "sales_channel": "ecommerce",
- "seller_offer_reference": "ref-1234",
- "shipping": {
- "is_in_store_pickup": false,
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "seller_shipping_reference": "Sandbox Shipping Service"
}, - "shipping_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "recipient_name": "Felix Wolf",
- "region": "Bavaria"
},
}Response samples
- 201
- 401
- 403
- 422
{- "created_at": "1970-01-01T00:00:01Z",
- "customer": {
- "company": {
- "billing_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "region": "Bavaria"
}, - "name": "Unicorn Corp",
- "tax_number": "123456789",
- "vat_number": "DE123456789"
}, - "customer_group": "education",
- "email": "alice@example.com",
- "full_name": "John Butler",
- "phone_number": "abc123"
}, - "expires_at": "1970-01-01T00:00:01Z",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "lines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "sublines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "metadata": {
- "affiliate_code": "123456"
}, - "pricing_overview": {
- "breakdown": [
- {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "title": "Monthly (x36)",
- "tooltip": "The first rent fee is included in the first payment. More details later, in topi checkout."
}
], - "instead_of_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "items_summaries": [
- {
- "identifier": "abc123",
- "pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "pay_now_excluding_sublines": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "rent_excluding_sublines": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "total_pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "total_rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
]
}
], - "shipping_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "total_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "sales_agent": {
- "email": "alice@example.com",
- "external_agent_id": "abc123",
- "name": "abc123",
- "phone": "abc123"
}, - "sales_channel": "ecommerce",
- "seller_offer_reference": "ref-1234",
- "shipping": {
- "is_in_store_pickup": false,
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "seller_shipping_reference": "Sandbox Shipping Service"
}, - "shipping_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "recipient_name": "Felix Wolf",
- "region": "Bavaria"
}, - "status": "voided"
}Retrieve an offer by seller reference
Returns a single offer, fetched by the seller's own reference.
When using in the Sandbox
Use the following references to get different offer fixtures:
- Status
"created":"ref-created" - Status
"voided":"ref-voided" - Status
"expired":"ref-expired" - Status
"accepted":"ref-accepted"
Any other ID will return an HTTP 404 error.
Authorizations:
path Parameters
| seller_offer_reference required | string Example: ref-1234 Seller's own reference for the offer |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X GET https://seller-api.topi.eu/v1/offers/ref/{seller_offer_reference} \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
{- "created_at": "1970-01-01T00:00:01Z",
- "customer": {
- "company": {
- "billing_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "region": "Bavaria"
}, - "name": "Unicorn Corp",
- "tax_number": "123456789",
- "vat_number": "DE123456789"
}, - "customer_group": "education",
- "email": "alice@example.com",
- "full_name": "John Butler",
- "phone_number": "abc123"
}, - "expires_at": "1970-01-01T00:00:01Z",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "lines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "sublines": [
- {
- "applied_discount_id": "abc123",
- "available_contract_terms": {
- "pay_now": {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242"
}, - "rent": {
- "duration": 12,
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000,
- "tax_rate": 1900
}
}
}, - "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_id": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "origin": "abc123",
- "pretty_id": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pricing_category": "abc123",
- "product_id": "abc123",
- "quantity": 2,
- "selected_contract_type": "abc123",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "metadata": {
- "affiliate_code": "123456"
}, - "pricing_overview": {
- "breakdown": [
- {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "title": "Monthly (x36)",
- "tooltip": "The first rent fee is included in the first payment. More details later, in topi checkout."
}
], - "instead_of_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "items_summaries": [
- {
- "identifier": "abc123",
- "pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "pay_now_excluding_sublines": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "rent_excluding_sublines": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "total_pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "total_rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
]
}
], - "shipping_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "total_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "sales_agent": {
- "email": "alice@example.com",
- "external_agent_id": "abc123",
- "name": "abc123",
- "phone": "abc123"
}, - "sales_channel": "ecommerce",
- "seller_offer_reference": "ref-1234",
- "shipping": {
- "is_in_store_pickup": false,
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "seller_shipping_reference": "Sandbox Shipping Service"
}, - "shipping_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "recipient_name": "Felix Wolf",
- "region": "Bavaria"
}, - "status": "voided"
}Validate an offer
Validates the input for creating a topi offer. This endpoint does not create an offer. It can be used to check in advance if an offer can be created with certain products in the cart or if a shipping method is supported, etc.
Returns a HTTP 200 on success.
The request returns an HTTP Unprocessable Entity in the following scenarios:
- When
"lines"is an empty array. - When
"lines"contains any products that are not available in the topi catalog - When the
"seller_offer_reference"is reusing a value of an offer that is currently active
When using in the Sandbox
The following seller offer references are considered to be "active":
"ref-1234"
The following seller product references are considered to be available in the catalog:
{"source": "sap", "reference": "123"}{"source": "sap", "reference": "456"}{"source": "sku", "reference": "123abc"}
The following seller product references are considered to be available in the catalog but not supported:
{"source": "sku", "reference": "unsupported-1"}
The following shipping reference is considered to be available but not supported:
"unsupported-shipping-reference"
Authorizations:
Request Body schema: application/jsonrequired
| Accept-Language | string |
object (CustomerInfo) Customer information | |
| draft_offer_id | string The ID of the draft offer from which an offer is being created |
| exit_redirect | string <uri> URL to redirect to when something went wrong along the process. We will add the following parameters to the query string: |
| expires_at required | string <date-time> Expiration date and time for the offer (UTC) |
required | Array of objects (OfferLinePayload) non-empty List of product lines |
object Metadata you can attach to and offer. You can store here any JSON information | |
object (SalesAgent) Sales agent related to an offer | |
| sales_channel required | string Enum: "telesales" "ecommerce" "in_store_pos" Channel from where the offer is created |
| seller_offer_reference required | string Seller's own reference for the offer |
object (ShippingInfo) Shipping information | |
object (ShippingAddress) Shipping Address. If the sales_channel is ecommerce, this field will be required | |
| success_redirect | string <uri> URL to redirect to when the user finishes the checkout in topi. We will add the following parameters to the query string: |
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "Accept-Language": "abc123",
- "customer": {
- "company": {
- "billing_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "region": "Bavaria"
}, - "name": "Unicorn Corp",
- "tax_number": "123456789",
- "vat_number": "DE123456789"
}, - "customer_group": "education",
- "email": "alice@example.com",
- "full_name": "John Butler",
- "phone_number": "abc123"
}, - "draft_offer_id": "abc123",
- "expires_at": "1970-01-01T00:00:01Z",
- "lines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "sub_lines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}, - {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "sub_lines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "bundle_index": "abc123",
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "product_id": "abc123",
- "quantity": 2,
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "subtitle": "abc123",
- "title": "abc123"
}
], - "subtitle": "abc123",
- "title": "abc123"
}
], - "metadata": {
- "affiliate_code": "123456"
}, - "sales_agent": {
- "email": "alice@example.com",
- "external_agent_id": "abc123",
- "name": "abc123",
- "phone": "abc123"
}, - "sales_channel": "ecommerce",
- "seller_offer_reference": "ref-1234",
- "shipping": {
- "is_in_store_pickup": false,
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "seller_shipping_reference": "Sandbox Shipping Service"
}, - "shipping_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "recipient_name": "Felix Wolf",
- "region": "Bavaria"
},
}Response samples
- 200
- 401
- 403
- 422
{- "pricing_overview": {
- "breakdown": [
- {
- "amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "title": "Monthly (x36)",
- "tooltip": "The first rent fee is included in the first payment. More details later, in topi checkout."
}
], - "instead_of_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "items_summaries": [
- {
- "identifier": "abc123",
- "pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "pay_now_excluding_sublines": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "rent_excluding_sublines": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "total_pay_now": {
- "pay_now_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}, - "total_rent": [
- {
- "duration": 12,
- "monthly_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
]
}
], - "shipping_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "total_amount": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
}We will ping the URL provided whenever an order has changed its status to: "created", "partially_fulfilled", "completed", "canceled", or "rejected".
Payload:
Available fields:
id:stringassets:arrayofAssetmetadata:objectoffer_id:stringseller_offer_reference:stringstatus:string enumshipping_address:ShippingAddress
ShippingAddresscontains this fields:name:stringline1:stringline2:stringpostal_code:stringcity:stringregion:stringcountry_code:string
List all orders (deprecated) Deprecated
Returns a list of created orders, filterable by query or created_by. (deprecated)
This method is deprecated. Please use List all orders with pagination instead.
Authorizations:
query Parameters
| query | string Examples:
Search query. It can be a string or a number or both |
| created_by | string Example: created_by=sales-agent@example.com,anothergreatone@example.com a comma-separated list of sales agents emails |
| partners_only | boolean Example: partners_only=false a boolean indicating whether to retrieve orders from partner sellers only |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X GET https://seller-api.topi.eu/v1/orders \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
{- "orders": [
- {
- "agent_name": "abc123",
- "company_name": "abc123",
- "created_at": "1970-01-01T00:00:01Z",
- "full_name": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "offer_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "seller_offer_reference": "abc123",
- "status": "confirmed"
}
]
}Retrieve an order
Returns a single order.
When using in the Sandbox
Use the following ID's to get different fixtures. Remember that the URL must be encoded:
- Status
"created":"52c1e8ec-a592-48a9-b574-ab88b0937b38" - Status
"confirmed":"aac1e833-3391-134a-c567-acd8b0937ad3" - Status
"partially_fulfilled":"b3a64e36-6fa2-40a6-9402-e949c47feb87" - Status
"completed":"aa6a50f4-c2d4-4961-9689-ebd0f0f92a9e" - Status
"canceled":"17c45c3d-cd61-4e2f-a562-ff8f349067de"
Any other ID will return an HTTP 404 error.
Authorizations:
path Parameters
| id required | string <regexp> ^[0-9A-Za-z\-]+$ Example: 739b63c2-9e58-4964-b38d-4ebb424de242 topi order ID |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X GET https://seller-api.topi.eu/v1/orders/{id} \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
{- "assets": [
- {
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "product_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "serial_number": "BA-3456786-334-9",
- "status": "shipped",
- "title": "Pro Laptop 64GB",
- "tracking_url": "abc123"
}
], - "canceled_at": "1970-01-01T00:00:01Z",
- "created_at": "1970-01-01T00:00:01Z",
- "customer_info": {
- "company": {
- "billing_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "region": "Bavaria"
}, - "name": "Unicorn Corp",
- "tax_number": "123456789",
- "vat_number": "DE123456789"
}, - "customer_group": "education",
- "email": "alice@example.com",
- "full_name": "John Butler",
- "phone_number": "abc123"
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "metadata": {
- "tracking_number": "123456"
}, - "offer_created_at": "1970-01-01T00:00:01Z",
- "offer_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "order_lines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "contract_type": "rent",
- "duration": 6,
- "monthly_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pretty_id": "abc123",
- "product_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "quantity": 1,
- "selected_first_party_services": [
- {
- "additional_values": {
- "accessory_type": "experiment_charger"
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "type": "topi_replace"
}
], - "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "sublines": [
- {
- "base_rental_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "contract_type": "rent",
- "duration": 6,
- "monthly_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "pretty_id": "abc123",
- "product_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "quantity": 1,
- "selected_first_party_services": [
- {
- "additional_values": {
- "accessory_type": "experiment_charger"
}, - "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "monthly_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "type": "topi_replace"
}
], - "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "subtitle": "abc123",
- "title": "abc123",
- "unit_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "subtitle": "abc123",
- "title": "abc123",
- "unit_price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}
}
], - "sales_agent": {
- "email": "alice@example.com",
- "external_agent_id": "abc123",
- "name": "abc123",
- "phone": "abc123"
}, - "seller_info": {
- "address": {
- "city": "abc123",
- "country_code": "DE",
- "line1": "abc123",
- "line2": "aaa",
- "postal_code": "abc123",
- "region": "abc123"
}, - "capability_add_custom_products": false,
- "capability_anonymized_pricing": false,
- "capability_anonymous_ecom_offer_creation": false,
- "capability_bundles": false,
- "capability_chatbot_id": "abc123",
- "capability_dual_pricing": false,
- "capability_hide_buy_now": false,
- "capability_international_shipment": false,
- "currency": "abc123",
- "email": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "logo_url": "abc123",
- "name": "abc123",
- "parent_seller_id": "abc123",
- "pdf_reader_assistant_id": "abc123",
- "pretty_name": "abc123",
- "product_reference_source": "abc123"
}, - "seller_offer_reference": "abc123",
- "shipping_address": {
- "city": "Munich",
- "country_code": "DE",
- "line1": "10 Downing Street",
- "line2": "Flat 42",
- "postal_code": "10243",
- "recipient_name": "Felix Wolf",
- "region": "Bavaria"
}, - "shipping_info": {
- "is_in_store_pickup": false,
- "price": {
- "currency": "EUR",
- "gross": 119000,
- "net": 100000
}, - "seller_shipping_reference": "Sandbox Shipping Service"
}, - "status": "confirmed",
- "tracking_urls": [
- "abc123"
]
}Set metadata on an order
Sets arbitrary JSON metadata on an order.
Authorizations:
path Parameters
| id required | string <regexp> ^[0-9A-Za-z\-]+$ Example: 739b63c2-9e58-4964-b38d-4ebb424de242 topi order ID |
Request Body schema: application/jsonrequired
required | object Metadata to attach. You can store any JSON information. | ||
| |||
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "metadata": {
- "tracking_number": "123456"
}
}Response samples
- 200
- 401
- 403
{- "assets": [
- {
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "product_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "serial_number": "BA-3456786-334-9",
- "status": "shipped",
- "title": "Pro Laptop 64GB",
- "tracking_url": "abc123"
}
], - "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "metadata": {
- "tracking_number": "123456"
}, - "offer_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "seller_offer_reference": "abc123",
- "status": "confirmed"
}Confirm an order
Sets the status of an existing order to "confirmed". You can only accept orders that have been in the status "created" or "acknowledged".
Authorizations:
path Parameters
| id required | string <regexp> ^[0-9A-Za-z\-]+$ Example: 739b63c2-9e58-4964-b38d-4ebb424de242 topi order ID |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X POST https://seller-api.topi.eu/v1/orders/{id}/accept \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
{- "assets": [
- {
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "product_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "serial_number": "BA-3456786-334-9",
- "status": "shipped",
- "title": "Pro Laptop 64GB",
- "tracking_url": "abc123"
}
], - "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "metadata": {
- "tracking_number": "123456"
}, - "offer_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "seller_offer_reference": "abc123",
- "status": "confirmed"
}Acknowledge an order
Sets the status of an existing order to "acknowledged". You can only acknowledge orders that have been in the status "created".
Authorizations:
path Parameters
| id required | string <regexp> ^[0-9A-Za-z\-]+$ Example: 739b63c2-9e58-4964-b38d-4ebb424de242 topi order ID |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X POST https://seller-api.topi.eu/v1/orders/{id}/acknowledge \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
{- "assets": [
- {
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "product_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "serial_number": "BA-3456786-334-9",
- "status": "shipped",
- "title": "Pro Laptop 64GB",
- "tracking_url": "abc123"
}
], - "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "metadata": {
- "tracking_number": "123456"
}, - "offer_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "seller_offer_reference": "abc123",
- "status": "confirmed"
}Reject an order
Sets the status of an existing order to "rejected". You can only reject orders that have been in the status "created" or "acknowledged".
Authorizations:
path Parameters
| id required | string <regexp> ^[0-9A-Za-z\-]+$ Example: 739b63c2-9e58-4964-b38d-4ebb424de242 topi order ID |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X POST https://seller-api.topi.eu/v1/orders/{id}/reject \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
{- "assets": [
- {
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "product_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "seller_product_references": [
- {
- "reference": "123ab-5343",
- "source": "sap"
}
], - "serial_number": "BA-3456786-334-9",
- "status": "shipped",
- "title": "Pro Laptop 64GB",
- "tracking_url": "abc123"
}
], - "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "metadata": {
- "tracking_number": "123456"
}, - "offer_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "seller_offer_reference": "abc123",
- "status": "confirmed"
}List all orders with pagination
Returns a list of created orders with pagination, filterable by query or created_by. Supports offset-based pagination (page/limit) and range filters for efficient data traversal.
Recommended approach for paginating over all data: Use ID range filters with limit=100. The ID range filter (id_gt) works like cursor-based pagination, providing the most efficient way to iterate through the complete dataset. Pass the last ID from the previous page as id_gt to fetch the next batch.
Examples:
- First page: ?limit=100
- Next page: ?id_gt=
&limit=100 - Time-based sync: ?created_at_gt=
&limit=100
Authorizations:
query Parameters
| limit | integer <int64> Example: limit=1 the size of the page |
| page | integer <int64> Example: page=1 the index of the page |
| query | string Examples:
Search query. It can be a string or a number or both |
| created_by | string Example: created_by=sales-agent@example.com,anothergreatone@example.com a comma-separated list of sales agents emails |
| partners_only | boolean Example: partners_only=false a boolean indicating whether to retrieve orders from partner sellers only |
| sort_by | string Default: "created_at" Value: "created_at" Example: sort_by=created_at Field to sort by |
| sort_order | string Default: "asc" Enum: "asc" "desc" Example: sort_order=desc Sort direction |
| id_gt | string <uuid> Example: id_gt=550e8400-e29b-41d4-a716-446655440000 Filter: order ID > value (UUID) |
| id_gte | string <uuid> Example: id_gte=550e8400-e29b-41d4-a716-446655440000 Filter: order ID >= value (UUID) |
| id_lt | string <uuid> Example: id_lt=550e8400-e29b-41d4-a716-446655440000 Filter: order ID < value (UUID) |
| id_lte | string <uuid> Example: id_lte=550e8400-e29b-41d4-a716-446655440000 Filter: order ID <= value (UUID) |
| created_at_gt | string <date-time> Example: created_at_gt=2025-01-01T00:00:00Z Filter: order created_at > value (RFC3339) |
| created_at_gte | string <date-time> Example: created_at_gte=2025-01-01T00:00:00Z Filter: order created_at >= value (RFC3339) |
| created_at_lt | string <date-time> Example: created_at_lt=2025-12-31T23:59:59Z Filter: order created_at < value (RFC3339) |
| created_at_lte | string <date-time> Example: created_at_lte=2025-12-31T23:59:59Z Filter: order created_at <= value (RFC3339) |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X GET https://seller-api.topi.eu/v1/orders/paginated \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
{- "orders": [
- {
- "agent_name": "abc123",
- "company_name": "abc123",
- "created_at": "1970-01-01T00:00:01Z",
- "full_name": "abc123",
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "offer_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "seller_offer_reference": "abc123",
- "status": "confirmed"
}
], - "pagination": {
- "page": 1,
- "page_size": 1,
- "total_count": 1,
- "total_pages": 1
}
}Assets without serial numbers
Some assets might not have a serial number (e.g. accessories). In order to send them with the shipment, explicitly pass an empty string "" as the serial_number for this asset.
Note, that every asset, that has a rent option, requires a serial number even if it has been directly purchased. The request will fail with an according message if such a serial number is missing.
Also note, that every item of an order has to be shipped for the order to be completed. This can be done in multiple shipments.
Create a shipment
Add shipment info for an order. Partial shipments are allowed and will update the order status to "partially_fulfilled". All items must have shipment info before an order is considered "completed".
Authorizations:
Request Body schema: application/jsonrequired
object Metadata that you can attach to an order. You can store any JSON information. | |
| order_id required | string <regexp> ^[0-9A-Za-z\-]+$ topi order ID |
required | Array of objects (SerialNumberByAsset) The products' serial numbers to register |
| tracking_url | string <uri> The tracking URL of the asset |
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "metadata": {
- "tracking_number": "123456"
}, - "order_id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "serial_numbers": [
- {
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "serial_number": "BA-3456786-334-9"
}
],
}Response samples
- 200
- 401
- 403
{- "metadata": {
- "tracking_number": "123456"
}, - "serial_numbers": [
- {
- "seller_product_reference": {
- "reference": "123ab-5343",
- "source": "sap"
}, - "serial_number": "BA-3456786-334-9"
}
],
}Get all shipping methods
Get all shipping methods
Authorizations:
query Parameters
| page | integer <int64> Default: 0 Example: page=0 Which page number to fetch (zero-indexed) |
Responses
Request samples
- cURL
- JavaScript (fetch)
curl -X GET https://seller-api.topi.eu/v1/shipping-method \ -H "Authorization: Bearer $ACCESS_TOKEN"
Response samples
- 200
- 401
- 403
{- "data": [
- {
- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "is_in_store_pickup": true,
- "name": "United Parcel Service",
- "seller_shipping_method_reference": "Sandbox Shipping Service",
- "supported": true
}
], - "pagination": {
- "has_more": false,
- "page": 0
}
}Create shipping method
Creates a shipping method. This is global for all the offers.
Returns HTTP 200 plus basic information about the newly created shipping method.
The request returns an HTTP Unprocessable Entity when the provided "seller_shipping_method_reference" is not unique.
When using in the Sandbox
The following seller shipping method references are considered to be available and will make the API return an HTTP Unprocessable Entity error.
"Bridges"
Note: The sandbox will always return the same fixture regardless of the payload provided.
Authorizations:
Request Body schema: application/jsonrequired
| is_in_store_pickup | boolean Is this shipping method in store pickup |
| name | string Name for the shipping method. |
| seller_shipping_method_reference required | string Seller's own reference for this shipping method. |
Responses
Request samples
- Payload
- cURL
- JavaScript (fetch)
{- "is_in_store_pickup": true,
- "name": "United Parcel Service",
- "seller_shipping_method_reference": "Sandbox Shipping Service"
}Response samples
- 201
- 401
- 403
{- "id": "739b63c2-9e58-4964-b38d-4ebb424de242",
- "is_in_store_pickup": true,
- "name": "United Parcel Service",
- "seller_shipping_method_reference": "Sandbox Shipping Service",
- "supported": true
}