SDK DOCUMENTATION

Indulgon Connect v1.0 -- Integrate data portability and identity verification into your platform.

Contents

1. Quick Start 2. Button Types 3. Authentication 4. API Reference 5. Verification Passport 6. Data Push Format 7. Webhooks 8. Rate Limits 9. Error Codes 10. Code Examples 11. Data Portability Commitment

1. Quick Start

Add two lines to your HTML. That is the entire integration.

<!-- Add the SDK script (once per page) -->
<script src="https://api.indulgon.com/connect/sdk.js?key=YOUR_API_KEY"></script>

<!-- Add a button wherever you want it -->
<div data-indulgon="import" data-platform="your-platform-name"></div>

The SDK automatically renders a styled button. When clicked, a popup opens where the model logs into Indulgon, authorizes the data transfer, and the popup closes. No page reload required.

2. Button Types

Data Import

<div data-indulgon="import" data-platform="onlyfans"></div>

Renders "Send Data to Indulgon". When clicked, the model authorizes your platform to send their earnings, subscribers, and payout data to their Indulgon account. The data-platform attribute identifies your platform in the import.

Verification Check

<div data-indulgon="verify"></div>

Renders "Verify with Indulgon". The model shares their Indulgon identity verification with your platform. You receive a time-limited token that confirms their identity, age, and 2257 compliance status.

Account Connect

<div data-indulgon="connect"></div>

Renders "Connect with Indulgon". General-purpose account linking. The model connects their Indulgon account to your platform for ongoing data sync.

3. Authentication

All API calls require an API key. Pass it via header or query parameter:

# Header (recommended)
curl -H "x-api-key: snsr_your_api_key_here" https://api.indulgon.com/connect/api/usage

# Query parameter
curl https://api.indulgon.com/connect/api/usage?api_key=snsr_your_api_key_here

Get your API key by applying for partnership or calling POST /api/connect/register.

4. API Reference

POST/api/connect/register

Register as a partner. Returns an API key and secret.

ParameterTypeRequiredDescription
partner_namestringYesYour platform name
contact_emailstringYesContact email
partner_domainstringNoYour platform URL
contact_namestringNoContact person name
GET/api/connect/api/verify-user

Check if a user is verified on Indulgon. Two modes: email-based (returns yes/no only) or token-based (returns full verification details).

ParameterTypeDescription
emailstringUser email -- returns { found, verified, is_2257_compliant }
tokenstringShare token -- returns full verification: legal_name, age, 2257, document type
POST/api/connect/api/push-data

Push earnings or subscriber data to a user's Indulgon account.

ParameterTypeRequiredDescription
user_emailstringYesIndulgon user email
platformstringYesYour platform identifier
data_typestringYesearnings, subscribers, messages, or payouts
recordsarrayYesArray of data records (see Data Push Format)
GET/api/connect/api/usage

Check your API usage stats. Returns plan, monthly request count, limit, and per-endpoint breakdown.

GET/api/connect/pricing

Get current pricing tiers and feature lists. No authentication required.

5. Verification Passport

Models verify their identity once on Indulgon. They can then share that verification with your platform via a time-limited, single-use token.

Flow

  1. Model verifies on Indulgon (government ID + selfie, reviewed within 24-48h)
  2. Model generates a share token scoped to your platform
  3. Model sends you the token (or it is passed via the SDK popup)
  4. You call our API with the token to retrieve verification details
  5. Token is marked as used (single-use)
POST/api/verification/share

Model generates a share token. Requires model authentication.

ParameterTypeDescription
platformstringName of the platform to share with
scopesarrayWhat to share: ["identity", "age", "2257"]
expires_hoursnumberToken validity (default: 24 hours)
GET/api/verification/check/:token

Public endpoint. Check a share token. Returns verification details based on granted scopes. Token is consumed after one use.

Response fields (based on scopes):

ScopeFields Returned
identitylegal_name, document_type, document_country
ageage, date_of_birth, is_over_18
2257is_2257_compliant

6. Data Push Format

Earnings Record

{
  "platform_transaction_id": "txn_123456",
  "date": "2025-01-15T14:30:00Z",
  "gross_amount": 9.99,
  "net_amount": 7.99,
  "fee": 2.00,
  "type": "subscription",
  "from_user": "fan_username",
  "refunded": false
}

Subscriber Record

{
  "platform_subscriber_id": "sub_789",
  "subscribe_date": "2025-01-10T00:00:00Z",
  "expire_date": "2025-02-10T00:00:00Z",
  "price": 9.99,
  "auto_renew": true,
  "status": "active"
}

7. Webhooks

Set a webhook_url during registration or update it via the API. We will POST events to your URL:

{
  "event": "import.completed",
  "user_email": "[email protected]",
  "platform": "your-platform",
  "data_type": "earnings",
  "records_imported": 1500,
  "timestamp": "2025-01-15T14:30:00Z"
}

Event types: import.completed, import.failed, verification.shared, verification.checked

8. Rate Limits

PlanMonthly LimitBurst Rate
Free1,000 calls10 calls/second
Basic ($99/mo)10,000 calls50 calls/second
Pro ($299/mo)100,000 calls200 calls/second
EnterpriseUnlimitedCustom

When you exceed your limit, the API returns 429 Too Many Requests. The response includes a Retry-After header.

9. Error Codes

CodeMeaningWhat to Do
200SuccessRequest processed normally
400Bad RequestCheck required parameters
401UnauthorizedCheck your API key
404Not FoundResource does not exist or token expired
429Rate Limit ExceededWait and retry, or upgrade your plan
500Server ErrorContact support

10. Code Examples

Register as a partner

curl -X POST https://api.indulgon.com/connect/register \
  -H "Content-Type: application/json" \
  -d '{
    "partner_name": "MyPlatform",
    "contact_email": "[email protected]",
    "partner_domain": "https://myplatform.com"
  }'

Check user verification (by token)

curl -H "x-api-key: snsr_your_key" \
  "https://api.indulgon.com/connect/api/verify-user?token=abc123def456"

Check user verification (by email)

curl -H "x-api-key: snsr_your_key" \
  "https://api.indulgon.com/connect/api/[email protected]"

Push earnings data

curl -X POST https://api.indulgon.com/connect/api/push-data \
  -H "x-api-key: snsr_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "user_email": "[email protected]",
    "platform": "myplatform",
    "data_type": "earnings",
    "records": [
      {
        "platform_transaction_id": "txn_001",
        "date": "2025-01-15T14:30:00Z",
        "gross_amount": 25.00,
        "net_amount": 20.00,
        "type": "subscription"
      }
    ]
  }'

Check API usage

curl -H "x-api-key: snsr_your_key" \
  "https://api.indulgon.com/connect/api/usage"

11. Data Portability Commitment

Every Indulgon user can export all their data at any time -- including data that originated on your platform. Exports are source-labeled (every row tagged with data_source: "your-platform"), machine-readable CSV, and available instantly. We do not lock in anyone's data. The door swings both ways.

This means: if a model imports their earnings from your platform into Indulgon, and later decides to leave Indulgon, they take your data with them. We never hold it hostage. This is core to how we operate, and it is the same standard we ask of our partners.

What "the door swings both ways" means

We are asking partner platforms to let models take their data out and bring it to Indulgon. In return, we give models the exact same ability to take their data out of Indulgon -- including any data that originally came from a partner platform. Data comes in easily, data goes out easily. No one gets trapped on any platform.

Think of it like a bank: you can move your money from Bank A to Bank B whenever you want. The bank does not get to keep your money because you opened an account there. Data portability works the same way. Earnings history, subscriber records, payout data -- these belong to the person who earned them, not to the platform that processed them.

What this looks like technically

When a user requests a data export from Indulgon, every record includes a data_source column:

data_source,  date,        amount,  type
indulgon,      2026-05-15,  49.99,   subscription
onlyfans,     2024-03-22,  9.99,    subscription
sextpanther,  2025-11-01,  15.00,   call

This lets users (and partner platforms) clearly see where each piece of data originated. Nothing is mixed, nothing is relabeled, nothing is hidden. The data retains its source identity permanently.

Questions? Apply for partnership and we will get you set up.