Forms that feed the backend.
Collect leads, support requests, onboarding details, and custom submissions directly into Arky, then move each one through your own stages while Arky sends the received and stage emails from the store's own address.
Best for
- lead capture
- client intake
- quote requests
- support requests
Use it when forms need to become records, conversations, or follow-up emails.
What this module gives your project.
Typed questions
Use this capability from your custom frontend while the operational side stays manageable in Arky admin.
Submissions with files
Use this capability from your custom frontend while the operational side stays manageable in Arky admin.
Stages
Use this capability from your custom frontend while the operational side stays manageable in Arky admin.
Validation
Use this capability from your custom frontend while the operational side stays manageable in Arky admin.
Received and stage emails
Use this capability from your custom frontend while the operational side stays manageable in Arky admin.
Custom UX with backend state managed in Arky.
- Questions with labels per language
- Validation feedback
- Retry-safe submissions
- Confirmation states
A client-facing back office for the same module.
- Submission inbox
- Question editor
- Email templates
- Stage history and notes
- Customer connection
Code the frontend. Connect Arky as the backend.
Start with the frontend stack the project deserves, then connect only the Arky modules it needs. The Admin, API, SDK, and store email stay behind the custom experience.
- Create the form in admin
- Render it in the frontend
- Move each submission through its stages
import { createOrderToken, initialize } from "arky-sdk/storefront";
const arky = initialize("arky_pk_...", {
locale: "en",
createVisitorIdentity: () => ({
customer_id: crypto.randomUUID(),
session_id: crypto.randomUUID(),
}),
createSessionId: () => crypto.randomUUID(),
createId: () => crypto.randomUUID(),
createOrderToken,
});
const website = await arky.content.load({ collection: { key: "website" } });
const {
items: [catalog],
} = await arky.eshop.catalog.find();
const cart = arky.eshop.cart({ buyer: { type: "customer" }, catalog_id: catalog.id });
const current = await cart.ensure();
const services = await arky.eshop.bookingService.find({
catalog_id: catalog.id,
limit: 6,
});
await arky.actions.track({
key: "website_action",
data: {
page: website.record.id,
cart: current.id,
services: services.items.length,
},
}); Useful API touchpoints.
-
GET /v1/storefront/forms/{id} -
POST /v1/storefront/forms/{id}/submissions