Skip to main content
POST
/
api
/
v1
/
offerings
Create an offering
curl --request POST \
  --url https://app.vorel.ai/api/v1/offerings \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "title": "<string>",
  "price": 1,
  "external_id": "<string>",
  "reference_number": "<string>",
  "title_ar": "<string>",
  "description": "<string>",
  "description_ar": "<string>",
  "attributes": {},
  "price_currency": "<string>",
  "address": "<string>",
  "photos": [
    "<string>"
  ],
  "status": "<string>",
  "available_from": "<string>"
}
'
{
  "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "title": "<string>",
  "price": "<string>",
  "price_currency": "<string>",
  "photos": [
    "<string>"
  ],
  "status": "<string>",
  "created_at": "2023-11-07T05:31:56Z",
  "updated_at": "2023-11-07T05:31:56Z",
  "external_id": "<string>",
  "reference_number": "<string>",
  "title_ar": "<string>",
  "description": "<string>",
  "description_ar": "<string>",
  "attributes": {},
  "address": "<string>",
  "available_from": "2023-12-25"
}

Documentation Index

Fetch the complete documentation index at: https://docs.vorel.ai/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

Authorization
string
header
required

Tenant-issued API key. Format: vapk_live_<48 hex chars> (60 chars total). Issue + manage at /settings/integrations/api-keys in the Vorel dashboard. Each key has a scope set (read, leads:write, appointments:write, offerings:write); endpoints requiring a write scope reject keys without it with a 403 envelope.

Body

application/json
title
string
required
Required string length: 1 - 500
price
required
Required range: x >= 0
external_id
string | null
Maximum string length: 120
reference_number
string | null
Maximum string length: 120
title_ar
string | null
Maximum string length: 500
description
string | null
Maximum string length: 10000
description_ar
string | null
Maximum string length: 10000
attributes
object
price_currency
string

ISO 4217 (uppercase). Server defaults to AED if omitted.

Pattern: ^[A-Z]{3}$
address
string | null
Maximum string length: 500
photos
string<uri>[]
Maximum array length: 20
Maximum string length: 2048
status
string
Maximum string length: 40
available_from
string | null

YYYY-MM-DD; stored as date-only.

Pattern: ^\d{4}-\d{2}-\d{2}$

Response

Offering created.

id
string<uuid>
required
title
string
required
price
string
required

Decimal serialized as string to preserve precision for large values that lose accuracy as JS numbers. Caller can parseFloat() if they don't need the precision.

price_currency
string
required

ISO 4217 (e.g. AED, USD).

Required string length: 3
photos
string<uri>[]
required
status
string
required
created_at
string<date-time>
required
updated_at
string<date-time>
required
external_id
string | null
reference_number
string | null
title_ar
string | null
description
string | null
description_ar
string | null
attributes
object

Vertical-specific JSONB (real estate: bedrooms/area/etc.; salon: service_type/duration_minutes/etc.).

address
string | null
available_from
string<date> | null

YYYY-MM-DD, no time component.