Gett Developer Portal
  • Welcome
  • Distribution Partners
  • Brand Partners
  • Commerce Partners
  • Ecosystem Partners
  • Errors
  • API Reference
Documentation
  • Get Started
  • Marketfront SDK
  • API Reference
Resources
  • Payments
Company
  • Gett
  • Terms of Service
  • Privacy Policy

Copyright 2026 Gett. All rights reserved.

Marketfront SDK
Marketfront API
    Getting StartedConventionsOrder LifecycleCatalogSet
    API Reference
Marketfront AI
Shared Guides
powered by Zuplo
Marketfront API

Getting Started

This guide walks you through setting up a direct API integration with the Gett platform. You'll learn how to authenticate, set up your development environment, and make your first API calls.

What You Can Build

With the API integration, you have complete control over the user experience:

  • Find Stores — Search for stores by location, cuisine, or keyword
  • Browse Menus — Display complete CatalogSets with sections, items, and customization options
  • Manage Carts — Add, update, and remove items with full modifier support
  • Process Orders — Validate and place orders with delivery or pickup fulfillment
  • Handle Payments — Secure payment processing with PCI-compliant infrastructure

Key Concepts

ConceptDescription
StoreA merchant/restaurant offering food delivery
CatalogSetThe complete menu structure (immutable, highly cacheable)
CatalogA specific menu within a CatalogSet (e.g., "Lunch Menu") with availability windows
SectionA menu category (e.g., "Appetizers") containing items
ItemA purchasable food product with pricing and optional modifiers
ModifierGroupCustomization options for items (e.g., "Size", "Toppings")
CartShopping cart with line items (managed by your application)
OrderA validated cart submitted for fulfillment

Prerequisites

RequirementDescription
Partner AccountContact our partnerships team to register
API KeySecret key for server-to-server authentication (details)
Backend ServerA server to make authenticated API calls

Step 1: Get Your Credentials

After registering as a partner, you'll receive:

CredentialEnvironmentPurpose
Sandbox API KeyDevelopmentTesting and development
Production API KeyLiveProduction deployments

Step 2: Set Up Your Environment

Environment Variables

TerminalCode
GETT_API_KEY=your_sandbox_api_key_here GETT_API_URL=https://api.gett.co

Base URL

There is one base URL — your API key (sandbox or production) selects the environment:

https://api.gett.co/v1

Step 3: Make Your First API Call

Find Stores

Search for stores available for delivery at a given location:

TerminalCode
curl -X POST https://api.gett.co/v1/marketfront/stores/discover \ -H "Authorization: Bearer $GETT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "location": { "latitude": 40.7411, "longitude": -73.9897 } }'

Response (against a sandbox key — the seeded test store described in Step 4):

Code
{ "stores": [ { "storeId": "db1d5d2e-ab32-7fe5-8e2f-d613d14dc659", "catalogSetId": "6e309c7b-da05-ca83-9a2e-abbcf5bccb71", "name": "SandboxIntegrated Test Store", "description": "SANDBOXINTEGRATED TEST STORE", "fulfillmentModes": ["PICKUP", "DELIVERY_BY_MERCHANT"], "distanceMiles": 0.0, "isAcceptingOrders": true } ], "totalCount": 1, "hasMore": false }

These are the sandbox store's actual ids. They are derived deterministically from the store's name, so they survive a re-seed and are stable to develop against — but read them from this response rather than hard-coding them in your client, because nothing about that stability is part of the API contract. A live key returns real merchants here, and Store carries further optional fields (imageUrl, rating, reviewCount, priceLevel, categories, availability) that the sandbox store does not populate.

Get a Store's Menu

Fetch the CatalogSet (this is cacheable!):

TerminalCode
curl https://api.gett.co/v1/marketfront/catalog-sets/b6e10d92-47af-4c38-8b21-9e5d0a7f6c14 \ -H "Authorization: Bearer $GETT_API_KEY"

Step 4: Test in Sandbox

The sandbox is seeded with a single deterministic test store. Discover it by searching at its location:

Test Location

FieldValue
Latitude40.7411
Longitude-73.9897
Address1 Sandbox Plaza, New York, NY 10001
TerminalCode
curl -X POST https://api.gett.co/v1/marketfront/stores/discover \ -H "Authorization: Bearer $GETT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "location": { "latitude": 40.7411, "longitude": -73.9897 } }'

Test Store

FieldValue
NameSandboxIntegrated Test Store
FulfillmentDelivery & pickup
MenuSandbox Classic Burger ($9.50, with an "Add-ons" modifier group), Sandbox Fries ($3.50), Sandbox Cola ($2.50)

The discovery response returns the store's storeId and catalogSetId — use those for GET /catalog-sets/{catalogSetId} and when building a cart. They're stable, but read them from the API rather than hard-coding them.

Each store's supported fulfillment types are exposed on the Store response as fulfillmentModes, an array of the same FulfillmentType values the discovery filter and the order graph use (PICKUP, DELIVERY_BY_MERCHANT). Filter or badge stores off this set — do not infer capability from the presence of a delivery zone or from a store name. The array is empty only for a store that offers neither mode.

Per-store capability flags (how a supported mode can be used) are nested under options:

FieldMeaning
options.acceptsDeliveryTipsWhether this store accepts tips on delivery orders.
options.acceptsPickupTipsWhether this store accepts tips on pickup orders.

Hide the tip input in your UI (and send amounts.tip = 0) when the relevant flag is false. Submitting a non-zero tip for a mode the store doesn't accept tips in will fail validation. Tips are submitted as amounts.tip on validateOrder and placeOrder requests — see Order Amounts in the Payments guide for the full amounts shape. The options object may include additional fields in future API versions — your client should ignore any field it doesn't recognize.

Test Payment Cards

These cards work only against a sandbox API key and a sandbox store. A live key will never produce this behaviour.

No payment processor is contacted and no card is ever charged. The sandbox interprets these numbers itself and synthesizes the outcome — nothing leaves Gett. The numbers follow the widely-used test-card convention, so fixtures you already have will usually transfer unchanged; they are not credentials for, and will not behave the same against, any third-party service.

Each card produces a specific errors[].code on place, so you can drive payment and order-availability failure handling without a real provider call:

Card Numbererrors[].codeScenario
4111 1111 1111 1111—Successful payment
4242 4242 4242 4242—Successful payment
4000 0000 0000 0002PAYMENT_FAILEDDeclined, no reason given
4000 0000 0000 9995INSUFFICIENT_FUNDSDeclined for insufficient funds
4000 0000 0000 0127INCORRECT_CVCDeclined — security code did not match
4000 0000 0000 0069CARD_EXPIREDDeclined — card expired
4000 0000 0000 9987CARD_LOST_OR_STOLENDeclined — card cannot be used
4000 0000 0000 9979CARD_LOST_OR_STOLENDeclined — card cannot be used
4000 0000 0000 0119PROCESSING_ERRORTemporary fault at the processor
4000 0566 5566 5556DELIVERY_UNAVAILABLEDelivery address is outside the service area
5555 5555 5555 4444STORE_CLOSEDStore is currently closed

Use any future expiration date and any 3-digit CVV. Any card number not listed here is approved, so you can use your own fixtures for happy-path testing.

Two notes on handling these:

  • CARD_LOST_OR_STOLEN is returned for both cards on purpose, and its message is deliberately the same generic decline copy as PAYMENT_FAILED. Branch on the code if you need to, but do not tell a cardholder their card is reported lost or stolen.
  • PROCESSING_ERROR is the only scenario here where retrying the same card is sensible. The rest are decisions about the card; ask for a different payment method.

errors[].code is an open enum — treat any code you do not recognise as a generic payment failure rather than hard-failing. See Order lifecycle → Error codes for the full list, and Payments for payment integration generally.

Step 5: Implement the Order Flow

A typical order flow involves these API calls in sequence:

Every call uses your partner API key — there is no session layer on the partner API surface. Supply the Idempotency-Key header on placeOrder to make order submission safe to retry, and carry the end user's client context on the order body:

Code
const response = await fetch(`${GETT_API_URL}/v1/marketfront/orders/place`, { method: 'POST', headers: { 'Authorization': `Bearer ${GETT_API_KEY}`, 'Content-Type': 'application/json', 'Idempotency-Key': crypto.randomUUID(), }, body: JSON.stringify({ ...orderPayload, // Required. Forward the customer's own values from the request your front // end received — not your server's. See "End-user client context". client: { ip: customerIp, userAgent: customerUserAgent }, }), });

See the Order Lifecycle for state machine details, and the API Reference for request/response schemas.

Going to Production

When you're ready to go live, swap your sandbox key for your production key — the base URL is unchanged:

  1. Switch to your Production API Key
  2. Remove any test data references
  3. Verify the integration with a small batch of real orders

See Conventions for rate limits, caching strategies, and error handling, and the API Reference for the full endpoint and schema documentation.

Next Steps

  • Authentication — API keys, environments, and security best practices
  • Order Lifecycle — State machine and status transitions
  • Payments — Payment integration options
  • Schemas — Type definitions and data models
  • API Reference — Complete endpoint documentation
Marketfront APIConventions
On this page
  • What You Can Build
  • Key Concepts
  • Prerequisites
  • Step 1: Get Your Credentials
  • Step 2: Set Up Your Environment
    • Environment Variables
    • Base URL
  • Step 3: Make Your First API Call
    • Find Stores
    • Get a Store's Menu
  • Step 4: Test in Sandbox
    • Test Location
    • Test Store
    • Test Payment Cards
  • Step 5: Implement the Order Flow
  • Going to Production
  • Next Steps
JSON
TypeScript