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

# Build Your Revenue System

> A practical map of how catalog, checkout, billing, access, and payouts connect inside Ruba.

export const RubaSocials = () => {
  if (typeof document === "undefined") {
    return null;
  }
  const inject = () => {
    const footer = document.getElementById("footer");
    if (!footer || document.getElementById("ruba-socials")) {
      return false;
    }
    const isDark = document.querySelector("html.dark") || document.querySelector('html[class*="dark"]');
    const lineColor = isDark ? "#383838" : "#e8e8ed";
    const iconColor = isDark ? "#8e8e93" : "#86868b";
    const markColor = isDark ? "#ffffff" : "#08080c";
    const hoverColor = "#0071e3";
    const div = document.createElement("div");
    div.id = "ruba-socials";
    div.style.cssText = `display:flex;align-items:center;gap:20px;padding-top:20px;margin-top:20px;border-top:1px solid ${lineColor};width:100%`;
    const logo = `<a href="https://getruba.com" style="display:inline-flex;height:24px;align-items:center;gap:8px;text-decoration:none;color:${markColor};line-height:1;"><svg width="24" height="24" viewBox="0 0 120 120" aria-hidden="true" style="display:block;flex:none;"><g transform="translate(2.5 0)"><path d="M19 25h59L65.43 47H19a4 4 0 0 1-4-4V29a4 4 0 0 1 4-4Z" fill="${markColor}"/><path d="M19 73h31.57L38 95H19a4 4 0 0 1-4-4V77a4 4 0 0 1 4-4Z" fill="${markColor}"/><path d="M85 25h25L70 95H45Z" fill="#007AFF"/></g></svg><span style="display:inline-flex;height:24px;align-items:center;font-weight:600;font-size:15px;color:${markColor};letter-spacing:-0.01em;line-height:1;">Ruba</span></a>`;
    const spacer = `<div style="flex:1"></div>`;
    const ig = `<a href="https://instagram.com/getruba" target="_blank" rel="noopener" aria-label="Instagram" style="display:flex;align-items:center;color:${iconColor};transition:color 0.15s ease;" onmouseover="this.style.color='${hoverColor}'" onmouseout="this.style.color='${iconColor}'"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="20" rx="5" ry="5"/><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"/><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"/></svg></a>`;
    const li = `<a href="https://linkedin.com/company/getruba" target="_blank" rel="noopener" aria-label="LinkedIn" style="display:flex;align-items:center;color:${iconColor};transition:color 0.15s ease;" onmouseover="this.style.color='${hoverColor}'" onmouseout="this.style.color='${iconColor}'"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"/><rect x="2" y="9" width="4" height="12"/><circle cx="4" cy="4" r="2"/></svg></a>`;
    const x = `<a href="https://x.com/getruba" target="_blank" rel="noopener" aria-label="X" style="display:flex;align-items:center;color:${iconColor};transition:color 0.15s ease;" onmouseover="this.style.color='${hoverColor}'" onmouseout="this.style.color='${iconColor}'"><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg></a>`;
    const github = `<a href="https://github.com/rubadot" target="_blank" rel="noopener" aria-label="GitHub" style="display:flex;align-items:center;color:${iconColor};transition:color 0.15s ease;" onmouseover="this.style.color='${hoverColor}'" onmouseout="this.style.color='${iconColor}'"><svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M12 .7a11.5 11.5 0 0 0-3.64 22.4c.58.1.79-.25.79-.56v-2.24c-3.22.7-3.9-1.37-3.9-1.37-.53-1.34-1.29-1.7-1.29-1.7-1.05-.72.08-.71.08-.71 1.16.08 1.78 1.2 1.78 1.2 1.04 1.77 2.72 1.26 3.38.96.1-.75.4-1.26.74-1.55-2.57-.3-5.27-1.29-5.27-5.69 0-1.26.45-2.29 1.19-3.09-.12-.29-.52-1.47.11-3.05 0 0 .97-.31 3.16 1.18A10.96 10.96 0 0 1 12 6.09c.98 0 1.94.13 2.86.39 2.2-1.49 3.16-1.18 3.16-1.18.63 1.58.23 2.76.11 3.05.74.8 1.19 1.83 1.19 3.09 0 4.42-2.7 5.39-5.28 5.68.42.36.79 1.06.79 2.14v3.28c0 .31.21.67.8.56A11.5 11.5 0 0 0 12 .7Z"/></svg></a>`;
    div.innerHTML = logo + spacer + ig + li + x + github;
    footer.appendChild(div);
    return true;
  };
  if (!document.documentElement.dataset.rubaSocialsObserver) {
    document.documentElement.dataset.rubaSocialsObserver = "true";
    const observer = new MutationObserver(() => {
      if (!document.getElementById("ruba-socials")) {
        inject();
      }
    });
    observer.observe(document.body, {
      childList: true,
      subtree: true
    });
  }
  setTimeout(() => {
    if (!inject()) {
      const interval = setInterval(() => {
        if (inject()) {
          clearInterval(interval);
        }
      }, 500);
      setTimeout(() => clearInterval(interval), 10000);
    }
  }, 300);
  return null;
};

<link rel="stylesheet" href="/style.css" />

<RubaSocials />

Ruba gives a software business one system for defining an offer, collecting payment, tracking the resulting customer relationship, and delivering what was purchased. You can operate it from the dashboard or drive the same model through the API.

## Follow one sale through the system

Think about Ruba as a sequence of connected records rather than a collection of unrelated payment tools.

<Steps>
  <Step title="Model the offer">
    A [catalog item](/features/products) holds the customer-facing name, pricing, billing cadence, checkout details, and benefits attached to the sale.
  </Step>

  <Step title="Open checkout">
    Send the buyer to a hosted [buy link](/features/checkout/links), create a [checkout session](/features/checkout/session), or place [embedded checkout](/features/checkout/embed) inside your product.
  </Step>

  <Step title="Record the transaction">
    A completed payment produces an [order](/features/orders). Recurring offers also create a subscription that controls later renewals.
  </Step>

  <Step title="Deliver access">
    [Benefits](/features/benefits/introduction) keep product access aligned with the order or subscription state.
  </Step>

  <Step title="Operate after purchase">
    Customers use the [self-service portal](/features/customer-portal/introduction), while your team follows revenue, refunds, balances, and payouts from Ruba.
  </Step>
</Steps>

## Choose the revenue behavior

The catalog item determines how money should move. Start with the model that matches what the customer is buying.

<CardGroup cols={2}>
  <Card title="Charge once" icon="bolt" href="/features/products#payment-frequency">
    Collect a fixed amount for a permanent purchase, download, service, or other non-renewing offer.
  </Card>

  <Card title="Renew on a schedule" icon="arrows-rotate" href="/features/subscriptions/introduction">
    Create an ongoing subscription with renewal, cancellation, recovery, and benefit state handled as one lifecycle.
  </Card>

  <Card title="Bill measured activity" icon="gauge-high" href="/features/usage-based-billing/introduction">
    Ingest events, aggregate them through a meter, and turn the resulting quantity into a charge.
  </Card>

  <Card title="Price access per member" icon="users" href="/features/seat-based-pricing">
    Connect a subscription quantity to the members who actually receive access.
  </Card>
</CardGroup>

## See the buying surface

Checkout uses the same offer and pricing model whether it is hosted or embedded.

<img className="block dark:hidden" src="https://mintcdn.com/ruba/pmKQW7SekAkxQqgn/assets/introduction/checkout.light.png?fit=max&auto=format&n=pmKQW7SekAkxQqgn&q=85&s=452d81f089da16977cec187573570cf7" alt="Ruba checkout in light mode" width="5114" height="2634" data-path="assets/introduction/checkout.light.png" />

<img className="hidden dark:block" src="https://mintcdn.com/ruba/pmKQW7SekAkxQqgn/assets/introduction/checkout.dark.png?fit=max&auto=format&n=pmKQW7SekAkxQqgn&q=85&s=bd1c46367ef9f6e987d7998e150ea09b" alt="Ruba checkout in dark mode" width="5108" height="2632" data-path="assets/introduction/checkout.dark.png" />

## Decide how your application connects

You do not need every integration surface on day one.

| Surface         | Use it for                                                                            |
| --------------- | ------------------------------------------------------------------------------------- |
| Dashboard       | Configure and operate Ruba manually while validating the business flow.               |
| API and SDKs    | Create records, read state, and connect Ruba to your product backend.                 |
| Webhooks        | React when payment, subscription, customer, benefit, or organization state changes.   |
| Customer Portal | Give authenticated customers a place to manage their own billing relationship.        |
| MCP             | Let supported AI tools inspect and work with Ruba through the Model Context Protocol. |

## Take the shortest launch path

<Steps>
  <Step title="Work in the sandbox">
    Use the [testing environment](/integrate/sandbox) while building. Sandbox data and credentials remain separate from production.
  </Step>

  <Step title="Create an access token">
    Issue an [Organization Access Token](/integrate/oat) for the organization your backend will operate.
  </Step>

  <Step title="Create the first catalog item">
    Configure its price, billing behavior, checkout copy, and any access that should be delivered.
  </Step>

  <Step title="Complete a test checkout">
    Confirm that the order, customer state, and attached benefits change as expected.
  </Step>

  <Step title="Subscribe to the events your product needs">
    Add a [webhook endpoint](/integrate/webhooks/endpoints) and implement only the state transitions your application must react to.
  </Step>
</Steps>

## Continue the build

<CardGroup cols={3}>
  <Card title="Model an offer" icon="boxes-stacked" href="/features/products">
    Start with catalog structure, pricing, and delivery.
  </Card>

  <Card title="Connect your backend" icon="code" href="/integrate/authentication">
    Choose credentials and make the first authenticated request.
  </Card>

  <Card title="Read the API contract" icon="brackets-curly" href="/api-reference/introduction">
    Review environments, authentication, pagination, responses, and rate limits.
  </Card>
</CardGroup>
