7Block Labs
Blockchain Technology

ByAUJay

Integrating Superfluid streaming with x402 transforms those “payment required” handshakes from your API into a steady stream of income--think per-second revenue for compute, inference, and data services. And the best part? You can do it all without needing billing systems, API keys, or credit cards. Here’s a straightforward, practical guide to help you set it up on the Base mainnet using USDC today, along with the operational guardrails that procurement and FinOps are looking for. Check it out here: (docs.cdp.coinbase.com)

Integrating Superfluid with x402 for Continuous Compute Payments

The headache you’re living with

Your AI endpoints are scaling like champs, but when it comes to monetization, it’s a whole different story. Those usage spikes just burn through your prepaid credits, and per-call billing with cards doesn’t cut it at that “sub-cent” level. Plus, API keys are leaking all over the place, and your finance team is still stuck doing monthly chargebacks by cost center. All the while, agents and microservices are just looking to pay per request in seconds--not get tangled up in another OAuth-and-invoice tango.

x402 is finally introducing the HTTP 402 Payment Required feature, which is perfect for machine-native, programmatic payments. With Superfluid streams, you can get paid every second as long as the access continues. This combination really ties together request-time authorization with ongoing compute consumption. Check out the details here: (docs.cdp.coinbase.com).

What’s at stake if you punt this quarter

  • If you’re missing out on revenue from throttled or unpaid agent traffic, it could be because your cards and gateways aren’t set up for those sub-cent, machine-initiated flows. That’s where x402 comes in--it’s designed just for programmatic clients and agents. Check it out here: (docs.cdp.coinbase.com).
  • Deadline stress is real. Building your own metering, billing, and anti-fraud stack can take ages--like several quarters. But with x402, you just add a single line of middleware on the server side, and clients can automatically retry with a signed payment payload. Super simple! More info here: (x402.org).
  • Then there’s the hassle with procurement. Finance really needs solid monthly accruals, not what feels like “random tips.” That’s where Superfluid shines--its per-second streams make it easy to translate into predictable revenue. Plus, x402 has got your back with precise micropayments when streams aren’t the best fit. Dive deeper here: (superfluid.gitbook.io).
  • And let’s not forget about compliance. You definitely need traceable, on-chain receipts and a way to block sanctioned wallets right at the facilitator. Luckily, enterprise facilitators are rolling out KYT/AML hooks straight out of the box. Find out more here: (blockeden.xyz).

7Block Labs methodology (technical but pragmatic)

We’re using a dual-rail design here: x402 for request-time authorization and settlement, plus Superfluid for persistent, cancellable access. This setup aligns perfectly with the way compute is used.

1) Payment handshake with x402 V2 (HTTP‑native, no accounts)

  • When the server needs a payment, it throws an HTTP 402 error. The cool part? It includes a PAYMENT‑REQUIRED header that lays out what's needed--like the amount, asset, CAIP‑2 network, payTo, and timeout.
  • On the client side, the SDK jumps in to create an EIP‑712/EIP‑3009 authorization (yep, it's gasless!). Then it tries again with PAYMENT‑SIGNATURE. The server checks everything through a facilitator and sends back a PAYMENT‑RESPONSE if all goes well.
  • To keep things future-proof, make sure to use the V2 headers: PAYMENT‑REQUIRED, PAYMENT‑SIGNATURE, and PAYMENT‑RESPONSE. No worries if you're still on V1 (using X‑PAYMENT)--it's all backward-compatible! (x402.gitbook.io)

Implementation Pointers We Enforce:

  • Make sure to include CAIP‑2 networks in your requirements, like eip155:8453 (Base mainnet). For more details, check out this link.
  • When using the EVM “exact” scheme, go for EIP‑3009 transferWithAuthorization for USDC and other compatible tokens. Just a heads up: don’t mix this up with Permit(2612) unless your token actually supports it. You can find more info here.
  • Always read the token’s EIP‑712 name and version dynamically; it's best not to hardcode them. Need more info? Check this resource.

Code Sketch (Express + x402 Server Middleware)

Here's a quick look at how you can set up your Express.js app using the x402 server middleware. This should give you a clear starting point!

1. Install Required Packages

First up, you’ll need to make sure you have Express and x402 installed. If you haven’t done that yet, run this command in your terminal:

npm install express x402

2. Basic Express Setup

Now let’s set up a basic Express server. Here’s the code to get you going:

const express = require('express');
const x402 = require('x402');

const app = express();
const port = 3000;

// Use x402 middleware here
app.use(x402());

app.get('/', (req, res) => {
  res.send('Hello, World!');
});

app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});

3. Adding x402 Middleware

The x402 middleware will handle your requests. Make sure to include it right after you initiate your app. You can tweak its settings based on your needs.

4. Testing the Server

To check if everything is working, just run your server:

node app.js

You should see a message indicating that it's running. Open your browser and head over to http://localhost:3000. You should see "Hello, World!" pop up.

5. Customizing x402

If you want to dive deeper, you can customize x402 middleware using various configurations. Here’s an example of how to set up a basic error handler:

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

Conclusion

And that's a wrap! You've got a simple Express server running with x402 middleware. Feel free to expand on this and add more features as you go along! Happy coding!

import express from 'express';
import { paymentMiddleware } from '@x402/express';

const app = express();
app.use(paymentMiddleware({
  'GET /v1/infer': {
    accepts: [{
      scheme: 'exact',
      network: 'eip155:8453',              // Base mainnet
      maxAmountRequired: '500',            // 0.0005 USDC (6 decimals)
      payTo: '0xYourTreasury',
      asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', // native USDC on Base
      description: 'LLM inference (up to 1k tokens)',
      mimeType: 'application/json',
      maxTimeoutSeconds: 120,
      extra: { name: 'USDC', version: '2' }
    }]
  }
}));

Make sure you're using the USDC address above, which is Circle’s native USDC on Base. Just a quick reminder: don't accidentally use the old legacy USDbC! You can check out more details here.

Client (Axios with Payment Interceptor):

To set up a client using Axios with a payment interceptor, follow these steps:

1. Install Axios

If you haven't already, start by adding Axios to your project. You can do this using npm or yarn:

npm install axios

or

yarn add axios

2. Create an Axios Instance

Next, create a custom Axios instance that you can use throughout your app. This allows you to configure the base URL and other defaults.

import axios from 'axios';

const axiosInstance = axios.create({
    baseURL: 'https://api.yourservice.com',
    timeout: 10000,
    headers: {
        'Content-Type': 'application/json',
    },
});

3. Add the Payment Interceptor

Now, let's add the payment interceptor. This is where you can handle payment-specific logic, such as setting up authorization headers or logging requests.

axiosInstance.interceptors.request.use(
    (config) => {
        // Add payment token if available
        const paymentToken = localStorage.getItem('paymentToken');
        if (paymentToken) {
            config.headers['Authorization'] = `Bearer ${paymentToken}`;
        }
        return config;
    },
    (error) => {
        // Handle the error
        return Promise.reject(error);
    }
);

4. Making a Payment Request

With everything set up, you can now handle payment requests easily. Here's how you might do that:

const makePayment = async (paymentData) => {
    try {
        const response = await axiosInstance.post('/payments', paymentData);
        console.log('Payment successful:', response.data);
        return response.data;
    } catch (error) {
        console.error('Payment failed:', error);
        throw error;
    }
};

5. Usage Example

You can use the makePayment function whenever you need to process a payment:

const paymentData = {
    amount: 1000, // Amount in cents
    currency: 'USD',
};

makePayment(paymentData)
    .then(data => console.log('Payment Data:', data))
    .catch(err => console.error('Error:', err));

Conclusion

That's it! You’ve set up an Axios client with a payment interceptor. Now, you can seamlessly handle payments in your application while keeping your code organized. If you have any questions or feedback, feel free to share!

import axios from 'axios';
import { withPaymentInterceptor } from '@x402/axios';
import { registerExactEvmScheme } from '@x402/evm/exact/client';
import { x402Client } from '@x402/core';

const client = new x402Client();
registerExactEvmScheme(client, { signer: evmSigner }); // EIP‑712 + EIP‑3009

const http = withPaymentInterceptor(axios.create({ baseURL: 'https://api.your.com' }), client);
const r = await http.get('/v1/infer', { params: { prompt: '...' } });
// Interceptor handles 402 → sign → retry flow

This is the same process that Coinbase highlights for MCP servers and the V2 header pattern. Check it out here: (docs.cdp.coinbase.com).

2) Continuous access with Superfluid streams (per‑second cashflow)

  • First up, wrap your USDC into USDCx (the Super Token) and set up a Constant Flow Agreement (CFA) that directs payments from the buyer straight to your treasury for the whole time they need access.
  • As for the operator pattern: the buyer will give ACL permissions so that your facilitator can easily create, update, or delete flows on their behalf using createFlowByOperator. This way, there’s no need for the buyer to keep making on-chain transactions repeatedly. You can find more details here.

Operator‑enabled Stream Creation (SDK Core):

Creating streams has never been easier with the SDK Core! This feature lets operators set up their own streams in a super efficient way. Here’s a quick rundown of what you need to know:

Key Features

  • Flexibility: Operators can create and manage streams as needed without hassle.
  • Customization: Tailor the streams according to specific requirements or preferences.
  • Simplicity: Stream creation is straightforward, making it easy for anyone to get started.

Getting Started

To start using operator-enabled stream creation, check out the following steps:

  1. Setup Environment: Make sure you’ve got the SDK installed and properly configured.
  2. Create Stream: Use the provided methods to create your stream. For example:

    stream = sdk.create_stream(name="my_stream")
  3. Manage Stream: Once your stream is up, you can easily manage its settings and properties.

Resources

For more detailed information, take a look at the following resources:

Feel free to dive in and start exploring the possibilities with operator-enabled stream creation!

import { Framework } from '@superfluid-finance/sdk-core';
import { ethers } from 'ethers';

const sf = await Framework.create({ chainId: 8453, provider }); // Base
const USDCx = '0x...USDCx'; // your deployed/wrapped Super Token on Base

// 1) One-time: buyer grants your facilitator operator perms for USDCx
await sf.cfaV1.updateFlowOperatorPermissions({
  superToken: USDCx,
  flowOperator: '0xYourFacilitator',
  permissions: 7,           // CREATE, UPDATE, DELETE
  flowRateAllowance: '3858024691358' // ~10 USDC/month
}).exec(signer);

// 2) Facilitator creates the stream on demand
await sf.cfaV1.createFlowByOperator({
  sender: '0xBuyer',
  receiver: '0xYourTreasury',
  superToken: USDCx,
  flowRate: '128600823045' // ~1 USDC/day
}).exec(facilitatorSigner);

Superfluid’s CFAv1 offers just the operator functions you need for ACL-based control. You can check them out here.

Why Streams Here?

So, why are streams important? Well, subscriptions and those “always-on” APIs aren’t just a one-time payment deal. Superfluid changes the game by charging you by the second, letting you cancel whenever you want, and keeping real-time balances.

The x402-superfluid reference demonstrates how streams fit into the 402 handshake process: the server checks for an active stream and only sends back a 402 response if it doesn't find one. For more details, check out the Superfluid help page!

3) Practical architecture (the “dual‑rail” pattern)

  • For those quick calls or short-term tasks, it’s just x402 for each micropayment per API request.
  • When you're in it for the long haul (think sessions, agents, or background jobs), you’ll want to either detect or set up a Superfluid stream that matches your expected usage rate. Just make sure to grant access while that stream’s running smoothly.
  • Circuit breaker: If the flowRate dips below a certain point or if your USDCx balance starts to run low, it'll automatically revert to x402 pay-per-call payments or return a 402 to kick off a top-up. (superfluid.gitbook.io)

A reference integration with (x402 + Superfluid) shows off some cool features like “zero protocol fees,” an easy, signature-only user experience, and the ability to wrap USDC into USDCx right when the stream kicks off. We’re taking this a step further by adding enterprise-level observability and treasury controls. Check it out here: (x402.superfluid.org)


Implementation details you shouldn’t skip

Token, network, and facilitator choices

  • Asset: If you want the smoothest experience, go with native USDC on Base at 0x833589…2913. It's best to steer clear of USDbC in your new projects. Check it out here: (circle.com)
  • EIP‑3009 only: For x402 EVM “exact” transactions, you’ll want to use transferWithAuthorization; your facilitator will cover the gas. Don’t just assume you can use Permit(2612) unless your token explicitly mentions it. More details can be found here: (x402.gitbook.io)
  • V2 headers + CAIP‑2: It’s time to adopt PAYMENT‑REQUIRED/PAYMENT‑SIGNATURE/PAYMENT‑RESPONSE along with CAIP‑2 networks. The good news? The SDKs will handle the negotiation for you. You can find out more at: (pypi.org)
  • Facilitator stance: You have the option to run your own setup (we take care of things with HSM-backed keys, RPC redundancy, and allowlists), or you can go with an enterprise facilitator that has KYT/AML integrations. If you need guidance on compliance and security, BlockEden’s docs have got you covered. Check them out here: (blockeden.xyz)

Security and replay protection

  • EIP‑712 Domain: Make sure to read the token's name() and version() dynamically. Pin the chainId, keep those validity windows tight (around 60-120 seconds), and throw in a random 32-byte nonce. Oh, and don’t forget to dedupe based on authorizationState. You can check out more about this here.
  • Recipient Allowlist: For each environment, hardcode the payTo addresses--you'll want to double-check the decimals and symbol on-chain. Circle’s documentation, along with our handy checklist, helps steer clear of those pesky “look-alike USDC” situations. More info available here.
  • Gas Sponsorship: Facilitators need to keep an ETH buffer handy and take a step back on settlement during busy times. Also, make sure to expose the PAYMENT‑RESPONSE along with the tx hash for easy traceability. You can find more details on this GitHub page.

Metering and privacy

  • If you’re looking for variable metering that goes beyond “exact,” stick with x402 for managing admission control and stream rate as your spending limit. You can tweak the flowRate as your usage changes and make sure it lines up with your logs. We’ve got plans for “upto” and stream schemes down the line; for now, we’re safely emulating them. Check it out here: (github.com).
  • For our regulated customers: If you’re after private receipts, Circle’s USDCx on Aleo offers “banking-level privacy” while still keeping you compliant with audit trails. You can pair it with Superfluid on public rails for access control, or if you prefer, keep everything confined to private settlement domains as needed. More info can be found here: (news.superex.com).

Developer ergonomics

  • Just one middleware line to "turn on" 402, and your client wrappers take care of any retries. That’s the key takeaway for your sprint plan. (x402.org)
  • Got third-party SDKs, like thirdweb? They’re already on board with x402 V2 headers, so we’ll fit right into your current HTTP setup. (portal.thirdweb.com)
  • For MCP/agent environments, our x402 axios wrappers seamlessly integrate with your agent tool. No need for custom billing services! (docs.cdp.coinbase.com)

Example: “Continuous compute” for an inference API on Base

Scenario: You offer GPU inference at a rate of $0.002 for every 1,000 tokens burst price. It's worth noting that power users tend to run agents around the clock.

  1. You can kick things off with x402 exactly priced at $0.0005 per call for quick bursts under 1k tokens.
  2. If the client sets the header use-stream: true, or if you notice a lot of frequent calls, you'll want to create (or require) a USDCx stream at a rate of 1 USDC per day.
  3. As long as the stream is active and above the minimum rate, you'll have access without needing to make those per-call payments; just make sure batch jobs tag their requests with the stream ID for chargeback purposes.
  4. If the flow runs low, the auto-wrap feature keeps everything rolling; if not, you'll revert to x402 for each request. (help.superfluid.finance)

Server-side gate (pseudo):

const hasActiveStream = await sf.cfaV1.getFlow({
  superToken: USDCx,
  sender: buyer,
  receiver: treasury
});
if (hasActiveStream && BigInt(hasActiveStream.flowRate) >= MIN_RATE) {
  return next(); // 200 OK
}
return res.status(402).set('PAYMENT-REQUIRED', b64(requirements)).end();

You can find CFA read methods in Superfluid’s SDK Core. Check it out here: (superfluid.gitbook.io)


Prove -- GTM metrics and operational KPIs we instrument from day 1

We don't just give you a flashy demo. Instead, we focus on delivering the revenue and risk dashboards that really matter to procurement and finance teams.

What We Measure (and Move):

  • Pay-through rate: This is the percentage of 402 responses that actually convert to paid access (x402). We're aiming for over 95% pay-through for our repeat agents after their first success. We use cached facilitators and CAIP‑2 pre-selection to help with this. Check it out here.
  • Stream coverage: This refers to the proportion of traffic that's covered by Superfluid streams compared to the standard per-call x402 payments. A higher coverage means we're looking at fewer settlements and a smoother revenue flow overall. Learn more here.
  • DSO impact: Our 2-second settlement on x402 flows helps cut down Days Sales Outstanding when compared to card payments and invoices. Streams accumulate value per second and come with on-chain receipts. Dive deeper into this topic here.
  • Chargeback/fraud: Thanks to signature-based EIP‑712/EIP‑3009 methods and allowlists, we’ve managed to eliminate chargebacks altogether. Any rejected payments get flagged before work even starts by the 402 system. More info can be found here.
  • Ops MTTR: Using header-level telemetry (like PAYMENT‑REQUIRED, SIGNATURE, and RESPONSE), our SREs can quickly link authorization failures to chain conditions. We also provide dashboards that come with transaction hashes from PAYMENT‑RESPONSE to make things clearer. Check that out here.

When you're talking to potential partners or investors, here are some solid market proof points to highlight:

  • The public x402 dashboards show a steady climb in transaction volumes and active resources.
  • Superfluid has reported over $1B streamed historically.

Both of these indicators really show that the ecosystem is maturing around this architecture. Check it out at (x402.org).


Emerging best practices (Jan 2026)

  • Make sure to use Base mainnet USDC as your go-to settlement asset for EVM x402. Don’t forget to pin the address 0x833589…2913 in the config, not in the env text. And if you’ve got any legacy USDbC, it’s time to migrate that over! (circle.com)
  • Let’s stick with V2 headers and CAIP‑2 network IDs for standardization; just keep V1 as a fallback for those long-tail clients who might still rely on it. (pypi.org)
  • Set up a first-party facilitator for production to manage things like KYT, rate limits, and treasury policy. Make it extra secure with HSM keys and set some per-resource maximums. If you need some guidance, check out enterprise implementations like BlockEden for compliance insights. (blockeden.xyz)
  • Keep the “admission budget” (specific to x402) separate from the “sustained budget” linked to your Superfluid stream. Also, make sure your flowRate updates are event-driven from metering (think Kafka, ClickHouse) to steer clear of any over-streaming headaches. (superfluid.gitbook.io)
  • For those privacy-sensitive areas, check out USDCx on Aleo for private settlements while still maintaining access control on public rails. This approach allows for auditability without risking any public business-intelligence leaks. (news.superex.com)

  • Head of Platform/Infra at AI Cloud or Agent Platforms

    • You’ll want to keep an eye out for these keywords: “x402 facilitator,” “EIP‑3009 authorization,” “CAIP‑2 eip155:8453,” “Superfluid CFAv1 operator,” “per‑second GPU metering,” and “PAYMENT‑REQUIRED header.”
  • FinOps/Revenue Ops

    • For this area, make sure to look for: “streamed ARR recognition,” “sub‑cent micropayments,” “days‑sales‑outstanding (DSO),” “cost‑center chargeback,” and “real‑time receipts.”
  • Procurement/Enterprise IT

    • When it comes to procurement, these keywords are key: “stablecoin settlement policy,” “KYT/AML checks,” “ERP P2P integration (Ariba/Coupa/NetSuite),” “approved counterparty wallet,” and “audit trail on‑chain.”

Where 7Block Labs plugs in (so you ship this in weeks, not quarters)

  • Architecture and Implementation Sprints:

    • We're rolling out resource servers using x402 V2, CAIP‑2 networking, and a precise scheme for EVM (Base).
    • We're also setting up facilitator deployment with HSM signing, rate limits, and a solid treasury policy.
    • For our superfluid stream control plane, expect operator ACLs plus auto-wrap to keep access flowing. Check out the details here: (help.superfluid.finance).
    • And when needed, we've got an optional privacy domain using Aleo USDCx. More on that can be found here: (news.superex.com).
  • Security and audits: we dive into things like threat modeling for facilitator keys, keeping an eye on replay and nonce stores, tackling settlement race conditions, and managing recipient allowlists.

    • Check out our security audit services where we cover EIP‑712 domain validation, anti‑replay stores, and even header‑level fuzzing.
  • Integration with your stack:

  • Smart contract layer when it's necessary:

    • Custom Super Tokens, gating adapters, or those “proof-of-metering” contracts with ZK-compatible hooks--perfect for teams ready to move from “exact” to “upto/stream” setups as they transition into x402. Our smart contract development team takes care of everything from design to audit.

Brief deep dive: differentiators and pitfalls

  • x402 vs. h402 and clones: We're on the same page with the Coinbase-maintained spec and SDKs, using V2 headers and CAIP-2. Plus, we're keeping things future-proof for the wider “402” convergence. If you need to handle multi-asset or post-broadcast validations, we’re being careful to extend our offerings without forking the ecosystem. Check it out on GitHub.
  • “USDCx” name collisions: In the Superfluid world, USDCx is our wrapped Super Token, but watch out--Circle has rolled out USDCx variants (Stacks/Aleo) through xReserve/zk privacy. To keep things straight, we’ve pinned addresses for each network and set up clear asset registries to avoid any mix-ups. More details can be found on Circle’s blog.
  • Production addresses and decimals: Always go straight to Circle’s docs for accurate info (Base USDC is 6 decimals at 0x833589…2913). We’ve added unit tests to help avoid any accidental use of USDbC. For more, check out the details on Circle’s blog.
  • Agent ecosystems are moving fast: The CDP MCP server examples, along with some third-party SDKs and GitHub issues, are showing just how quickly the V2 spec is evolving. Our releases are keeping pace with these changes so you don’t have to worry about missing anything. Dive into the details at docs.cdp.coinbase.com.

ROI snapshot you can defend internally

  • Engineering: You can roll out a monetized endpoint in less than 2 sprints, which includes middleware, facilitator, and dashboards. That's way quicker than the over quarter you'd spend on custom billing. Just one line to flip the switch on 402, and streams handle all your subscriptions. Check it out at (x402.org).
  • Finance: With x402, you get a 2-second settlement and per-second accruals on streams, plus audit-ready receipts. Plus, it’s got lower interchange and chargeback overhead compared to regular card rails. More info can be found at (payin.com).
  • GTM: We’re talking about a quicker “time-to-first-payment,” better conversion rates for agents and devs, and instant global access without the hassle of region-locked gateways. The public x402 activity dashboards show some solid growth for both buyers and sellers. Dive into the details at (x402.org).

Ready to make your compute endpoints “cashflow‑aware”?

If you're leading Platform or FinOps at an AI infrastructure company that's all about EKS/GKE with autoscaling, and you've got buyers sending a ton of agent traffic your way, then it’s time to schedule a 45-minute architecture review. Just bring along your Base RPC, treasury wallet, and any ERP constraints you have, and we'll sketch out your x402 + Superfluid gating plan together with milestones for each sprint.

When you get in touch, just reply with “Base‑402‑Streams,” give us your chainId list, and let us know if your procurement uses Ariba or Coupa. We’ll make sure to customize the facilitator policy and operator ACLs to fit your organization right from the start.

References

  • Check out the x402 protocol overview, headers (V2), CAIP‑2 networks, and SDKs. You can find more details here.
  • For the GitHub specs and schemes, plus some “exact” info on EVM with EIP‑3009, head over to GitHub.
  • Dive into the Superfluid CFAv1 operator/ACL docs for insights on streaming primitives and governance updates. All the juicy details are here.
  • Need the official address for USDC on Base (native) and info about migrating off USDbC? Check it out on Circle's blog.
  • Curious about enterprise facilitator posture (KYT/AML/HSM) examples? You can find some good insights here.
  • Looking for a reference on x402 + Superfluid subscriptions? Look no further than this link.
  • Lastly, learn about the privacy-preserving USDCx on Aleo for regulated buyers over at Superex News.

Dive deeper with us! Check out our awesome offerings: blockchain integration services, security audit services, web3 development services, blockchain development services, and cross‑chain solutions.

Like what you're reading? Let's build together.

Get a free 30-minute consultation with our engineering team.

7BlockLabs

Full-stack blockchain product studio: DeFi, dApps, audits, integrations.

7Block Labs is a trading name of JAYANTH TECHNOLOGIES LIMITED.

Registered in England and Wales (Company No. 16589283).

Registered Office address: Office 13536, 182-184 High Street North, East Ham, London, E6 2JA.

© 2026 7BlockLabs. All rights reserved.