Skip to content
SSalesShiftDocs
API reference

Marketing

Lead-capture forms, landing pages, booking links, automation rules and their public pages.

17 endpoints· 5 called live· 12 not exercised here· verified against http://127.0.0.1:8741

17 endpoints

GET/api/v1/salesshift/automationsCalled liveThe organization's automation rules.
Auth
get_org_user
Scope
organization
Success
200 · application/json
Envelope
success+data

Request

curl
curl 'https://api.vxcloud.io/api/v1/salesshift/automations' \
  -H "Authorization: Bearer $SS_TOKEN"

Response · 200

Observed shape
{
  "success": "bool",
  "data": [
    {
      "id": "str",
      "name": "str",
      "trigger_type": "str",
      "action_type": "str",
      "config": {
        "title": "..."
      },
      "is_active": "bool",
      "run_count": "int"
    },
    "...x1"
  ]
}
Observed on 2026-08-06 — keys are real, values are the types that came back.
#get-api-v1-salesshift-automationsmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:521Called against http://127.0.0.1:8741 on 2026-08-06 with a real JWT; the response matched the shape recorded below.
POST/api/v1/salesshift/automationsNot exercised hereCreate an automation rule from a known trigger and action pair.
Auth
get_org_user
Scope
organization
Success
201 · application/json
Envelope
success+custom

Request body (required)

Untyped Dict[str, Any] body — there is no Pydantic model, so these are the field names the handler actually reads.

action_typeconfigis_activenametrigger_type

Values in the request below are typed placeholders, not sample data.

Request

curl
curl -X POST 'https://api.vxcloud.io/api/v1/salesshift/automations' \
  -H "Authorization: Bearer $SS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{ "action_type": "<value>", "config": "<value>", "is_active": "<value>", "name": "<value>", "trigger_type": "<value>" }'

Response · 201

Top-level keys
{
  "id": "…",
  "success": "…"
}
Top-level keys read from the handler's return statements.

Errors

Statusdetail
400Unknown trigger_type: {...}
400Unknown action_type: {...}
#post-api-v1-salesshift-automationsmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:539Implemented and read in source for this inventory, but not exercised against a running server here. Treat as undemonstrated until someone calls it.
PUT/api/v1/salesshift/automations/{rule_id}Not exercised hereUpdate an automation rule.
Auth
get_org_user
Scope
organization
Success
200 · application/json
Envelope
success+custom

Path parameters

NameTypeRequiredNotes
rule_idstring(uuid)required

Request body (required)

Accepts a JSON object; the source declares no field list.

Request

curl
curl -X PUT 'https://api.vxcloud.io/api/v1/salesshift/automations/{rule_id}' \
  -H "Authorization: Bearer $SS_TOKEN"

Response · 200

Top-level keys
{
  "success": "…"
}
Top-level keys read from the handler's return statements.

Errors

Statusdetail
404Rule not found
#put-api-v1-salesshift-automations-rule-idmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:564Implemented and read in source for this inventory, but not exercised against a running server here. Treat as undemonstrated until someone calls it.
DELETE/api/v1/salesshift/automations/{rule_id}Not exercised hereDelete an automation rule.
Auth
get_org_user
Scope
organization
Success
200 · application/json
Envelope
success+custom

Path parameters

NameTypeRequiredNotes
rule_idstring(uuid)required

Request

curl
curl -X DELETE 'https://api.vxcloud.io/api/v1/salesshift/automations/{rule_id}' \
  -H "Authorization: Bearer $SS_TOKEN"

Response · 200

Top-level keys
{
  "success": "…"
}
Top-level keys read from the handler's return statements.

Errors

Statusdetail
404Rule not found
#delete-api-v1-salesshift-automations-rule-idmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:586Implemented and read in source for this inventory, but not exercised against a running server here. Treat as undemonstrated until someone calls it.
POST/api/v1/salesshift/booking-linksNot exercised hereCreate a booking link owned by the calling user.
Auth
get_org_user
Scope
organization
Success
201 · application/json
Envelope
success+custom

Request body (required)

Untyped Dict[str, Any] body — there is no Pydantic model, so these are the field names the handler actually reads.

descriptionduration_minutesname

Values in the request below are typed placeholders, not sample data.

Request

curl
curl -X POST 'https://api.vxcloud.io/api/v1/salesshift/booking-links' \
  -H "Authorization: Bearer $SS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{ "description": "<value>", "duration_minutes": "<value>", "name": "<value>" }'

Response · 201

Top-level keys
{
  "id": "…",
  "slug": "…",
  "success": "…"
}
Top-level keys read from the handler's return statements.
#post-api-v1-salesshift-booking-linksmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:390Implemented and read in source for this inventory, but not exercised against a running server here. Treat as undemonstrated until someone calls it.
GET/api/v1/salesshift/formsCalled liveThe organization's lead-capture forms.
Auth
get_org_user
Scope
organization
Success
200 · application/json
Envelope
success+data

Request

curl
curl 'https://api.vxcloud.io/api/v1/salesshift/forms' \
  -H "Authorization: Bearer $SS_TOKEN"

Response · 200

Observed shape
{
  "success": "bool",
  "data": [
    "<empty list>"
  ]
}
Observed on 2026-08-06 — keys are real, values are the types that came back.
#get-api-v1-salesshift-formsmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:92Called against http://127.0.0.1:8741 on 2026-08-06 with a real JWT; the response matched the shape recorded below.
POST/api/v1/salesshift/formsNot exercised hereCreate a lead-capture form; the field set must include an email field.
Auth
get_org_user
Scope
organization
Success
201 · application/json
Envelope
success+custom

Request body (required)

Untyped Dict[str, Any] body — there is no Pydantic model, so these are the field names the handler actually reads.

descriptionfieldsnamesubmit_labelsuccess_message

Values in the request below are typed placeholders, not sample data.

Request

curl
curl -X POST 'https://api.vxcloud.io/api/v1/salesshift/forms' \
  -H "Authorization: Bearer $SS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{ "description": "<value>", "fields": "<value>", "name": "<value>", "submit_label": "<value>", "success_message": "<value>" }'

Response · 201

Top-level keys
{
  "id": "…",
  "success": "…"
}
Top-level keys read from the handler's return statements.

Errors

Statusdetail
400Form must include an email field
#post-api-v1-salesshift-formsmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:112Implemented and read in source for this inventory, but not exercised against a running server here. Treat as undemonstrated until someone calls it.
DELETE/api/v1/salesshift/forms/{form_id}Not exercised hereDelete a form.
Auth
get_org_user
Scope
organization
Success
200 · application/json
Envelope
success+custom

Path parameters

NameTypeRequiredNotes
form_idstring(uuid)required

Request

curl
curl -X DELETE 'https://api.vxcloud.io/api/v1/salesshift/forms/{form_id}' \
  -H "Authorization: Bearer $SS_TOKEN"

Response · 200

Top-level keys
{
  "success": "…"
}
Top-level keys read from the handler's return statements.

Errors

Statusdetail
404Form not found
#delete-api-v1-salesshift-forms-form-idmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:137Implemented and read in source for this inventory, but not exercised against a running server here. Treat as undemonstrated until someone calls it.
GET/api/v1/salesshift/pagesCalled liveThe organization's landing pages.
Auth
get_org_user
Scope
organization
Success
200 · application/json
Envelope
success+data

Request

curl
curl 'https://api.vxcloud.io/api/v1/salesshift/pages' \
  -H "Authorization: Bearer $SS_TOKEN"

Response · 200

Observed shape
{
  "success": "bool",
  "data": [
    "<empty list>"
  ]
}
Observed on 2026-08-06 — keys are real, values are the types that came back.
#get-api-v1-salesshift-pagesmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:258Called against http://127.0.0.1:8741 on 2026-08-06 with a real JWT; the response matched the shape recorded below.
POST/api/v1/salesshift/pagesNot exercised hereCreate a landing page with a slug derived from its name.
Auth
get_org_user
Scope
organization
Success
201 · application/json
Envelope
success+custom

Request body (required)

Untyped Dict[str, Any] body — there is no Pydantic model, so these are the field names the handler actually reads.

contentform_idis_publishedname

Values in the request below are typed placeholders, not sample data.

Request

curl
curl -X POST 'https://api.vxcloud.io/api/v1/salesshift/pages' \
  -H "Authorization: Bearer $SS_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{ "content": "<value>", "form_id": "<value>", "is_published": "<value>", "name": "<value>" }'

Response · 201

Top-level keys
{
  "id": "…",
  "slug": "…",
  "success": "…"
}
Top-level keys read from the handler's return statements.
#post-api-v1-salesshift-pagesmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:277Implemented and read in source for this inventory, but not exercised against a running server here. Treat as undemonstrated until someone calls it.
DELETE/api/v1/salesshift/pages/{page_id}Not exercised hereDelete a landing page.
Auth
get_org_user
Scope
organization
Success
200 · application/json
Envelope
success+custom

Path parameters

NameTypeRequiredNotes
page_idstring(uuid)required

Request

curl
curl -X DELETE 'https://api.vxcloud.io/api/v1/salesshift/pages/{page_id}' \
  -H "Authorization: Bearer $SS_TOKEN"

Response · 200

Top-level keys
{
  "success": "…"
}
Top-level keys read from the handler's return statements.

Errors

Statusdetail
404Page not found
#delete-api-v1-salesshift-pages-page-idmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:298Implemented and read in source for this inventory, but not exercised against a running server here. Treat as undemonstrated until someone calls it.
GET/api/v1/salesshift/public/book/{slug}public-by-designNot exercised herePublic HTML booking page for an active link.
Auth
no dependency
Scope
public-by-design
Success
200 · text/html
Envelope
html

A public booking page. Only active links render.

Path parameters

NameTypeRequiredNotes
slugstringrequired

Request

curl
curl 'https://api.vxcloud.io/api/v1/salesshift/public/book/{slug}'

Response · 200

Returns text/html (html).

#get-api-v1-salesshift-public-book-slugmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:411Implemented and read in source for this inventory, but not exercised against a running server here. Treat as undemonstrated until someone calls it.
POST/api/v1/salesshift/public/book/{slug}public-by-designNot exercised herePublic booking submit; records the booking and returns an HTML confirmation.
Auth
no dependency
Scope
public-by-design
Success
200 · text/html
Envelope
html

Anonymous booking submit.

Path parameters

NameTypeRequiredNotes
slugstringrequired

Request

curl
curl -X POST 'https://api.vxcloud.io/api/v1/salesshift/public/book/{slug}'

Response · 200

Returns text/html (html).

#post-api-v1-salesshift-public-book-slugmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:434Implemented and read in source for this inventory, but not exercised against a running server here. Treat as undemonstrated until someone calls it.
GET/api/v1/salesshift/public/forms/{form_id}public-by-designCalled livePublic HTML render of an active form.
Auth
no dependency
Scope
public-by-design
Success
200 · text/html
Envelope
html

A published form, meant to be world-readable. Only active forms render.

Path parameters

NameTypeRequiredNotes
form_idstring(uuid)required

Request

curl
curl 'https://api.vxcloud.io/api/v1/salesshift/public/forms/{form_id}'

Response · 200

Observed shape
"<non-json 14 bytes>"
Observed on 2026-08-06 — keys are real, values are the types that came back.
#get-api-v1-salesshift-public-forms-form-idmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:193Called against http://127.0.0.1:8741 on 2026-08-06; it returned the documented error status, not a success.
POST/api/v1/salesshift/public/forms/{form_id}/submitpublic-by-designNot exercised herePublic form submit; creates a submission and an HTML confirmation.
Auth
no dependency
Scope
public-by-design
Success
200 · text/html
Envelope
html

Anonymous form submit — that is the point of a lead-capture form.

Path parameters

NameTypeRequiredNotes
form_idstring(uuid)required

Request

curl
curl -X POST 'https://api.vxcloud.io/api/v1/salesshift/public/forms/{form_id}/submit'

Response · 200

Returns text/html (html).

#post-api-v1-salesshift-public-forms-form-id-submitmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:211Implemented and read in source for this inventory, but not exercised against a running server here. Treat as undemonstrated until someone calls it.
GET/api/v1/salesshift/public/p/{slug}public-by-designNot exercised herePublic HTML render of a published landing page by slug.
Auth
no dependency
Scope
public-by-design
Success
200 · text/html
Envelope
html

A published landing page. Only published pages render.

Path parameters

NameTypeRequiredNotes
slugstringrequired

Request

curl
curl 'https://api.vxcloud.io/api/v1/salesshift/public/p/{slug}'

Response · 200

Returns text/html (html).

#get-api-v1-salesshift-public-p-slugmarketing_router · vxcloud_fastapiclient/app/services/salesshift/marketing_router.py:314Implemented and read in source for this inventory, but not exercised against a running server here. Treat as undemonstrated until someone calls it.