{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/cash-app/main/json-schema/cash-app-order-request-schema.json", "title": "OrderRequest", "x-generated": "2026-10-12", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/cash-app-orders-api-openapi.yml#/components/schemas/OrderRequest", "type": "object", "properties": { "requestId": { "type": "string", "format": "uuid", "description": "A unique identifier for the request, used for idempotency" }, "grantId": { "type": "string", "description": "ID of the grant used to create this order" }, "amount": { "$ref": "#/$defs/Money", "description": "The total amount of the order" }, "enrichments": { "$ref": "#/$defs/Enrichments", "description": "Describes additional fields beyond core payment information." }, "autopay": { "type": "boolean", "description": "Experimental. Indicates whether autopay should be enabled for the order." }, "paymentScheduleType": { "$ref": "#/$defs/OrderRequestPaymentScheduleType", "description": "The payment schedule type for the order." }, "consumer": { "$ref": "#/$defs/Consumer" }, "billing": { "$ref": "#/$defs/Contact" }, "shipping": { "$ref": "#/$defs/Contact" }, "items": { "type": "array", "items": { "$ref": "#/$defs/Item" } }, "discounts": { "type": "array", "items": { "$ref": "#/$defs/Discount" } }, "merchantReference": { "type": "string", "description": "The reference/order ID in the merchant's system" }, "shippingAmount": { "$ref": "#/$defs/Money", "description": "The shipping cost amount" }, "taxAmount": { "$ref": "#/$defs/Money", "description": "The tax amount" }, "courier": { "$ref": "#/$defs/Shipping-Courier" } }, "required": [ "requestId", "grantId", "amount", "enrichments" ], "$defs": { "Consumer": { "type": "object", "properties": { "email": { "type": "string", "format": "email" }, "givenNames": { "type": "string", "description": "The consumer's first name" }, "surname": { "type": "string", "description": "The consumer's last name" }, "phoneNumber": { "type": "string" } }, "required": [ "email" ], "description": "The consumer data model is used for gathering essential user information. It captures details such as the individual's first name, represented by `givenNames`, and their last name, captured under `surname`. In addition, it stores the user's contact number under `phoneNumber` and their email address under `email`. These fields collectively provide contact and identification details for a user.", "title": "Consumer" }, "Contact": { "type": "object", "properties": { "name": { "type": "string" }, "line1": { "type": "string", "description": "First line of the address" }, "line2": { "type": "string", "description": "Second line of the address " }, "area1": { "type": "string", "description": "- AU: Suburb\n- NZ: Town or City\n- UK: Postal Town\n- US: City\n- Canada: City" }, "area2": { "type": "string", "description": "- NZ: suburb\n- UK: village or local area." }, "region": { "type": "string", "description": "- AU: State \n- NZ: Region\n- UK: County\n- US: State\n- CA: Province or Territory" }, "postcode": { "type": "string" }, "countryCode": { "$ref": "#/$defs/ContactCountryCode" }, "phoneNumber": { "type": "string", "description": "The phone number, in [E.123](https://en.wikipedia.org/wiki/E.123) format." } }, "required": [ "name", "line1", "area1", "region", "postcode", "countryCode" ], "description": "This data model is used for storing an individual's contact information. Mandatory fields such as **name**, **line1**, **area1**, **region**, **postcode**, and **countryCode** help in capturing vital information about a user's location. \n\nThe `line2` and `area2` fields provide additional space for extended addresses, while `phoneNumber` can be used to store the user's contact number.\n\n\n\n The `area1`, `area2` and `region` properties feature localized terminology based on country. Refer to the property descriptions for insights on each country's specific usage \n\n", "title": "Contact" }, "ContactCountryCode": { "type": "string", "enum": [ "AU", "NZ", "US", "CA", "GB" ], "title": "ContactCountryCode" }, "Discount": { "type": "object", "properties": { "displayName": { "type": "string" }, "amount": { "$ref": "#/$defs/Money" } }, "description": "Discount applied to an order", "title": "Discount" }, "Enrichments": { "type": "object", "properties": { "initiation": { "$ref": "#/$defs/Initiation", "description": "Who initiated the order" }, "subscription": { "$ref": "#/$defs/Subscription", "description": "Metadata on the subscription details" } }, "required": [ "initiation" ], "title": "Enrichments" }, "Initiation": { "type": "object", "properties": { "actor": { "$ref": "#/$defs/InitiationActor", "description": "The party who initiated the order" } }, "required": [ "actor" ], "title": "Initiation" }, "InitiationActor": { "type": "string", "enum": [ "CUSTOMER", "MERCHANT" ], "description": "The party who initiated the order", "title": "InitiationActor" }, "Item": { "type": "object", "properties": { "name": { "type": "string" }, "sku": { "type": "string" }, "pageUrl": { "type": "string" }, "imageUrl": { "type": "string" }, "quantity": { "type": "integer" }, "price": { "$ref": "#/$defs/Money" }, "categories": { "type": "array", "items": { "type": "array", "items": { "type": "string" } } }, "estimatedShipmentDate": { "type": "string", "format": "date" }, "preorder": { "type": "boolean", "default": false } }, "required": [ "name", "quantity", "price" ], "description": "This data model is used to store crucial product details. The `price.amount` field represents the unit price of the individual item. The `quantity` field shows the number of units of the item. The `name` field denotes the name of the product, while `sku` holds the Stock Keeping Unit identifier. 100 is the maximum number of item objects in the items array.\n\n It is crucial that the `price.amount` represents the unit price of the individual item.\n **Never** populate the `price.amount` by multiplying the quantity by the unit cost. Always enter the price for a single unit to maintain data accuracy.\n\n", "title": "Item" }, "Money": { "type": "object", "properties": { "amount": { "type": "string", "description": "The amount as a string representation of a decimal number, rounded to 2 decimal places." }, "currency": { "$ref": "#/$defs/MoneyCurrency" } }, "required": [ "amount", "currency" ], "description": "Object containing amount and currency", "title": "Money" }, "MoneyCurrency": { "type": "string", "enum": [ "AUD", "NZD", "USD", "CAD", "GBP" ], "title": "MoneyCurrency" }, "OrderRequestPaymentScheduleType": { "type": "string", "enum": [ "DEFAULT" ], "description": "The payment schedule type for the order.", "title": "OrderRequestPaymentScheduleType" }, "Shipping-Courier": { "type": "object", "properties": { "shippedAt": { "type": "string", "format": "date-time" }, "name": { "type": "string" }, "tracking": { "type": "string" }, "priority": { "$ref": "#/$defs/ShippingCourierPriority" } }, "description": "Essential information for tracking a shipment. The `shippedAt` key represents the date and time when the item was shipped. This value follows the [ISO 8601 standard format](https://www.iso.org/iso-8601-date-and-time-format.html) for date and time representations.\n\nThe `name` field indicates the courier service employed to handle the shipment (e.g. FEDEX, UPS). For orders that are picked up in-store (also known as Buy-Online-Pickup-Instore), please use \"INSTORE_PICKUP\" as the `name` field value.\n\nThe `tracking` key represents a unique tracking number provided by the courier service to monitor the shipment's progress. It's a valuable tool for customers and businesses to track and trace their packages.\n\nThe `priority` field tracks the shipping speed or service level associated with the delivery. ", "title": "Shipping-Courier" }, "ShippingCourierPriority": { "type": "string", "enum": [ "STANDARD", "EXPRESS" ], "title": "ShippingCourierPriority" }, "Subscription": { "type": "object", "properties": { "type": { "$ref": "#/$defs/SubscriptionType" }, "interval": { "$ref": "#/$defs/SubscriptionInterval" }, "intervalCount": { "type": "integer" } }, "title": "Subscription" }, "SubscriptionInterval": { "type": "string", "enum": [ "DAY", "WEEK", "MONTH", "YEAR" ], "title": "SubscriptionInterval" }, "SubscriptionType": { "type": "string", "enum": [ "FIXED", "VARIABLE" ], "title": "SubscriptionType" } } }