# Custom objects

Define your own data models in Stripe.

Custom objects let you define your own data models in Stripe, so Stripe reflects how your business works. Your business might have data that doesn’t fit Stripe standard objects, such as shipments, reservations, or devices. Define it in Stripe next to the customers, subscriptions, invoices, and other Stripe data it relates to. Keep your existing system of record and bring over what your Stripe integration needs, or make custom objects the system of record for that data. With custom objects, you can:

- **Define your business on Stripe**: Represent your business entities, their relationships, and their lifecycle as typed resources. Reference Stripe objects such as [Customer](https://docs.stripe.com/api/customers/object.md), [Invoice](https://docs.stripe.com/api/invoices/object.md), and [Subscription](https://docs.stripe.com/api/subscriptions/object.md) directly from your own objects.
- **Define your data in code**: Describe your objects in TypeScript and package them in a [Stripe app](https://docs.stripe.com/stripe-apps.md). When you upload the app, Stripe creates the API endpoints for your objects, and you can generate a typed SDK from your definitions.
- **Build on your data**: Search your records, react to changes with events and [Workflows](https://docs.stripe.com/workflows.md), and build your own views of your records in the Dashboard with [Stripe Apps](https://docs.stripe.com/stripe-apps.md).
- **Reduce back-end complexity**: Store and manage your business data alongside your Stripe data through one consistent API, without running a separate database only to hold it.

Custom objects are in [private preview](https://docs.stripe.com/release-phases.md).

### Interested in getting early access to custom objects?

Enter your email to request access.

```bash
curl https://docs.stripe.com/preview/register \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Referer: https://docs.stripe.com/custom-objects" \
  -d '{"email": "EMAIL", "preview": "custom_objects_private_preview"}'
```

## What you can build 

Custom objects fit businesses whose data goes beyond Stripe standard objects. For example:

- **Hardware-based subscriptions**: Track devices, where they’re installed, and track their lifecycle next to the subscriptions that bill for them.
- **Reservations and bookings**: Keep reservations and guest preferences next to the payments and invoices they explain.
- **Shipments and fulfillment**: Track shipments and delivery status next to the invoices they fulfill.
- **Customer requests and follow-ups**: Track cancellation and refund requests, and use Workflows to make the Stripe changes they lead to.
- **Operations dashboards in Stripe**: Build a full-page app that gives your team one place in the Dashboard to work with your records and the Stripe objects they reference.

For more examples, and for guidance on when to use custom objects, see [Custom objects use cases](https://docs.stripe.com/custom-objects/use-cases.md).

## How custom objects work 

You define your objects once, and then work with their records across Stripe:

1. **Define your object**: Create an object definition with the fields your business needs. You define objects in code and package them in a Stripe app.
2. **Work with records**: Create, retrieve, update, list, search, and delete records through the `/v2/extend/objects/<plural_name>` API. You can also generate a typed SDK from your definitions.
3. **React to changes**: Each object definition sends events when its records change. Use them to start workflows or to update your other systems.
4. **View in the Dashboard**: View your definitions, and view, search, and filter your records in the Stripe Dashboard.

## What’s available in private preview 

In the private preview, you can:

- Define custom objects in code and package them in a Stripe app, with typed fields, validation, and references
- Create, retrieve, update, list, search, and delete records through the API
- Generate a typed Node.js SDK from your definitions
- Publish new versions of your custom object definitions as your schema changes
- Receive events for each object definition when its records change
- Use custom objects in Workflows, as both triggers and as steps that create and update records
- Build Dashboard views and full-page apps for your records with Stripe Apps
- View your definitions, and view, search, and filter your records in the Dashboard (the Dashboard is read-only at private preview)

During private preview, custom objects work within a single Stripe account. They don’t support cross-account sharing. For other constraints, see [Limits and limitations](https://docs.stripe.com/custom-objects/limitations.md).

## Next steps 

- [How custom objects work](https://docs.stripe.com/custom-objects/how-it-works.md)
- [Get started with custom objects](https://docs.stripe.com/custom-objects/get-started.md)
- [Define custom objects](https://docs.stripe.com/custom-objects/define.md)
