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

# Trust Center & NDA room

> Request and download gated compliance documents from the public CBPay Trust Center

export const EnvUrls = ({lang = "en"}) => {
  const T = {
    en: {
      test: "Test",
      live: "Live",
      hint: "Same API on both environments — build against test first, then go live by swapping the base URL and the key.",
      guide: "Environments and testing",
      href: "/en/environment-testing"
    },
    es: {
      test: "Test",
      live: "Live",
      hint: "La misma API en ambos ambientes — construye primero contra test y pasa a live cambiando la URL base y la key.",
      guide: "Entorno y pruebas",
      href: "/es/environment-testing"
    },
    zh: {
      test: "Test",
      live: "Live",
      hint: "两个环境的 API 完全一致——先在 test 环境构建，再通过切换基础 URL 和密钥上线。",
      guide: "环境与测试",
      href: "/zh/environment-testing"
    }
  };
  const t = T[lang] || T.en;
  const row = (label, url, keyPattern, badgeCls) => <div className="flex flex-wrap items-center gap-2 px-3 py-2">
      <span className={"rounded px-1.5 py-0.5 text-xs font-semibold uppercase tracking-wide " + badgeCls}>
        {label}
      </span>
      <code className="text-xs">{url}</code>
      <span className="text-xs text-gray-400 dark:text-zinc-500">·</span>
      <code className="text-xs">{keyPattern}</code>
    </div>;
  return <div className="my-4 rounded-xl border border-gray-200 dark:border-zinc-700 divide-y divide-gray-200 dark:divide-zinc-700 text-sm not-prose">
      {row(t.test, "https://cryptobank.qbank.cl/platform", "pk_test_...", "bg-amber-100 text-amber-800 dark:bg-amber-900/40 dark:text-amber-300")}
      {row(t.live, "https://api.qbank.cl/platform", "pk_...", "bg-emerald-100 text-emerald-800 dark:bg-emerald-900/40 dark:text-emerald-300")}
      <p className="px-3 py-2 text-xs text-gray-500 dark:text-zinc-400 m-0">
        {t.hint} <a href={t.href}>{t.guide} →</a>
      </p>
    </div>;
};

<EnvUrls lang="en" />

The public Trust Center at [cbpayapp.com/trust](https://www.cbpayapp.com/trust) lists public compliance records and explains how to request the gated N2 room. The gated documents are provider-agnostic compliance evidence; bytes are released only after the external contact signs the NDA. No CBPay account is required.

```mermaid theme={"theme":{"light":"github-light","dark":"github-dark"}}
sequenceDiagram
  participant I as Integrator
  participant T as Trust Center
  participant E as Contact email
  I->>T: POST /v1/trust/nda-requests
  T-->>E: Personal signing link
  E->>T: GET/POST /v1/trust/nda/sign/{token}
  T-->>E: Five-year download token
  E->>T: GET /v1/trust/nda-docs/{id}/download
```

## Flow

<Steps>
  <Step title="Request access">
    Send the company, contact and purpose. The same company plus email while pending is idempotent.

    ```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
    curl -X POST https://api.qbank.cl/platform/v1/trust/nda-requests \
      -H 'Content-Type: application/json' \
      -d '{"company_name":"Acme Payments Ltd","contact_name":"Jordan Lee","contact_email":"compliance@acme.example","country":"US","purpose":"Evaluate compliance controls","locale":"en"}'
    ```

    Response (`202`, or `200` with `idempotency_hit: true` on replay):

    ```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
    {"request_id":"4e7b1f3e-8b20-4ef8-9cc5-1bcb6d9b2a01","status":"pending_signature","expires_at":"2026-11-18T20:00:00Z","email_sent":true}
    ```
  </Step>

  <Step title="List available document metadata">
    Metadata is public; document bytes are not.

    ```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
    curl https://api.qbank.cl/platform/v1/trust/nda-docs
    ```

    Response (`200`):

    ```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
    {"documents":[{"id":"us-aml-program","title_en":"US AML Program (Grupo CB LLC, Jan 2026)","pages":39,"sha256":"7d1df3be9f4a8b4bf88dce93a3b939f8a737f123cb60b8074442ca035cd6e940"}]}
    ```
  </Step>

  <Step title="Review and sign from the email">
    Open the personal link. The page is public and no CBPay session is needed. Submit the signer identity, company registration, address and `accept: true`. The response contains the raw download token once.

    ```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
    curl -X POST https://api.qbank.cl/platform/v1/trust/nda/sign/<SIGN_TOKEN> \
      -H 'Content-Type: application/json' \
      -d '{"signer_name":"Jordan Lee","signer_title":"Chief Compliance Officer","company_reg":"US-123456","company_address":"1 Main Street, Boston MA","accept":true}'
    ```

    Response (`200`):

    ```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
    {"request_id":"4e7b1f3e-8b20-4ef8-9cc5-1bcb6d9b2a01","status":"signed","download_token":"<32-hex-token>","download_url":"https://www.cbpayapp.com/en/trust/nda?request=...&token=...","expires_at":"2031-10-18T20:00:00Z"}
    ```
  </Step>

  <Step title="Check status and download">
    Use the download Bearer token. Each PDF response includes `X-Checksum-Sha256` and `Cache-Control: no-store`; every delivery is audit-recorded.

    ```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
    curl https://api.qbank.cl/platform/v1/trust/nda-requests/<REQUEST_ID>/status \
      -H 'Authorization: Bearer <DOWNLOAD_TOKEN>'
    curl -L -o trust-document.pdf https://api.qbank.cl/platform/v1/trust/nda-docs/us-aml-program/download \
      -H 'Authorization: Bearer <DOWNLOAD_TOKEN>'
    ```

    Status response (`200`):

    ```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
    {"request_id":"4e7b1f3e-8b20-4ef8-9cc5-1bcb6d9b2a01","status":"signed","signed_at":"2026-10-19T20:00:00Z","expires_at":"2031-10-18T20:00:00Z","documents":["us-aml-program"]}
    ```
  </Step>
</Steps>

## States and errors

| State | Meaning | Action |
| - | - | - |
| `pending_signature` | Signing link is valid for 30 days. | Review and sign, or request again after expiry. |
| `signed` | Downloads are enabled for five years. | Use the download Bearer token. |
| `expired` | Signing or download entitlement expired. | Submit a new request. |
| `revoked` | Compliance removed access immediately. | Contact compliance or submit a new request. |

See the [error catalog](/en/errors) for `counsel_pending`, `invalid_token`, `unknown_document`, `already_decided`, `accept_required`, `email_unavailable`, `entitlement_revoked` and `entitlement_expired`.

## FAQ

<AccordionGroup>
  <Accordion title="Is a CBPay account required?">No. The contact uses the personal signing and download tokens from email.</Accordion>
  <Accordion title="Can I retry the request safely?">Yes. Reusing the same company and contact email while pending returns the existing request and does not send a duplicate envelope.</Accordion>
  <Accordion title="What does email_sent mean?">`true` means delivery was handed to the configured email service; `false` means the request exists but delivery failed. Do not log or expose raw tokens.</Accordion>
  <Accordion title="How long are downloads available?">Five years after signing, unless compliance revokes the entitlement sooner.</Accordion>
</AccordionGroup>


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