NAV

Vinted Pro Integrations

Vinted Pro Integrations documentation version v0.75.1.

Features

Overview

The Vinted Pro Integrations API is actively being developed. The following features are already implemented:

The following features we have committed to implement:

We're always looking for ways to improve Vinted Pro Integrations. If you have any feedback you can get in touch via b2c-support-am@vinted.com.

Allowlist

Vinted Pro Integrations is currently only available for a select few businesses. If you wish to be added to this allowlist please get in touch via b2c-support-am@vinted.com. If your business account is not allowlisted, you won't be able to get into Vinted Pro Integrations Portal nor use Vinted Pro Integrations API.

Slot system

For security purposes, each API user is allocated a specific number of item slots. Initially, this allocation is set to 500 active items per API user. After a period of 30 days, you may contact our Account Management team at b2c-support-am@vinted.com and they will assess your performance. If the business performance appears favorable, we have the flexibility to increase the number of available slots.

Note that when calling the CreateItems endpoint with a request body that exceeds your available slots, your entire request will be rejected.

Getting started

The sections below describe how to use the Vinted Pro Integrations API in detail. The following is a quick start guide to start making Vinted Pro Integrations API calls.

Steps for making requests

  1. Register for Vinted Pro.
  2. Ensure you are allowlisted to use Vinted Pro Integrations.
  3. Log into Vinted Pro Integrations Portal.
  4. Generate an access token.
  5. Split the access token into an access key and signing key.
  6. Add the access key in the X-Vpi-Access-Key header.
  7. Generate a request signature and send it in the X-Vpi-Hmac-Sha256 header.

Registering a webhook example

curl -X POST https://pro.svc.vinted.com/api/v1/webhooks \
  --H 'Content-Type: application/json' \
  --H 'X-Vpi-Access-Key: foo' \
  --H 'X-Vpi-Hmac-Sha256: t=1704067200,v1=cf3872ca3c2537690aaee0eb4b00c9a2d5591389d1932cd282aa6414869efa19' \
  --d '{ "event_types": ["CREATE_ITEM_SUCCESS"], "url": "https://example.com" }'

For this example a webhook https://example.com will be registered for when a product is successfully added on the test environment.

The request URL is POST https://pro.svc.vinted.com/api/v1/webhooks (CreateWebhook endpoint) and has the following request body: { "event_types": ["CREATE_ITEM_SUCCESS"], "url": "https://example.com" }. Since it's a JSON request body, the Content-Type header is set to application/json.

For this example the following access token will be used: foo,bar. First split it into the access key (foo) and signing key (bar). The X-Vpi-Access-Key header will be set to foo.

The next step is generating the request signature. If this request was made on January 1st 2024 at midnight the following timestamp will be generated: 1704067200. The timestamp is used together with the other signing fields to create the following signing payload: 1704067200.POST./api/v1/webhooks.foo.{ "event_types": ["CREATE_ITEM_SUCCESS"], "url": "https://example.com" }. The signing key will be used to generate a SHA256 HMAC hash: cf3872ca3c2537690aaee0eb4b00c9a2d5591389d1932cd282aa6414869efa19. The final X-Vpi-Hmac-Sha256 header will be the following: t=1704067200,v1=cf3872ca3c2537690aaee0eb4b00c9a2d5591389d1932cd282aa6414869efa19.

Listing an item example

For this example the request siging is skipped, since it is explained it detail in the previous example. In this example an item will be listed. The request URL is POST https://pro.svc.vinted.com/api/v1/items (CreateItems endpoint), but the request body requires IDs (i.a. catalog_id and color_ids). To get the available options for such field, you'll need to fetch the ontologies via the GetOntologies endpoint. This response is quite large and is unlikely to change much over time, so feel free to cache the result. Using the ontologies, you should be able to generate a valid request body for listing an item.

If you've registered a webhook you will be informed about your listing status via the registered URL. You can also check the status via the GetItemStatus endpoint. However, it is recommended to register a webhook to get the fastest feedback. If a webhook gets called you should validate whether it came from Vinted.

Environments

Vinted Pro Integrations can be accessed in two environments.

All the endpoints defined in this documentation are accessible on either environment. Each environment requires their own access token. Vinted Pro Integrations Portal has a toggle to switch between dev mode and production. In either mode you can generate their respective access tokens.

Dev mode

Dev mode enables you to test your integration in an isolated environment. This environment doesn't have a front-end. You can interact with it using Vinted Pro Integrations API or specific endpoints that change state for dev mode listed below. The data is guaranteed to be available for at least a week.

Magic item descriptions

The description of the CreateItems endpoint can be used to trigger specific behaviour for asynchronous actions on Vinted Pro Integrations. These are called magic item descriptions. The description must exactly match the magic item description in order to trigger the behaviour.

Endpoints

While magic descriptions trigger behaviour for asynchronous operations, there are dev mode specific endpoint to trigger events. These endpoints only work on dev mode and are defined in the dev mode API.

Authentication

In order to authenticate yourself, you'll need to have a access token. Access tokens can be generated on Vinted Pro Integrations Portal. Only Pro members can access the portal and generate access tokens. If you haven't already you can register for Vinted Pro.

Only right after creating the access token it can be copied. Afterwards the tokens will be obfuscated due to security purposes. Make sure to save access tokens securely after creation.

Access tokens are strings containing an access key and a signing key, separated by a comma like so:

{access key},{signing key}

Access key

The access key must be sent with every request in the X-Vpi-Access-Key header.

Request signing

All requests need to be signed with HMAC using the signing key. You can do this like this:

  1. Generate a signing payload by joining the following values in the listed order together with a .:
    1. The current timestamp (UNIX seconds integer, e.g. 1704067200).
    2. The request method (capitalised, e.g. POST).
    3. The path including query parameters (e.g. /foo?bar=baz).
    4. The access key.
    5. The request body (empty bodies are passed as an empty string).
  2. Compute HMAC with SHA256 hash function. Use the previously created payload and sign it with the signing key.
  3. The resulting signature header is composed like this: t={timestamp from step 1},v1={hash from step 2}.
  4. Send the signature header in the X-Vpi-Hmac-Sha256 header.

The timestamp will be checked whether it's recent enough. Too old (or too far in the future) timestamps will be rejected.

Webhooks

The webhooks api can be used to get callbacks about events happening on Vinted. They're the fastest way of staying notified about changes on Vinted and it's highly recommended to use them. If you're selling your items on multiple platforms webhooks can keep your stock in sync, reducing the chance of double sales significantly.

When you register a webhook for an event, e.g. ITEM_SOLD, Vinted Pro Integrations will call that URL when that item gets sold. The request bodies of webhooks are documented under WebhookEventData.

Validating webhooks

Upon registering a webhook via the CreateWebhook endpoint you'll get a signing_key in the response body. Whenever a callback comes in on the registered URL it'll have a signature signed by that signing_key in the X-Vpi-Webhook-Hmac-Sha256 response header. This could be used to verify that the request came from Vinted using the following steps:

  1. Extract the timestamp and the signature from the X-Vpi-Webhook-Hmac-Sha256 request header. It will look like this t=TIMESTAMP,v1=SIGNATURE.
  2. Join the timestamp and the the response body together to form a signing payload.
  3. Compute HMAC with SHA256 hash function. Use the previously created payload and sign it with the signing_key from the CreateWebhook endpoint response.
  4. Compare the signature from step 1 against the one from step 3. They should match if the request is coming from Vinted.

Downloads

OpenAPI

This documentation is based on an OpenAPI definition. You can use this definition to generate a client for your programming language of choice (e.g. OpenAPI Generator) or import it in your API platform (e.g. Postman).

Postman collection

When using Postman, you can import the Postman collection to have quick access to all requests of Vinted Pro Integrations API. Ensure that you have the accessKey and signingKey environment variables set in order to authenticate and sign requests automatically.

Items API

DeleteItems

Code samples

# You can also use wget
curl -X DELETE /api/v1/items \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Vpi-Hmac-Sha256: string' \
  -H 'X-Vpi-Access-Key: API_KEY'

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Vpi-Hmac-Sha256' => 'string',
  'X-Vpi-Access-Key' => 'API_KEY'
}

result = RestClient.delete '/api/v1/items',
  params: {
  }, headers: headers

p JSON.parse(result)

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Vpi-Hmac-Sha256": []string{"string"},
        "X-Vpi-Access-Key": []string{"API_KEY"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "/api/v1/items", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

const inputBody = '{
  "item_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ]
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Vpi-Hmac-Sha256':'string',
  'X-Vpi-Access-Key':'API_KEY'
};

fetch('/api/v1/items',
{
  method: 'DELETE',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

DELETE /api/v1/items

Deletes a batch of items in Vinted. Items are deleted asynchronously. Deleting item is only available for items that are successfully listed.

Body parameter

{
  "item_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ]
}

Parameters

Name In Type Required Description
X-Vpi-Hmac-Sha256 header string true Signature header. Reference script in documentation.
body body DeleteItems true The request body for deleting items.
» item_ids body [string] true An array of item identifiers. When the items were created in VPI, you received an identifier for each item. Use that identifier to delete the item. At most 100 items can be deleted in a single request.

Example responses

202 Response

{
  "items": [
    {
      "accepted": true,
      "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c"
    }
  ]
}

Responses

Status Meaning Description Schema
202 Accepted Request accepted. Deletions will be processed in the background. If items were not recognised as items that belong to your account the deletions will silently fail. DeleteItemsResponse
400 Bad Request A validation error occured. ValidationError
401 Unauthorized The user is not authorized to use API. None
404 Not Found The item is not found. None
500 Internal Server Error An unexpected error occured. None

CreateItems

Code samples

# You can also use wget
curl -X POST /api/v1/items \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Vpi-Hmac-Sha256: string' \
  -H 'X-Vpi-Access-Key: API_KEY'

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Vpi-Hmac-Sha256' => 'string',
  'X-Vpi-Access-Key' => 'API_KEY'
}

result = RestClient.post '/api/v1/items',
  params: {
  }, headers: headers

p JSON.parse(result)

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Vpi-Hmac-Sha256": []string{"string"},
        "X-Vpi-Access-Key": []string{"API_KEY"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "/api/v1/items", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

const inputBody = '{
  "items": [
    {
      "brand": "string",
      "catalog_id": 0,
      "color_ids": [
        0
      ],
      "currency": "EUR",
      "description": "string",
      "is_unisex": true,
      "manufacturer": "string",
      "manufacturer_labelling": "string",
      "measurement_length": 0,
      "measurement_width": 0,
      "package_size_id": 0,
      "photo_urls": [
        "http://example.com"
      ],
      "price": 1,
      "size_id": 0,
      "status_id": 0,
      "title": "string",
      "item_reference": "string",
      "is_draft": true
    }
  ]
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Vpi-Hmac-Sha256':'string',
  'X-Vpi-Access-Key':'API_KEY'
};

fetch('/api/v1/items',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

POST /api/v1/items

Creates a batch of items in Vinted. Items are validated and uploaded asynchronously. The response contains the identifier for each item. This identifier is used to further interact with the item, make sure to store it on your end as well.

Body parameter

{
  "items": [
    {
      "brand": "string",
      "catalog_id": 0,
      "color_ids": [
        0
      ],
      "currency": "EUR",
      "description": "string",
      "is_unisex": true,
      "manufacturer": "string",
      "manufacturer_labelling": "string",
      "measurement_length": 0,
      "measurement_width": 0,
      "package_size_id": 0,
      "photo_urls": [
        "http://example.com"
      ],
      "price": 1,
      "size_id": 0,
      "status_id": 0,
      "title": "string",
      "item_reference": "string",
      "is_draft": true
    }
  ]
}

Parameters

Name In Type Required Description
X-Vpi-Hmac-Sha256 header string true Signature header. Reference script in documentation.
body body CreateItems true The request body for creating items.
» items body [allOf] true An array of items to create. At most 100 items can be created in a single request.
»» anonymous body ItemProperties false none
»»» brand body string true The item brand.
»»» catalog_id body integer(int) true The ID of item catalog.
»»» color_ids body [integer] false The item colors IDs.
»»» currency body Currency true The currency used for prices.
»»» description body string true The item description. Must be between 5 and 2000 characters.
»»» is_unisex body boolean false A boolean indicating if item is unisex.
»»» manufacturer body string false Manufacturer credentials. E.g. "Mattel (USA)".
»»» manufacturer_labelling body string false Labelling and marketing information. This should be general information on product safety and compliance such as safety warnings and instructions of use or safety marks/logo/certifications related to the product.
»»» measurement_length body integer(int) false The item measurement length.
»»» measurement_width body integer(int) false The item measurement width.
»»» package_size_id body integer(int) true The ID of item package size.
»»» photo_urls body [string] true The URLs of the item photos. Must be publicly accessible. At least one photo is required.
»»» price body number(float) true The item price.
»»» size_id body integer(int) false The ID of item size. This is required for catalogs that have a size group (i.e. a non-empty size_group_ids array).
»»» status_id body integer(int) true The ID of item status (condition).
»»» title body string true The item title. Must be between 5 and 100 characters.
»» anonymous body ItemReference false none
»»» item_reference body string true The item reference for the integrator to identify the item.
»» anonymous body ItemIsDraft false none
»»» is_draft body boolean true A boolean indicating whether the item is a draft.

Enumerated Values

Parameter Value
»»» currency EUR

Example responses

202 Response

{
  "items": [
    {
      "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c",
      "item_reference": "string"
    }
  ]
}

Responses

Status Meaning Description Schema
202 Accepted Request accepted, items will be uploaded asynchronously. Receiving the item ID does not mean the item is listed. CreateItemsResponse
400 Bad Request A validation error occured. ValidationError
401 Unauthorized User is not authorized to use API. None
409 Conflict Adding these items would exceed the maximum number of items allowed for this account, please reduce the number of active items before creating more. Inline
500 Internal Server Error An unexpected error occured. None

Response Schema

Status Code 409

Name Type Required Restrictions Description
» active_items integer(int64) true none Number of active items for this account.
» attempted_batch_size integer(int64) true none Number of items in the request.
» slots integer(int64) true none Maximum number of items allowed for this account.

UpdateItems

Code samples

# You can also use wget
curl -X PUT /api/v1/items \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Vpi-Hmac-Sha256: string' \
  -H 'X-Vpi-Access-Key: API_KEY'

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Vpi-Hmac-Sha256' => 'string',
  'X-Vpi-Access-Key' => 'API_KEY'
}

result = RestClient.put '/api/v1/items',
  params: {
  }, headers: headers

p JSON.parse(result)

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Vpi-Hmac-Sha256": []string{"string"},
        "X-Vpi-Access-Key": []string{"API_KEY"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PUT", "/api/v1/items", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

const inputBody = '{
  "items": [
    {
      "brand": "string",
      "catalog_id": 0,
      "color_ids": [
        0
      ],
      "currency": "EUR",
      "description": "string",
      "is_unisex": true,
      "manufacturer": "string",
      "manufacturer_labelling": "string",
      "measurement_length": 0,
      "measurement_width": 0,
      "package_size_id": 0,
      "photo_urls": [
        "http://example.com"
      ],
      "price": 1,
      "size_id": 0,
      "status_id": 0,
      "title": "string",
      "is_draft": true,
      "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c"
    }
  ]
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Vpi-Hmac-Sha256':'string',
  'X-Vpi-Access-Key':'API_KEY'
};

fetch('/api/v1/items',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

PUT /api/v1/items

Updates a batch of items in Vinted. Items are validated and updated asynchronously. Adding or removing photos is not possible at this time through updates. Updating item is only available for items that are successfully listed.

Body parameter

{
  "items": [
    {
      "brand": "string",
      "catalog_id": 0,
      "color_ids": [
        0
      ],
      "currency": "EUR",
      "description": "string",
      "is_unisex": true,
      "manufacturer": "string",
      "manufacturer_labelling": "string",
      "measurement_length": 0,
      "measurement_width": 0,
      "package_size_id": 0,
      "photo_urls": [
        "http://example.com"
      ],
      "price": 1,
      "size_id": 0,
      "status_id": 0,
      "title": "string",
      "is_draft": true,
      "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c"
    }
  ]
}

Parameters

Name In Type Required Description
X-Vpi-Hmac-Sha256 header string true Signature header. Reference script in documentation.
body body UpdateItems true The request body for updating items.
» items body [allOf] true An array of items to update. When the items were created in VPI, you received an identifier for each item. Use that identifier to update the item. At most 100 items can be updated in a single request.
»» anonymous body ItemProperties false none
»»» brand body string true The item brand.
»»» catalog_id body integer(int) true The ID of item catalog.
»»» color_ids body [integer] false The item colors IDs.
»»» currency body Currency true The currency used for prices.
»»» description body string true The item description. Must be between 5 and 2000 characters.
»»» is_unisex body boolean false A boolean indicating if item is unisex.
»»» manufacturer body string false Manufacturer credentials. E.g. "Mattel (USA)".
»»» manufacturer_labelling body string false Labelling and marketing information. This should be general information on product safety and compliance such as safety warnings and instructions of use or safety marks/logo/certifications related to the product.
»»» measurement_length body integer(int) false The item measurement length.
»»» measurement_width body integer(int) false The item measurement width.
»»» package_size_id body integer(int) true The ID of item package size.
»»» photo_urls body [string] true The URLs of the item photos. Must be publicly accessible. At least one photo is required.
»»» price body number(float) true The item price.
»»» size_id body integer(int) false The ID of item size. This is required for catalogs that have a size group (i.e. a non-empty size_group_ids array).
»»» status_id body integer(int) true The ID of item status (condition).
»»» title body string true The item title. Must be between 5 and 100 characters.
»» anonymous body ItemIsDraft false none
»»» is_draft body boolean true A boolean indicating whether the item is a draft.
»» anonymous body object false none
»»» item_id body string(uuid) true The item ID.

Enumerated Values

Parameter Value
»»» currency EUR

Example responses

202 Response

{
  "items": [
    {
      "accepted": true,
      "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c"
    }
  ]
}

Responses

Status Meaning Description Schema
202 Accepted Request accepted. Updates will be processed in the background. If items were not recognized as items that belong to your account the Updates will silently fail. UpdateItemsResponse
400 Bad Request A validation error occured. ValidationError
401 Unauthorized The user is not authorized to use API. None
500 Internal Server Error An unexpected error occured. None

GetItemStatus

Code samples

# You can also use wget
curl -X GET /api/v1/items/{id}/status \
  -H 'Accept: application/json' \
  -H 'X-Vpi-Hmac-Sha256: string' \
  -H 'X-Vpi-Access-Key: API_KEY'

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Vpi-Hmac-Sha256' => 'string',
  'X-Vpi-Access-Key' => 'API_KEY'
}

result = RestClient.get '/api/v1/items/{id}/status',
  params: {
  }, headers: headers

p JSON.parse(result)

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Vpi-Hmac-Sha256": []string{"string"},
        "X-Vpi-Access-Key": []string{"API_KEY"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "/api/v1/items/{id}/status", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}


const headers = {
  'Accept':'application/json',
  'X-Vpi-Hmac-Sha256':'string',
  'X-Vpi-Access-Key':'API_KEY'
};

fetch('/api/v1/items/{id}/status',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /api/v1/items/{id}/status

Retrieves the current status of an item on Vinted by its ID.

Parameters

Name In Type Required Description
X-Vpi-Hmac-Sha256 header string true Signature header. Reference script in documentation.
id path string(uuid) true The item ID.

Example responses

200 Response

{
  "errors": [
    {
      "field": "string",
      "message": "string"
    }
  ],
  "status": "IN_PROGRESS"
}

Responses

Status Meaning Description Schema
200 OK Successfully retrieved the item status. GetItemStatusResponse
400 Bad Request A validation error occured. ValidationError
401 Unauthorized The user is not authorized to use API. None
404 Not Found The item could not be found. None
500 Internal Server Error An unexpected error occured. None

GetOntologies

Code samples

# You can also use wget
curl -X GET /api/v1/ontologies \
  -H 'Accept: application/json' \
  -H 'X-Vpi-Hmac-Sha256: string' \
  -H 'X-Vpi-Access-Key: API_KEY'

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Vpi-Hmac-Sha256' => 'string',
  'X-Vpi-Access-Key' => 'API_KEY'
}

result = RestClient.get '/api/v1/ontologies',
  params: {
  }, headers: headers

p JSON.parse(result)

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Vpi-Hmac-Sha256": []string{"string"},
        "X-Vpi-Access-Key": []string{"API_KEY"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "/api/v1/ontologies", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}


const headers = {
  'Accept':'application/json',
  'X-Vpi-Hmac-Sha256':'string',
  'X-Vpi-Access-Key':'API_KEY'
};

fetch('/api/v1/ontologies',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /api/v1/ontologies

Gets the ontologies required to create valid Vinted items. For many fields the valid values depend on the category of the item. Therefore it's recommended to first map your category tree to Vinted's category tree before you map other product properties. Note that gender is encoded in the root categories at Vinted, but the category trees aren't equal for the Women, Men and Kids. This means your category mapping should take gender into account as well. Brands are omitted from the response due to the large number of brands available on Vinted. You can send any brand name when creating or updating an item which will automatically be mapped to a supported brand or VPI will leave the brand unassigned if its not recognised.

Parameters

Name In Type Required Description
X-Vpi-Hmac-Sha256 header string true Signature header. Reference script in documentation.

Example responses

200 Response

{
  "enumerations": {
    "catalogs": [
      {
        "catalogs": [
          {}
        ],
        "disabled_fields": [
          "brand"
        ],
        "id": 0,
        "size_group_ids": [
          0
        ],
        "title": "string"
      }
    ],
    "colors": [
      {
        "id": 0,
        "title": "string"
      }
    ],
    "package_sizes": [
      {
        "id": 0,
        "title": "string",
        "weight_description": "string"
      }
    ],
    "size_groups": [
      {
        "description": "string",
        "id": 0,
        "sizes": [
          {
            "id": 0,
            "title": "string"
          }
        ],
        "title": "string"
      }
    ],
    "statuses": [
      {
        "description": "string",
        "id": 0,
        "title": "string"
      }
    ]
  },
  "validation_rules": {
    "max_photos": 0,
    "max_price": 0.1,
    "min_price": 0.1
  },
  "version": {
    "country": "AT",
    "currency": "EUR",
    "last_updated_on": "2019-08-24T14:15:22Z"
  }
}

Responses

Status Meaning Description Schema
200 OK Successfully retrieved ontologies. GetOntologiesResponse
400 Bad Request A validation error occured. ValidationError
401 Unauthorized The user is not authorized to use API. None
500 Internal Server Error An unexpected error occured. None

Webhooks API

GetWebhooks

Code samples

# You can also use wget
curl -X GET /api/v1/webhooks \
  -H 'Accept: application/json' \
  -H 'X-Vpi-Hmac-Sha256: string' \
  -H 'X-Vpi-Access-Key: API_KEY'

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Vpi-Hmac-Sha256' => 'string',
  'X-Vpi-Access-Key' => 'API_KEY'
}

result = RestClient.get '/api/v1/webhooks',
  params: {
  }, headers: headers

p JSON.parse(result)

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Vpi-Hmac-Sha256": []string{"string"},
        "X-Vpi-Access-Key": []string{"API_KEY"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "/api/v1/webhooks", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}


const headers = {
  'Accept':'application/json',
  'X-Vpi-Hmac-Sha256':'string',
  'X-Vpi-Access-Key':'API_KEY'
};

fetch('/api/v1/webhooks',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /api/v1/webhooks

Lists your registered webhooks.

Parameters

Name In Type Required Description
X-Vpi-Hmac-Sha256 header string true Signature header. Reference script in documentation.

Example responses

200 Response

[
  {
    "event_types": [
      "CREATE_ITEM_SUCCESS"
    ],
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "url": "string"
  }
]

Responses

Status Meaning Description Schema
200 OK Successfully retrieved the webhooks. GetWebhooksResponse
400 Bad Request A validation error occured. ValidationError
401 Unauthorized The user is not authorized to use API. None
500 Internal Server Error An unexpected error occured. None

CreateWebhook

Code samples

# You can also use wget
curl -X POST /api/v1/webhooks \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Vpi-Hmac-Sha256: string' \
  -H 'X-Vpi-Access-Key: API_KEY'

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Vpi-Hmac-Sha256' => 'string',
  'X-Vpi-Access-Key' => 'API_KEY'
}

result = RestClient.post '/api/v1/webhooks',
  params: {
  }, headers: headers

p JSON.parse(result)

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Vpi-Hmac-Sha256": []string{"string"},
        "X-Vpi-Access-Key": []string{"API_KEY"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "/api/v1/webhooks", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

const inputBody = '{
  "event_types": [
    "CREATE_ITEM_SUCCESS"
  ],
  "url": "stringstr"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Vpi-Hmac-Sha256':'string',
  'X-Vpi-Access-Key':'API_KEY'
};

fetch('/api/v1/webhooks',
{
  method: 'POST',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

POST /api/v1/webhooks

Add a webhook to be called when events happen in Vinted.

Body parameter

{
  "event_types": [
    "CREATE_ITEM_SUCCESS"
  ],
  "url": "stringstr"
}

Parameters

Name In Type Required Description
X-Vpi-Hmac-Sha256 header string true Signature header. Reference script in documentation.
body body CreateUpdateWebhook true The request body for creating or updating webhooks.
» event_types body [WebhookEventType] true [The event type of the webhook.]
» url body string(url) true The URL to POST the webhook to when the event occurs. Must be between 9 and 255 characters and start with http:// or https://.

Enumerated Values

Parameter Value
» event_types CREATE_ITEM_SUCCESS
» event_types CREATE_ITEM_FAILURE
» event_types UPDATE_ITEM_SUCCESS
» event_types UPDATE_ITEM_FAILURE
» event_types DELETE_ITEM_SUCCESS
» event_types DELETE_ITEM_FAILURE
» event_types ITEM_SOLD

Example responses

201 Response

{
  "signing_key": "string",
  "webhook": {
    "event_types": [
      "CREATE_ITEM_SUCCESS"
    ],
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "url": "string"
  }
}

Responses

Status Meaning Description Schema
201 Created The webhook was successfully created. CreateWebhookResponse
400 Bad Request A validation error occured. ValidationError
401 Unauthorized The user is not authorized to use API. None
422 Unprocessable Entity The request could not be processed. CreateWebhookError
500 Internal Server Error An unexpected error occured. None

DeleteWebhook

Code samples

# You can also use wget
curl -X DELETE /api/v1/webhooks/{id} \
  -H 'Accept: application/json' \
  -H 'X-Vpi-Hmac-Sha256: string' \
  -H 'X-Vpi-Access-Key: API_KEY'

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Vpi-Hmac-Sha256' => 'string',
  'X-Vpi-Access-Key' => 'API_KEY'
}

result = RestClient.delete '/api/v1/webhooks/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Vpi-Hmac-Sha256": []string{"string"},
        "X-Vpi-Access-Key": []string{"API_KEY"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("DELETE", "/api/v1/webhooks/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}


const headers = {
  'Accept':'application/json',
  'X-Vpi-Hmac-Sha256':'string',
  'X-Vpi-Access-Key':'API_KEY'
};

fetch('/api/v1/webhooks/{id}',
{
  method: 'DELETE',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

DELETE /api/v1/webhooks/{id}

Deletes a webhook.

Parameters

Name In Type Required Description
X-Vpi-Hmac-Sha256 header string true Signature header. Reference script in documentation.
id path string(uuid) true The webhook ID.

Example responses

400 Response

{
  "field": "string",
  "message": "string"
}

Responses

Status Meaning Description Schema
200 OK Successfully deleted the webhook. None
304 Not Modified The webhook has already been deleted. None
400 Bad Request A validation error occured. ValidationError
401 Unauthorized The user is not authorized to use API. None
404 Not Found The webhook could not be found. None
500 Internal Server Error An unexpected error occured. None

UpdateWebhook

Code samples

# You can also use wget
curl -X PUT /api/v1/webhooks/{id} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Vpi-Hmac-Sha256: string' \
  -H 'X-Vpi-Access-Key: API_KEY'

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Vpi-Hmac-Sha256' => 'string',
  'X-Vpi-Access-Key' => 'API_KEY'
}

result = RestClient.put '/api/v1/webhooks/{id}',
  params: {
  }, headers: headers

p JSON.parse(result)

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Vpi-Hmac-Sha256": []string{"string"},
        "X-Vpi-Access-Key": []string{"API_KEY"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PUT", "/api/v1/webhooks/{id}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

const inputBody = '{
  "event_types": [
    "CREATE_ITEM_SUCCESS"
  ],
  "url": "stringstr"
}';
const headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Vpi-Hmac-Sha256':'string',
  'X-Vpi-Access-Key':'API_KEY'
};

fetch('/api/v1/webhooks/{id}',
{
  method: 'PUT',
  body: inputBody,
  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

PUT /api/v1/webhooks/{id}

Updates a webhook's URL and/or subscribed event types.

Body parameter

{
  "event_types": [
    "CREATE_ITEM_SUCCESS"
  ],
  "url": "stringstr"
}

Parameters

Name In Type Required Description
X-Vpi-Hmac-Sha256 header string true Signature header. Reference script in documentation.
id path string(uuid) true The webhook ID.
body body CreateUpdateWebhook true The request body for creating or updating webhooks.
» event_types body [WebhookEventType] true [The event type of the webhook.]
» url body string(url) true The URL to POST the webhook to when the event occurs. Must be between 9 and 255 characters and start with http:// or https://.

Enumerated Values

Parameter Value
» event_types CREATE_ITEM_SUCCESS
» event_types CREATE_ITEM_FAILURE
» event_types UPDATE_ITEM_SUCCESS
» event_types UPDATE_ITEM_FAILURE
» event_types DELETE_ITEM_SUCCESS
» event_types DELETE_ITEM_FAILURE
» event_types ITEM_SOLD

Example responses

400 Response

{
  "field": "string",
  "message": "string"
}

Responses

Status Meaning Description Schema
200 OK Successfully updated webhook. None
400 Bad Request A validation error occured. ValidationError
401 Unauthorized The user is not authorized to use API. None
404 Not Found The webhook could not be found. None
500 Internal Server Error An unexpected error occured. None

GetWebhookDeliveryResults

Code samples

# You can also use wget
curl -X GET /api/v1/webhooks/{id}/delivery-results \
  -H 'Accept: application/json' \
  -H 'X-Vpi-Hmac-Sha256: string' \
  -H 'X-Vpi-Access-Key: API_KEY'

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Vpi-Hmac-Sha256' => 'string',
  'X-Vpi-Access-Key' => 'API_KEY'
}

result = RestClient.get '/api/v1/webhooks/{id}/delivery-results',
  params: {
  }, headers: headers

p JSON.parse(result)

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Vpi-Hmac-Sha256": []string{"string"},
        "X-Vpi-Access-Key": []string{"API_KEY"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "/api/v1/webhooks/{id}/delivery-results", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}


const headers = {
  'Accept':'application/json',
  'X-Vpi-Hmac-Sha256':'string',
  'X-Vpi-Access-Key':'API_KEY'
};

fetch('/api/v1/webhooks/{id}/delivery-results',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /api/v1/webhooks/{id}/delivery-results

Gets the 100 latest delivery results (attempts, failures and successes) for a webhook.

Parameters

Name In Type Required Description
X-Vpi-Hmac-Sha256 header string true Signature header. Reference script in documentation.
id path string(uuid) true The webhook ID.

Example responses

200 Response

[
  {
    "created_at": "2019-08-24T14:15:22Z",
    "error_msg": "string",
    "event_type": "CREATE_ITEM_SUCCESS",
    "http_status_code": 0,
    "success": true
  }
]

Responses

Status Meaning Description Schema
200 OK Successfully retrieved the delivery results. Inline
400 Bad Request A validation error occured. ValidationError
401 Unauthorized The user is not authorized to use API. None
500 Internal Server Error An unexpected error occured. None

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [WebhookDeliveryResult] false none none
» created_at string(date-time) true none The date and time when the delivery result was created.
» error_msg string false none The error message if the delivery was not successful.
» event_type WebhookEventType true none The event type of the webhook.
» http_status_code integer(int) false none The HTTP status code of the response that Vinted received from the webhook endpoint. If a response was received at all.
» success boolean true none A boolean indicating if the delivery was successful.

Enumerated Values

Property Value
event_type CREATE_ITEM_SUCCESS
event_type CREATE_ITEM_FAILURE
event_type UPDATE_ITEM_SUCCESS
event_type UPDATE_ITEM_FAILURE
event_type DELETE_ITEM_SUCCESS
event_type DELETE_ITEM_FAILURE
event_type ITEM_SOLD

Dev mode API

TriggerItemSold

Code samples

# You can also use wget
curl -X POST /dev/v1/triggers/item-sold/{itemID} \
  -H 'Accept: application/json' \
  -H 'X-Vpi-Hmac-Sha256: string' \
  -H 'X-Vpi-Access-Key: API_KEY'

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Vpi-Hmac-Sha256' => 'string',
  'X-Vpi-Access-Key' => 'API_KEY'
}

result = RestClient.post '/dev/v1/triggers/item-sold/{itemID}',
  params: {
  }, headers: headers

p JSON.parse(result)

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Vpi-Hmac-Sha256": []string{"string"},
        "X-Vpi-Access-Key": []string{"API_KEY"},
    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "/dev/v1/triggers/item-sold/{itemID}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}


const headers = {
  'Accept':'application/json',
  'X-Vpi-Hmac-Sha256':'string',
  'X-Vpi-Access-Key':'API_KEY'
};

fetch('/dev/v1/triggers/item-sold/{itemID}',
{
  method: 'POST',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

POST /dev/v1/triggers/item-sold/{itemID}

Triggers the sale of an item

Use this endpoint to simulate making a sale. Only available in dev mode.

Parameters

Name In Type Required Description
X-Vpi-Hmac-Sha256 header string true Signature header. Reference script in documentation.
itemID path string(uuid) true The item ID.

Example responses

400 Response

{
  "field": "string",
  "message": "string"
}

Responses

Status Meaning Description Schema
200 OK The item sale was successfully triggered. None
400 Bad Request Bad request ValidationError
404 Not Found Not found None
500 Internal Server Error Unexpected error None

Schemas

Catalog

{
  "catalogs": [
    {
      "catalogs": [],
      "disabled_fields": [
        "brand"
      ],
      "id": 0,
      "size_group_ids": [
        0
      ],
      "title": "string"
    }
  ],
  "disabled_fields": [
    "brand"
  ],
  "id": 0,
  "size_group_ids": [
    0
  ],
  "title": "string"
}

Properties

Name Type Required Restrictions Description
catalogs [Catalog] false none The child catalogs. Empty for leaf catalogs.
disabled_fields [string] false none Fields that are disabled for this catalog. Empty for non-leaf catalogs. Disabled fields will be ignored on an item when the catalog is set to this catalog.
id integer true none The catalog ID.
size_group_ids [integer] false none Only the provided size groups are valid for this catalog. Empty for non-leaf catalogs.
title string true none The catalog title.

Color

{
  "id": 0,
  "title": "string"
}

Properties

Name Type Required Restrictions Description
id integer true none The color ID.
title string true none The color title.

CompleteItemToCreate

{
  "brand": "string",
  "catalog_id": 0,
  "color_ids": [
    0
  ],
  "currency": "EUR",
  "description": "string",
  "is_unisex": true,
  "manufacturer": "string",
  "manufacturer_labelling": "string",
  "measurement_length": 0,
  "measurement_width": 0,
  "package_size_id": 0,
  "photo_urls": [
    "http://example.com"
  ],
  "price": 1,
  "size_id": 0,
  "status_id": 0,
  "title": "string",
  "item_reference": "string",
  "is_draft": true
}

Properties

allOf

Name Type Required Restrictions Description
anonymous ItemProperties false none none

and

Name Type Required Restrictions Description
anonymous ItemReference false none none

and

Name Type Required Restrictions Description
anonymous ItemIsDraft false none none

CreateItemFailureEventData

{
  "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c",
  "item_reference": "string",
  "errors": [
    {
      "field": "string",
      "message": "string"
    }
  ],
  "message": "string"
}

Properties

None

CreateItemSuccessEventData

{
  "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c",
  "item_reference": "string"
}

Properties

None

CreateItemValidationError

{
  "field": "string",
  "message": "string"
}

Properties

None

CreateItems

{
  "items": [
    {
      "brand": "string",
      "catalog_id": 0,
      "color_ids": [
        0
      ],
      "currency": "EUR",
      "description": "string",
      "is_unisex": true,
      "manufacturer": "string",
      "manufacturer_labelling": "string",
      "measurement_length": 0,
      "measurement_width": 0,
      "package_size_id": 0,
      "photo_urls": [
        "http://example.com"
      ],
      "price": 1,
      "size_id": 0,
      "status_id": 0,
      "title": "string",
      "item_reference": "string",
      "is_draft": true
    }
  ]
}

Properties

Name Type Required Restrictions Description
items [CompleteItemToCreate] true none An array of items to create. At most 100 items can be created in a single request.

CreateItemsResponse

{
  "items": [
    {
      "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c",
      "item_reference": "string"
    }
  ]
}

Properties

Name Type Required Restrictions Description
items [ItemIDAndReference] true none none

CreateItemsValidationErrorResponse

[
  {
    "field": "string",
    "message": "string"
  }
]

Properties

Name Type Required Restrictions Description
anonymous [CreateItemValidationError] false none none

CreateUpdateWebhook

{
  "event_types": [
    "CREATE_ITEM_SUCCESS"
  ],
  "url": "stringstr"
}

Properties

Name Type Required Restrictions Description
event_types [WebhookEventType] true none [The event type of the webhook.]
url string(url) true none The URL to POST the webhook to when the event occurs. Must be between 9 and 255 characters and start with http:// or https://.

CreateWebhookError

{
  "error": "MAX_WEBHOOKS_EXCEEDED"
}

Properties

Name Type Required Restrictions Description
error string true none none

Enumerated Values

Property Value
error MAX_WEBHOOKS_EXCEEDED

CreateWebhookResponse

{
  "signing_key": "string",
  "webhook": {
    "event_types": [
      "CREATE_ITEM_SUCCESS"
    ],
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "url": "string"
  }
}

Properties

Name Type Required Restrictions Description
signing_key string true none none
webhook Webhook true none none

Currency

"EUR"

The currency used for prices.

Properties

Name Type Required Restrictions Description
anonymous string false none The currency used for prices.

Enumerated Values

Property Value
anonymous EUR

DeleteItemFailureEventData

{
  "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c",
  "item_reference": "string"
}

Properties

None

DeleteItemSuccessEventData

{
  "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c",
  "item_reference": "string"
}

Properties

None

DeleteItems

{
  "item_ids": [
    "497f6eca-6276-4993-bfeb-53cbbbba6f08"
  ]
}

Properties

Name Type Required Restrictions Description
item_ids [string] true none An array of item identifiers. When the items were created in VPI, you received an identifier for each item. Use that identifier to delete the item. At most 100 items can be deleted in a single request.

DeleteItemsResponse

{
  "items": [
    {
      "accepted": true,
      "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c"
    }
  ]
}

Properties

Name Type Required Restrictions Description
items [DeleteItemsResponseItem] true none none

DeleteItemsResponseItem

{
  "accepted": true,
  "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c"
}

Properties

Name Type Required Restrictions Description
accepted boolean true none A boolean indicating if the deletion request for the item was accepted. Examples of reasons for an item deletion not to be accepted are than you do not own the item, the item was already deleted or the item was already sold.
item_id string(uuid) true none none

GetItemStatusResponse

{
  "errors": [
    {
      "field": "string",
      "message": "string"
    }
  ],
  "status": "IN_PROGRESS"
}

Properties

Name Type Required Restrictions Description
errors [ValidationError] false none none
status string true none The item status.

Enumerated Values

Property Value
status IN_PROGRESS
status ACTIVE
status SOLD
status DELETED
status DELETE_INTERNAL_ERROR
status VALIDATION_ERROR
status UPDATE_INTERNAL_ERROR
status UPDATE_VALIDATION_ERROR
status INTERNAL_ERROR

GetOntologiesResponse

{
  "enumerations": {
    "catalogs": [
      {
        "catalogs": [
          {}
        ],
        "disabled_fields": [
          "brand"
        ],
        "id": 0,
        "size_group_ids": [
          0
        ],
        "title": "string"
      }
    ],
    "colors": [
      {
        "id": 0,
        "title": "string"
      }
    ],
    "package_sizes": [
      {
        "id": 0,
        "title": "string",
        "weight_description": "string"
      }
    ],
    "size_groups": [
      {
        "description": "string",
        "id": 0,
        "sizes": [
          {
            "id": 0,
            "title": "string"
          }
        ],
        "title": "string"
      }
    ],
    "statuses": [
      {
        "description": "string",
        "id": 0,
        "title": "string"
      }
    ]
  },
  "validation_rules": {
    "max_photos": 0,
    "max_price": 0.1,
    "min_price": 0.1
  },
  "version": {
    "country": "AT",
    "currency": "EUR",
    "last_updated_on": "2019-08-24T14:15:22Z"
  }
}

Properties

Name Type Required Restrictions Description
enumerations object true none Ontologies enumerations. Only values from these enumerations are valid for sending as item data. However, not all values from these enumerations are valid for all items. The Catalog object dictates some subsets of valid values.
» catalogs [Catalog] true none none
» colors [Color] true none none
» package_sizes [PackageSize] true none [The size of the package that the item will be shipped in.]
» size_groups [SizeGroup] true none none
» statuses [Status] true none [Condition of an item/product.]
validation_rules ValidationRules true none none
version object true none Although most of the ontologies data is static, it does vary based on country and currency, therefore the ontologies are versioned using those properties + a date-time reference to when it was last updated.
» country string true none none
» currency Currency true none The currency used for prices.
» last_updated_on string(date-time) true none none

Enumerated Values

Property Value
country AT
country BE
country DE
country ES
country FR
country IT
country LU
country NL
country PT
country UK

GetWebhooksResponse

[
  {
    "event_types": [
      "CREATE_ITEM_SUCCESS"
    ],
    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
    "url": "string"
  }
]

Properties

Name Type Required Restrictions Description
anonymous [Webhook] false none none

ItemIDAndReference

{
  "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c",
  "item_reference": "string"
}

Properties

Name Type Required Restrictions Description
item_id string(uuid) true none The main item identifier.
item_reference string true none The item reference for the integrator to identify the item.

ItemIDAndReferenceWithErrors

{
  "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c",
  "item_reference": "string",
  "errors": [
    {
      "field": "string",
      "message": "string"
    }
  ],
  "message": "string"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous ItemIDAndReference false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» errors [ValidationError] false none none
» message string false none none

ItemIsDraft

{
  "is_draft": true
}

Properties

Name Type Required Restrictions Description
is_draft boolean true none A boolean indicating whether the item is a draft.

ItemProperties

{
  "brand": "string",
  "catalog_id": 0,
  "color_ids": [
    0
  ],
  "currency": "EUR",
  "description": "string",
  "is_unisex": true,
  "manufacturer": "string",
  "manufacturer_labelling": "string",
  "measurement_length": 0,
  "measurement_width": 0,
  "package_size_id": 0,
  "photo_urls": [
    "http://example.com"
  ],
  "price": 1,
  "size_id": 0,
  "status_id": 0,
  "title": "string"
}

Properties

Name Type Required Restrictions Description
brand string true none The item brand.
catalog_id integer(int) true none The ID of item catalog.
color_ids [integer] false none The item colors IDs.
currency Currency true none The currency used for prices.
description string true none The item description. Must be between 5 and 2000 characters.
is_unisex boolean false none A boolean indicating if item is unisex.
manufacturer string false none Manufacturer credentials. E.g. "Mattel (USA)".
manufacturer_labelling string false none Labelling and marketing information. This should be general information on product safety and compliance such as safety warnings and instructions of use or safety marks/logo/certifications related to the product.
measurement_length integer(int) false none The item measurement length.
measurement_width integer(int) false none The item measurement width.
package_size_id integer(int) true none The ID of item package size.
photo_urls [string] true none The URLs of the item photos. Must be publicly accessible. At least one photo is required.
price number(float) true none The item price.
size_id integer(int) false none The ID of item size. This is required for catalogs that have a size group (i.e. a non-empty size_group_ids array).
status_id integer(int) true none The ID of item status (condition).
title string true none The item title. Must be between 5 and 100 characters.

ItemReference

{
  "item_reference": "string"
}

Properties

Name Type Required Restrictions Description
item_reference string true none The item reference for the integrator to identify the item.

ItemSoldEventData

{
  "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c",
  "item_reference": "string"
}

Properties

None

ItemToUpdate

{
  "brand": "string",
  "catalog_id": 0,
  "color_ids": [
    0
  ],
  "currency": "EUR",
  "description": "string",
  "is_unisex": true,
  "manufacturer": "string",
  "manufacturer_labelling": "string",
  "measurement_length": 0,
  "measurement_width": 0,
  "package_size_id": 0,
  "photo_urls": [
    "http://example.com"
  ],
  "price": 1,
  "size_id": 0,
  "status_id": 0,
  "title": "string",
  "is_draft": true,
  "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c"
}

Properties

allOf

Name Type Required Restrictions Description
anonymous ItemProperties false none none

and

Name Type Required Restrictions Description
anonymous ItemIsDraft false none none

and

Name Type Required Restrictions Description
anonymous object false none none
» item_id string(uuid) true none The item ID.

PackageSize

{
  "id": 0,
  "title": "string",
  "weight_description": "string"
}

The size of the package that the item will be shipped in.

Properties

Name Type Required Restrictions Description
id integer true none The package size ID.
title string true none The package size title.
weight_description string false none The package size weight description.

Size

{
  "id": 0,
  "title": "string"
}

Properties

Name Type Required Restrictions Description
id integer true none The size ID.
title string true none The size title.

SizeGroup

{
  "description": "string",
  "id": 0,
  "sizes": [
    {
      "id": 0,
      "title": "string"
    }
  ],
  "title": "string"
}

Properties

Name Type Required Restrictions Description
description string true none The size group description.
id integer true none The size group ID.
sizes [Size] true none The sizes in this size group.
title string true none The size group title.

Status

{
  "description": "string",
  "id": 0,
  "title": "string"
}

Condition of an item/product.

Properties

Name Type Required Restrictions Description
description string true none The status description.
id integer true none The status ID.
title string true none The status title.

UpdateItemFailureEventData

{
  "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c",
  "item_reference": "string",
  "errors": [
    {
      "field": "string",
      "message": "string"
    }
  ],
  "message": "string"
}

Properties

None

UpdateItemSuccessEventData

{
  "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c",
  "item_reference": "string"
}

Properties

None

UpdateItems

{
  "items": [
    {
      "brand": "string",
      "catalog_id": 0,
      "color_ids": [
        0
      ],
      "currency": "EUR",
      "description": "string",
      "is_unisex": true,
      "manufacturer": "string",
      "manufacturer_labelling": "string",
      "measurement_length": 0,
      "measurement_width": 0,
      "package_size_id": 0,
      "photo_urls": [
        "http://example.com"
      ],
      "price": 1,
      "size_id": 0,
      "status_id": 0,
      "title": "string",
      "is_draft": true,
      "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c"
    }
  ]
}

Properties

Name Type Required Restrictions Description
items [ItemToUpdate] true none An array of items to update. When the items were created in VPI, you received an identifier for each item. Use that identifier to update the item. At most 100 items can be updated in a single request.

UpdateItemsResponse

{
  "items": [
    {
      "accepted": true,
      "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c"
    }
  ]
}

Properties

Name Type Required Restrictions Description
items [UpdateItemsResponseItem] true none none

UpdateItemsResponseItem

{
  "accepted": true,
  "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c"
}

Properties

Name Type Required Restrictions Description
accepted boolean true none A boolean indicating if the update request for the item was accepted. Examples of reasons for an item update not to be accepted are that you do not own the item or the item was already sold.
item_id string(uuid) true none none

ValidationError

{
  "field": "string",
  "message": "string"
}

Properties

Name Type Required Restrictions Description
field string true none none
message string true none none

ValidationRules

{
  "max_photos": 0,
  "max_price": 0.1,
  "min_price": 0.1
}

Properties

Name Type Required Restrictions Description
max_photos integer true none The maximum number of photos allowed for an item.
max_price number(float) true none The maximum price allowed for an item.
min_price number(float) true none The minimum price allowed for an item.

Webhook

{
  "event_types": [
    "CREATE_ITEM_SUCCESS"
  ],
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "url": "string"
}

Properties

Name Type Required Restrictions Description
event_types [WebhookEventType] true none [The event type of the webhook.]
id string(uuid) true none none
url string(url) true none none

WebhookDeliveryResult

{
  "created_at": "2019-08-24T14:15:22Z",
  "error_msg": "string",
  "event_type": "CREATE_ITEM_SUCCESS",
  "http_status_code": 0,
  "success": true
}

Properties

Name Type Required Restrictions Description
created_at string(date-time) true none The date and time when the delivery result was created.
error_msg string false none The error message if the delivery was not successful.
event_type WebhookEventType true none The event type of the webhook.
http_status_code integer(int) false none The HTTP status code of the response that Vinted received from the webhook endpoint. If a response was received at all.
success boolean true none A boolean indicating if the delivery was successful.

WebhookEventData

{
  "event_data": {
    "item_id": "4d8cd62e-a579-4dae-af8c-3172f96f8f7c",
    "item_reference": "string"
  },
  "event_type": "CREATE_ITEM_SUCCESS",
  "webhook_id": "a47606a1-5b39-4a81-9480-c2cb738ff675"
}

The event data sent to a webhook endpoint.

Properties

Name Type Required Restrictions Description
event_data any true none The data that is sent with the webhook.

oneOf

Name Type Required Restrictions Description
» anonymous CreateItemSuccessEventData false none none

xor

Name Type Required Restrictions Description
» anonymous CreateItemFailureEventData false none none

xor

Name Type Required Restrictions Description
» anonymous UpdateItemSuccessEventData false none none

xor

Name Type Required Restrictions Description
» anonymous UpdateItemFailureEventData false none none

xor

Name Type Required Restrictions Description
» anonymous DeleteItemSuccessEventData false none none

xor

Name Type Required Restrictions Description
» anonymous DeleteItemFailureEventData false none none

xor

Name Type Required Restrictions Description
» anonymous ItemSoldEventData false none none

continued

Name Type Required Restrictions Description
event_type WebhookEventType true none The event type of the webhook.
webhook_id string(uuid) true none none

WebhookEventType

"CREATE_ITEM_SUCCESS"

The event type of the webhook.

Properties

Name Type Required Restrictions Description
anonymous string false none The event type of the webhook.

Enumerated Values

Property Value
anonymous CREATE_ITEM_SUCCESS
anonymous CREATE_ITEM_FAILURE
anonymous UPDATE_ITEM_SUCCESS
anonymous UPDATE_ITEM_FAILURE
anonymous DELETE_ITEM_SUCCESS
anonymous DELETE_ITEM_FAILURE
anonymous ITEM_SOLD