Youbega Public API
RESTful API for managing products, locations, shipping methods, and orders
🔐 Authentication
API Key Authentication
All endpoints require authentication using an API key. You must include your API key in the request headers:
X-Api-Key
Example Request:
GET /products HTTP/1.1 Host: api.youbega.com X-Api-Key: your-api-key-here
Content type per endpoint:
• GET endpoints have no request body — do not send a Content-Type header.
• POST /locations and POST /shippingMethods expect application/json.
• POST /products and PUT /products expect multipart/form-data only. Any other content type returns 415 Unsupported Media Type.
How to get your API key:
- Log in to your Youbega account
- Navigate to your account settings
- Go to the "API Access" section
- Generate a new API key
- Copy and securely store your API key
Available Endpoints
Select an endpoint from the navigation menu on the left to view detailed documentation including request parameters, response formats, and examples.
GET/productsAuth Required
Description
Retrieves a list of products.
Authentication
This endpoint requires authentication via API key. Include your API key in the request headers.
Request Body
None
Response
JSON array of products.
[
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "Product Name",
"description": "Product description",
"basePrice": 99.99,
"maxPrice": 149.99,
"quantity": 100,
"currencyId": 1,
"listingTypeId": 1,
"priceTypeId": 1,
"personalPickup": true,
"categoriesIds": [1, 2, 3],
"countryCodes": ["US", "UK"],
"locationsIds": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"],
"shippingMethodsIds": ["3fa85f64-5717-4562-b3fc-2c963f66afa6"],
"tags": ["new", "sale"],
"parameters": [
{
"id": 1,
"name": "Color",
"value": "Red"
}
]
}
]
POST/productsAuth Required
Description
Add a new product to the system.
Authentication
This endpoint requires authentication via API key. Include your API key in the request headers.
Request Body
This endpoint accepts multipart/form-data only, because it carries file uploads. Sending application/json or application/x-www-form-urlencoded returns 415 Unsupported Media Type.
Name string Product title. Description string Product description. Always send it — an empty string is allowed. BasePrice decimal Dot as decimal separator, e.g. 19.99 MaxPrice decimal Dot as decimal separator, e.g. 100.00 CurrencyId integer ListingTypeId integer PriceTypeId integer Quantity integer PersonalPickup boolean true / false ItemCondition enum New | LikeNew | Used (or 1 | 2 | 3) TermsAndConditions string Always send it — an empty string is allowed. ManufacturerInfo string Always send it — an empty string is allowed. ResponsiblePersonInfo string Always send it — an empty string is allowed. CategoriesIds[i] integer Max 3 ids. Each subsequent id is a nested category. CountryCodes[i] string e.g. US, UK LocationsIds[i] guid ShippingMethodsIds[i] guid Tags[i] string PaymentCapabilities[i] enum Cash | Card | BankTransfer (or 0 | 1 | 2) Parameters[i].Name string Parameters[i].Value string AdvertisementFiles file Product photos. Repeat the field to send several files. GpsrFiles file GPSR documents. Repeat the field to send several files.
Notes:
• Do not set the Content-Type header by hand. Postman, Insomnia, curl and every HTTP client add multipart/form-data together with the required boundary on their own. A manually added Content-Type: application/json overrides it and the request fails with 415 Unsupported Media Type before any field is read — this is by far the most common cause of 415 on this endpoint.
• Field names are case-sensitive and unknown names are ignored silently. Mind the file fields: AdvertisementFiles and GpsrFiles (Gpsr, not Gspr).
• Arrays are sent either with an index — Tags[0], Tags[1] — or by repeating the same field name. A single comma-separated value such as CategoriesIds=1,2,3 is not supported and returns 400.
• Objects inside arrays use dot notation: Parameters[0].Name, Parameters[0].Value. Bracket notation Parameters[0][Name] does not bind — the request succeeds but the parameters are lost.
• Enum fields accept either the name or the numeric value. Any other value returns 400.
• Description, TermsAndConditions, ManufacturerInfo and ResponsiblePersonInfo must be present in the request; omitting them returns 400.
Example Request
curl -X POST https://api.youbega.com/products \ -H "X-Api-Key: your-api-key-here" \ -F "Name=My product" \ -F "Description=Product description" \ -F "BasePrice=19.99" \ -F "MaxPrice=100.00" \ -F "CurrencyId=1" \ -F "ListingTypeId=1" \ -F "PriceTypeId=1" \ -F "Quantity=10" \ -F "PersonalPickup=false" \ -F "ItemCondition=New" \ -F "TermsAndConditions=" \ -F "ManufacturerInfo=" \ -F "ResponsiblePersonInfo=" \ -F "CategoriesIds[0]=1" \ -F "CategoriesIds[1]=2" \ -F "CountryCodes[0]=US" \ -F "LocationsIds[0]=00000000-0000-0000-0000-000000000000" \ -F "ShippingMethodsIds[0]=00000000-0000-0000-0000-000000000000" \ -F "Tags[0]=new" \ -F "PaymentCapabilities[0]=Card" \ -F "Parameters[0].Name=Color" \ -F "Parameters[0].Value=Red" \ -F "AdvertisementFiles=@photo.png;type=image/png" \ -F "GpsrFiles=@safety.pdf;type=application/pdf"
Response
Returns the newly created ProductId.
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
PUT/productsAuth Required
Description
Update an existing product.
Authentication
This endpoint requires authentication via API key. Include your API key in the request headers.
Request Body
This endpoint accepts multipart/form-data only, because it carries file uploads. Sending application/json or application/x-www-form-urlencoded returns 415 Unsupported Media Type.
Id guid Id of the product to update. Required. Name string Product title. Description string Product description. Always send it — an empty string is allowed. BasePrice decimal Dot as decimal separator, e.g. 19.99 MaxPrice decimal Dot as decimal separator, e.g. 100.00 CurrencyId integer ListingTypeId integer PriceTypeId integer Quantity integer PersonalPickup boolean true / false ItemCondition enum New | LikeNew | Used (or 1 | 2 | 3) TermsAndConditions string Always send it — an empty string is allowed. ManufacturerInfo string Always send it — an empty string is allowed. ResponsiblePersonInfo string Always send it — an empty string is allowed. CategoriesIds[i] integer Max 3 ids. Each subsequent id is a nested category. CountryCodes[i] string e.g. US, UK LocationsIds[i] guid ShippingMethodsIds[i] guid Tags[i] string PaymentCapabilities[i] enum Cash | Card | BankTransfer (or 0 | 1 | 2) Parameters[i].Id integer Id of an existing parameter. Omit it to add a new one. Parameters[i].Name string Parameters[i].Value string AdvertisementFiles file Product photos. Repeat the field to send several files. GpsrFiles file GPSR documents. Repeat the field to send several files.
Notes:
• Do not set the Content-Type header by hand. Postman, Insomnia, curl and every HTTP client add multipart/form-data together with the required boundary on their own. A manually added Content-Type: application/json overrides it and the request fails with 415 Unsupported Media Type before any field is read — this is by far the most common cause of 415 on this endpoint.
• Field names are case-sensitive and unknown names are ignored silently. Mind the file fields: AdvertisementFiles and GpsrFiles (Gpsr, not Gspr).
• Arrays are sent either with an index — Tags[0], Tags[1] — or by repeating the same field name. A single comma-separated value such as CategoriesIds=1,2,3 is not supported and returns 400.
• Objects inside arrays use dot notation: Parameters[0].Name, Parameters[0].Value. Bracket notation Parameters[0][Name] does not bind — the request succeeds but the parameters are lost.
• Enum fields accept either the name or the numeric value. Any other value returns 400.
• Description, TermsAndConditions, ManufacturerInfo and ResponsiblePersonInfo must be present in the request; omitting them returns 400.
Response
Returns the updated ProductId.
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
GET/products/categoriesAuth Required
Description
Retrieves a hierarchical list of product categories.
Authentication
This endpoint requires authentication via API key. Include your API key in the request headers.
Request Body
None
Response
JSON array of categories with nested subcategories.
[
{
"id": "1",
"categoryCode": "string",
"subCategories": [
{
"id": "2",
"categoryCode": "string",
"subCategories": [...more subcategories]
}
]
}
]
GET/locationsAuth Required
Description
Retrieves a list of locations.
Authentication
This endpoint requires authentication via API key. Include your API key in the request headers.
Response
JSON array of locations.
[
{
"id": "00000000-0000-0000-0000-000000000000",
"address": "string",
"countryCode": "string"
}
]
POST/locationsAuth Required
Description
Creates a new location.
Authentication
This endpoint requires authentication via API key. Include your API key in the request headers.
Request Body
{
"name": "string",
"address": "string",
"city": "string",
"zip": "string"
}
Response
Returns the newly created location Id.
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
GET/shippingMethodsAuth Required
Description
Retrieves a list of shipping methods for the authenticated user.
Authentication
This endpoint requires authentication via API key. Include your API key in the request headers.
Request Body
None
Response
JSON array of shipping methods associated with the authenticated user.
[
{
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"description": "string",
"cost": 0.0,
"estimatedDeliveryDays": 5
}
]
POST/shippingMethodsAuth Required
Description
Creates a new shipping method for the authenticated user.
Authentication
This endpoint requires authentication via API key. Include your API key in the request headers.
Request Body
JSON object containing the shipping method details:
{
"name": "string",
"description": "string",
"cost": 0.0,
"estimatedDeliveryDays": 5,
"isActive": true
}
Response
Returns the newly created shipping method Id.
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
GET/ordersAuth Required
Description
Retrieves a paginated list of the authenticated seller's orders for synchronization with external systems (ERP, accounting, marketplaces). Each order includes the customer's shipping and invoice addresses, line items, and order totals.
Authentication
This endpoint requires authentication via API key. Include your API key in the request headers.
Query Parameters
page integer Zero-based page index. Default: 0 pageSize integer Number of orders per page. Default: 20 startDate string ISO-8601 date-time (optional). Only orders modified on/after this instant. endDate string ISO-8601 date-time (optional). Only orders modified on/before this instant.
Notes:
• Use startDate for incremental sync — pass the timestamp of your last successful pull to fetch only changed orders.
• Only orders where the authenticated user is the seller are returned.
Request Body
None
Example Request
GET /orders?page=0&pageSize=20&startDate=2026-01-01T00:00:00Z HTTP/1.1 Host: api.youbega.com X-Api-Key: your-api-key-here
Response
JSON object with the paginated orders and a total count.
{
"orders": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"clusteredId": 12345,
"displayId": "20260115-12345",
"orderStatus": 3,
"orderStatusName": "Payment Received",
"modifiedOn": "2026-01-15T10:30:00+00:00",
"summarizedPrice": 149.99,
"currencyId": 1,
"shippingAddress": {
"firstName": "John",
"lastName": "Doe",
"companyName": null,
"street": "Main Street",
"streetNumber": "10",
"houseNumber": "5",
"city": "Warsaw",
"district": null,
"postalCode": "00-001",
"province": "Mazowieckie",
"countryCode": "PL",
"phoneNumber": "+48123456789",
"taxpayerNumber": null
},
"invoiceAddress": {
"firstName": "John",
"lastName": "Doe",
"companyName": "Doe Ltd.",
"street": "Main Street",
"streetNumber": "10",
"houseNumber": "5",
"city": "Warsaw",
"district": null,
"postalCode": "00-001",
"province": "Mazowieckie",
"countryCode": "PL",
"phoneNumber": "+48123456789",
"taxpayerNumber": "PL1234567890"
},
"items": [
{
"productId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "Product Name",
"urlSlug": "product-name",
"quantity": 2,
"pricePerPiece": 74.99,
"currencyId": 1
}
]
}
],
"pageNumber": 0,
"pageSize": 1,
"totalCount": 137
}
Notes:
• shippingAddress and invoiceAddress may be null if the order has no such address.
• pageSize in the response reflects the number of orders actually returned on this page; totalCount is the total number of matching orders.
• All orders are returned regardless of status (including unpaid). Use orderStatus / orderStatusName to filter on your side (see the Order Statuses table below).
Order Statuses
The orderStatus field is a numeric code; orderStatusName is its human-readable label.
| orderStatus | orderStatusName |
|---|---|
1 | Unpaid |
2 | Payment Dispatched |
3 | Payment Received |
4 | Shipped |
5 | Delivered |
6 | Cancelled |
7 | PaymentProcessing |
8 | Refund |
9 | Completed |
10 | Shipping Label Created |
11 | Dispute Opened |