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

# Integrations

> Backend proof creation and profile access keys when Hosted Verify is not enough.

Most products use [Sell access](../quickstart) or [Hosted sign-in](./auth-hosted-verify): **VerifyGate** or **Hosted Verify**, then **`gateCheck`** on the server with the visitor’s **account address**. Use this page only when your backend creates proofs directly, or when you automate Proofable as your own profile.

## When you need this

| Need                                                  | Use                                         |
| ----------------------------------------------------- | ------------------------------------------- |
| Visitor verifies in the browser; you only check later | [Sell access](../quickstart). No access key |
| Your server creates proofs for an approved user       | `verifyFromApp` after one-time approval     |
| MCP, CI, or raw HTTP as **your** Proofable profile    | Profile access key (`npk_*`)                |

## Backend proof creation (`verifyFromApp`)

After a user approves your product once (app-link permission), your server can create proofs for them without a per-request signature.

```javascript theme={"dark"}
import { ProofableClient } from "@proofable/sdk";

// Server only. Never put this config in a browser bundle
const client = new ProofableClient({
  appId: process.env.PROOFABLE_APP_ID,
  // Must match the origin the user approved (or use origin:* on the approval)
  appOrigin: process.env.PROOFABLE_APP_ORIGIN, // e.g. https://yourapp.com
  // Optional: bills/automates as your builder profile
  apiKey: process.env.PROOFABLE_ACCESS_KEY,
});

const proof = await client.verifyFromApp({
  user: { walletAddress: user.accountAddress },
  verifier: "ownership-basic",
  content: { claim: "User completed onboarding", source: "your-app" },
});
```

Requirements:

* Active user approval for your `appId` and site origin ([Agent permissions: App link](../agents/agent-delegation))
* `X-Neus-App` (from `appId`) and matching `Origin` on the request (`appOrigin` sets both for Node)

If approval is missing, send the user through [Hosted Verify](./auth-hosted-verify) first.

This is **not** the same as creating a **listing** under Profile → **Listings**, which bills hosted verification to your account.

## Profile access keys

Create keys under [Profile → Account](https://proofable.me/profile?tab=account).

Pass the key to `ProofableClient` as `apiKey` on the **server**. The SDK sends `Authorization: Bearer npk_...`. Never ship keys in browser bundles.

Access keys identify **your builder profile** for automation. They do not replace per-user approval for backend proof creation.

## Billing

Published gates are the default billing source. Pass **`gateId`** on hosted checkout and `gateCheck`; Proofable resolves owner, usage, and payment from that gate.

`appId` is public attribution for advanced server flows. It does not bill your account by itself.

See [Billing](../platform/billing).

**Next:** [API Authentication](../api/authentication)
