Skip to main content
Developers

The AXEDOMO API

A small, public HTTP API for sending leads, complaints, stock alerts and bookings to a shop from anywhere: a landing page, a partner site, or your own tools. Every endpoint, field and status code below is taken straight from the running code.

Base URLhttps://www.axedomo.com

All requests and responses are JSON. Send Content-Type: application/json on every POST.

Authentication

The public endpoints are scoped by your shop_id, a public identifier for your shop, not a secret. There is no API key today. Only active shops accept writes.

Errors

A failed request returns a non-200 status and a body of the shape { "error": { "code": "INVALID_INPUT" } }. Validation failures add an issues list.

Your shop_id

Find your shop_id in your AXEDOMO admin, or ask us. Every request is tied to one shop, so leads and bookings land in the right place.

GET/api/v1/health

Health check

A public uptime probe. Returns the service name, version and a timestamp.

Auth: Public. No authentication.

Example request
curl https://www.axedomo.com/api/v1/health
Example response
200 OK

{
  "status": "ok",
  "service": "axedomo",
  "version": "1.168.0",
  "timestamp": "2026-07-19T00:00:00.000Z"
}
POST/api/v1/leads/submit

Submit a lead

Capture an enquiry for a shop from any site or form. The shop's team is notified.

Auth: Public, scoped by shop_id. No API key.

Body
shop_idstring (UUID)requiredThe shop the lead belongs to.
namestring (1 to 120)requiredThe person's name.
emailstring, email (max 160)requiredContact email.
phonestring (max 40), nullableoptionalContact phone.
messagestring (1 to 4000)requiredThe enquiry text.
product_idstring (UUID), nullableoptionalA product the lead is about.
Example request
curl -X POST https://www.axedomo.com/api/v1/leads/submit \
  -H "Content-Type: application/json" \
  -d '{
  "shop_id": "00000000-0000-0000-0000-000000000000",
  "name": "Alex Morgan",
  "email": "alex@example.com",
  "message": "Do you deliver on weekends?"
}'
Example response
200 OK

{
  "data": { "ok": true }
}
Errors
400INVALID_JSONThe body is not valid JSON.
400INVALID_INPUTA field failed validation. An issues array is included.
400LEAD_FAILEDThe shop is not active, or the write was rejected.

The team email is best effort. A mail problem never changes the 200 response.

POST/api/v1/complaints/submit

Submit a complaint

Raise a complaint against a shop, optionally tied to an order.

Auth: Public, scoped by shop_id.

Body
shop_idstring (UUID)requiredThe shop the complaint is about.
emailstring, email (max 254)requiredContact email.
subjectstring (3 to 120)requiredA short subject line.
bodystring (3 to 4000)requiredThe complaint detail.
namestring (max 120), nullableoptionalThe person's name.
related_order_idstring (UUID), nullableoptionalAn order the complaint relates to.
Example request
curl -X POST https://www.axedomo.com/api/v1/complaints/submit \
  -H "Content-Type: application/json" \
  -d '{
  "shop_id": "00000000-0000-0000-0000-000000000000",
  "email": "alex@example.com",
  "subject": "Late delivery",
  "body": "My order arrived two days later than promised."
}'
Example response
200 OK

{
  "id": "b7c1e2f3-4a5b-6c7d-8e9f-0a1b2c3d4e5f"
}
Errors
400BAD_JSONThe body is not valid JSON.
400VALIDATION_ERRORA field failed validation. A field errors map is included.
404SHOP_INACTIVEThe shop is not active.
500ERRORAn unexpected error occurred.
POST/api/v1/stock-alerts/subscribe

Subscribe to a back-in-stock alert

Register an email to be notified when a product is back in stock. Idempotent per product and email.

Auth: Public, scoped by shop_id.

Body
shop_idstring (UUID)requiredThe shop that owns the product.
product_idstring (UUID)requiredThe product to watch.
emailstring, email (max 254)requiredWhere to send the alert.
Example request
curl -X POST https://www.axedomo.com/api/v1/stock-alerts/subscribe \
  -H "Content-Type: application/json" \
  -d '{
  "shop_id": "00000000-0000-0000-0000-000000000000",
  "product_id": "11111111-1111-1111-1111-111111111111",
  "email": "alex@example.com"
}'
Example response
200 OK

{
  "id": "c8d2f3a4-5b6c-7d8e-9f0a-1b2c3d4e5f60"
}
Errors
400BAD_JSONThe body is not valid JSON.
400VALIDATION_ERRORA field failed validation.
400INVALID_EMAILThe email was rejected.
404SHOP_INACTIVE or PRODUCT_NOT_FOUNDThe shop is inactive or the product does not exist.
500ERRORAn unexpected error occurred.

Subscribing the same email to the same product twice is safe: it updates in place.

POST/api/v1/bookings/create

Create a time-slot booking

Book a resource for a start and end time. For appointment-style bookings.

Auth: Public, scoped by shop_id.

Body
shop_idstring (UUID)requiredThe shop that owns the resource.
resource_idstring (UUID)requiredThe bookable resource.
starts_atstring, ISO date-timerequiredSlot start.
ends_atstring, ISO date-timerequiredSlot end.
customer_emailstring, emailrequiredThe customer's email.
customer_namestring (1 to 120), nullableoptionalThe customer's name.
notesstring (max 2000), nullableoptionalAny booking notes.
Example request
curl -X POST https://www.axedomo.com/api/v1/bookings/create \
  -H "Content-Type: application/json" \
  -d '{
  "shop_id": "00000000-0000-0000-0000-000000000000",
  "resource_id": "22222222-2222-2222-2222-222222222222",
  "starts_at": "2026-08-01T09:00:00.000Z",
  "ends_at": "2026-08-01T10:00:00.000Z",
  "customer_email": "alex@example.com"
}'
Example response
200 OK

{
  "data": { "booking_id": "d9e3a4b5-6c7d-8e9f-0a1b-2c3d4e5f6071" }
}
Errors
400INVALID_JSONThe body is not valid JSON.
400INVALID_INPUTA field failed validation. An issues array is included.
400BOOKING_FAILEDThe slot was rejected, for example already taken.
POST/api/v1/bookings/create-date-range

Create a date-range booking

Book a resource across a check-in and check-out date. For nightly stays and rentals.

Auth: Public, scoped by the resource_id (which belongs to one shop).

Body
resource_idstring (UUID)requiredThe bookable resource.
check_instring (YYYY-MM-DD)requiredFirst night.
check_outstring (YYYY-MM-DD)requiredDeparture day.
customer_emailstring, email (max 254)requiredThe customer's email.
customer_namestring (max 120), nullableoptionalThe customer's name.
notesstring (max 2000), nullableoptionalAny booking notes.
Example request
curl -X POST https://www.axedomo.com/api/v1/bookings/create-date-range \
  -H "Content-Type: application/json" \
  -d '{
  "resource_id": "22222222-2222-2222-2222-222222222222",
  "check_in": "2026-08-01",
  "check_out": "2026-08-04",
  "customer_email": "alex@example.com"
}'
Example response
200 OK

{
  "id": "e0f4b5c6-7d8e-9f0a-1b2c-3d4e5f607182"
}
Errors
400INVALID_JSONThe body is not valid JSON.
400INVALID_INPUTA field failed validation. A field errors map is included.
400CHECK_IN_IN_PAST or WRONG_MODEThe dates or the resource mode are not valid.
404RESOURCE_NOT_FOUND or SHOP_INACTIVEThe resource does not exist or its shop is inactive.
409DATES_UNAVAILABLEThe range overlaps an existing booking.
500BOOKING_FAILEDAn unexpected error occurred.
Not shown here

The storefront also uses internal endpoints (cart, checkout, analytics) and endpoints that need a signed-in customer or shop owner. Those are first-party and are not part of this public contract, so they can change without notice. Stripe reaches AXEDOMO over a signature-verified webhook, which is machine to machine and not a developer endpoint.

Need something that is not here, or a higher-trust integration? Talk to us.