> ## Documentation Index
> Fetch the complete documentation index at: https://docs.yuko.so/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom Apps

> OAuth apps that let a partner or in-house tool connect to a merchant's Yuko data through the REST API, with merchant-approved scopes.

<Note>
  **Where to find this:** Custom Apps aren't listed on the Integrations page yet. [Contact support](https://yuko.so/support/) to set one up.
</Note>

## Introduction

A **custom app** is an OAuth 2.0 client registered with Yuko. It lets an external tool (a checkout provider, a partner app or your own internal system) ask a merchant for access to their Yuko data, instead of the merchant copying a REST API key by hand.

Once the merchant approves, the app receives an access token and calls the [REST API](/integrations/rest-api) with the scopes the merchant granted.

<Info>Custom Apps don't push Yuko events to other tools. To receive events, use [Webhooks](/integrations/webhooks). To call the API from a single store's systems, a [REST API](/integrations/rest-api) key is simpler.</Info>

## When to use

* You're building an app that many Yuko merchants will connect to.
* You want merchants to connect with one click and approve access, rather than paste an API key.
* You need tokens that can be revoked without affecting the merchant's other keys.

## What a custom app includes

| Setting | What it is |
| - | - |
| **App name** and **Description** | Shown to the merchant on the approval screen. |
| **Redirect URL (Callback)** | Where Yuko sends the merchant after they approve or deny access. |
| **Installation URL** and **Settings URL** | Your app's install and settings pages. |
| **Client ID** and **Client Secret** | The app's OAuth credentials. Keep the secret on your server. |
| **API Scopes** | The access the app requests: **Custom**, **Read-Only** (read access for all scopes) or **Full Access** (read/write access for all scopes). With **Custom**, set each resource to **None**, **Read** or **Read/Write**. See [Scopes](/developer/api/scopes). |

## How the connection works

<Steps>
  <Step title="Your app sends the merchant to Yuko">
    The app redirects the merchant to Yuko's authorisation page with its client ID, redirect URL, requested scopes and a `state` value.
  </Step>

  <Step title="The merchant approves">
    Yuko shows the app's name and the access it's asking for. The merchant clicks **Authorize** or **Deny**.
  </Step>

  <Step title="Your app exchanges the code">
    Yuko redirects back to the app's redirect URL with an authorisation code. The app's server exchanges the code for an access token and a refresh token.
  </Step>

  <Step title="Your app calls the API">
    The app sends the access token as a Bearer token on [REST API](/developer/api/introduction) requests, within the approved scopes.
  </Step>
</Steps>

## Best practices

<Tip>**Request only the scopes you need.** Merchants are more likely to approve narrow access.</Tip>
<Tip>**Keep the client secret and tokens on your server.** Never put them in browser or mobile code.</Tip>
<Tip>**Test with a development store** before asking real merchants to connect.</Tip>

## FAQs

<AccordionGroup>
  <Accordion title="What's the difference between a custom app and a REST API key?">
    A REST API key is created by the merchant in **Integrations → REST API** and pasted into your tool. A custom app uses OAuth, so the merchant approves access from your app without handling keys.
  </Accordion>

  <Accordion title="What's the difference vs Webhooks?">
    Custom apps call Yuko's API. Webhooks send Yuko events to your server. Many integrations use both.
  </Accordion>
</AccordionGroup>

## Related

<CardGroup cols={2}>
  <Card title="REST API" icon="code" href="/integrations/rest-api">
    Read and write Yuko data programmatically.
  </Card>

  <Card title="Webhooks" icon="bolt" href="/integrations/webhooks">
    Receive real-time event notifications.
  </Card>

  <Card title="Shopify Flow" icon="shop" href="/integrations/shopify-flow">
    Trigger Shopify Flow workflows from Yuko loyalty, VIP and referral events.
  </Card>

  <Card title="Shopify POS" icon="cash-register" href="/integrations/shopify-pos">
    Redeem points and apply loyalty discounts at the till.
  </Card>

  <Card title="Klaviyo" icon="envelope" href="/integrations/klaviyo">
    Sync customers, points and tier data into Klaviyo.
  </Card>

  <Card title="Omnisend" icon="envelope" href="/integrations/omnisend">
    Sync loyalty data into Omnisend.
  </Card>

  <Card title="WhatsApp" icon="comments" href="/integrations/whatsapp">
    Send transactional loyalty messages via 13 supported WhatsApp Business API providers.
  </Card>

  <Card title="Retainful" icon="envelope-open-text" href="/integrations/retainful">
    Email marketing & abandoned cart recovery.
  </Card>

  <Card title="Judge.me" icon="star" href="/integrations/judgeme">
    Award loyalty points for Judge.me reviews.
  </Card>
</CardGroup>

<CardGroup cols={2}>
  <Card title="Book a Free Setup Call" icon="phone" href="https://cal.com/rameshelamathi/yuko-demo">
    Talk to our team for personalised setup help.

    **Time:** 30 minutes
  </Card>

  <Card title="Contact Support" icon="life-ring" href="https://yuko.so/support/">
    Visit our support hub for help articles, live chat and ticket submission.
  </Card>

  <Card title="Browse the Guides" icon="book" href="/getting-started/welcome">
    Documentation across loyalty, referrals, memberships and more.
  </Card>

  <Card title="Install Yuko" icon="shop" href="https://apps.shopify.com/yuko">
    Add Yuko to your Shopify store from the Shopify App Store.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.