Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated May 15, 2024

Customize your data model

Every data model is defined as part of a data schema (a.schema()). You can enhance your data model with various fields, customize their identifiers, apply authorization rules, or model relationships. Every data model (a.model()) automatically provides create, read, update, and delete API operations as well as real-time subscription events. Below is a quick tour of the many functionalities you can add to your data model:

import { type ClientSchema, a, defineData } from '@aws-amplify/backend';
const schema = a
Customer: a
// fields can be of various scalar types,
// such as string, boolean, float, integers etc.
name: a.string(),
// fields can be of custom types
location: a.customType({
// fields can be required or optional
lat: a.float().required(),
long: a.float().required(),
// fields can be enums
engagementStage: a.enum(["PROSPECT", "INTERESTED", "PURCHASED"]),
collection: a.belongsTo("Collection", "collectionId")
// Use custom identifiers. By default, it uses an `id:` field
Collection: a
customers: a.hasMany("Customer", "collectionId"), // setup relationships between types
tags: a.string().array(), // fields can be arrays
// customize secondary indexes to optimize your query performance
.secondaryIndexes((index) => [index("representativeId")]),
.authorization((allow) => [allow.publicApiKey()]);
export type Schema = ClientSchema<typeof schema>;
export const data = defineData({
authorizationModes: {
defaultAuthorizationMode: "apiKey",
apiKeyAuthorizationMode: {
expiresInDays: 30,