API reference

Services

A service is one script you sell — its key page, providers, keys and settings all hang off it.

On this page

Almost every other endpoint takes a service_id, so List services is usually the first call you make. Service endpoints need services:read / services:write.

List services

GET/api/servicesservices:read

Your services, paginated with limit and offset.

Query parameters

  • limitnumber1–100

    Number of services per page (1-100)

    Default 20
  • offsetnumber | null≥ 0

    Number of services to skip for pagination

    Default 0
Response fieldsinside data
  • idinteger

    Service unique identifier

  • namestring

    Service name

  • descriptionstring | null

    Service description

  • isPremiumboolean

    Whether the service is marked as premium

  • keylessModeboolean

    Whether the service can be accessed without issuing a key

  • keylessWeekdaysarray of integers

    Weekdays when keyless mode is active (0=Sunday, 1=Monday, ..., 6=Saturday)

  • slugstring | null

    Public slug used in end-user key claim flows

  • hwidResetsAllowedinteger

    How many times a key for this service can reset its bound hardware ID

  • keysTotalinteger

    Total number of keys for this service

  • createdAtdatetime

    Creation timestamp

  • updatedAtdatetime

    Last update timestamp

curl "https://api.santiauth.com/api/services" \
  -H "x-api-key: $SANTIAUTH_API_KEY"
200 OK
{
  "success": true,
  "data": [
    {
      "id": 1,
      "name": "Premium Discord Bot",
      "description": "A premium bot with advanced features",
      "isPremium": false,
      "keylessMode": false,
      "keylessWeekdays": [
        1,
        3,
        5
      ],
      "slug": "premium-discord-bot",
      "hwidResetsAllowed": 3,
      "keysTotal": 0,
      "createdAt": "2026-04-30T15:37:00.604Z",
      "updatedAt": "2026-04-30T15:37:00.604Z"
    }
  ]
}

Get a service

GET/api/services/{id}services:read

Returns the full configuration for a single service, including premium settings, keyless access settings, public slug, and service-level limits.

Path parameters

  • idintegerrequired> 0

    ID of the service

Response fieldsinside data
  • idinteger

    Service unique identifier

  • namestring

    Service name

  • descriptionstring | null

    Service description

  • isPremiumboolean

    Whether the service is marked as premium

  • keylessModeboolean

    Whether the service can be accessed without issuing a key

  • keylessWeekdaysarray of integers

    Weekdays when keyless mode is active (0=Sunday, 1=Monday, ..., 6=Saturday)

  • slugstring | null

    Public slug used in end-user key claim flows

  • hwidResetsAllowedinteger

    How many times a key for this service can reset its bound hardware ID

  • keysTotalinteger

    Total number of keys for this service

  • createdAtdatetime

    Creation timestamp

  • updatedAtdatetime

    Last update timestamp

curl "https://api.santiauth.com/api/services/3f2b8c1e-4d5a-4e6f-9a7b-8c9d0e1f2a3b" \
  -H "x-api-key: $SANTIAUTH_API_KEY"
200 OK
{
  "success": true,
  "data": {
    "id": 1,
    "name": "Premium Discord Bot",
    "description": "A premium bot with advanced features",
    "isPremium": false,
    "keylessMode": false,
    "keylessWeekdays": [
      1,
      3,
      5
    ],
    "slug": "premium-discord-bot",
    "hwidResetsAllowed": 3,
    "keysTotal": 0,
    "createdAt": "2026-04-30T15:37:00.604Z",
    "updatedAt": "2026-04-30T15:37:00.604Z"
  }
}

Create a service

POST/api/servicesservices:write

Creates a service. Its public key page lives at /a/<slug> — check a slug first with Check slug availability. Counts toward your plan's service limit.

Bodyapplication/json

  • namestringrequired2–64 chars

    Human-readable service name shown in dashboards and public flows

  • descriptionstring | null≤ 2000 chars

    Optional internal description for the service

  • is_premiumboolean

    Whether the service should be treated as a premium offering

    Default false
  • keyless_modeboolean

    Whether users can access the service without receiving a generated key

    Default false
  • keyless_weekdaysarray of integers

    Weekdays when keyless mode is active. Use 0 for Sunday through 6 for Saturday. Leave empty when keyless_mode is false.

    Default []
  • slugstring | null≤ 64 chars

    Optional public slug used in end-user claim links and public service pages. Send empty string or null to leave unset.

Response fieldsinside data
  • idinteger

    Service unique identifier

  • namestring

    Service name

  • descriptionstring | null

    Service description

  • isPremiumboolean

    Whether the service is marked as premium

  • keylessModeboolean

    Whether the service can be accessed without issuing a key

  • keylessWeekdaysarray of integers

    Weekdays when keyless mode is active (0=Sunday, 1=Monday, ..., 6=Saturday)

  • slugstring | null

    Public slug used in end-user key claim flows

  • hwidResetsAllowedinteger

    How many times a key for this service can reset its bound hardware ID

  • keysTotalinteger

    Total number of keys for this service

  • createdAtdatetime

    Creation timestamp

  • updatedAtdatetime

    Last update timestamp

curl -X POST "https://api.santiauth.com/api/services" \
  -H "x-api-key: $SANTIAUTH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Blox Fruits Hub",
  "slug": "blox-fruits-hub",
  "is_premium": false
}'
201 Created
{
  "success": true,
  "data": {
    "id": "660e8400-e29b-41d4-a716-446655440001",
    "name": "Premium Discord Bot",
    "description": "A premium bot with advanced features",
    "isPremium": false,
    "keylessMode": false,
    "keylessWeekdays": [],
    "slug": "premium-discord-bot",
    "hwidResetsAllowed": 3,
    "keysTotal": 0,
    "createdAt": "2026-04-30T15:37:00.604Z",
    "updatedAt": "2026-04-30T15:37:00.604Z"
  }
}

Update a service

PUT/api/services/{id}services:write

Send only the fields you want to change.

Path parameters

  • idintegerrequired> 0

    ID of the service

Bodyapplication/json

  • namestring2–64 chars

    Updated service name shown in dashboards and public flows

  • descriptionstring | null≤ 2000 chars

    Updated internal description for the service

  • is_premiumboolean

    Whether the service should be treated as a premium offering

  • keyless_modeboolean

    Whether users can access the service without receiving a generated key

  • keyless_weekdaysarray of integers

    Weekdays when keyless mode is active. Use 0 for Sunday through 6 for Saturday. Leave empty when keyless_mode is false.

  • slugstring | null≤ 64 chars

    Optional public slug used in end-user claim links and public service pages

  • hwid_resets_allowedinteger≥ 0

    How many times a key for this service can reset its bound hardware ID

Response fieldsinside data
  • idinteger

    Service unique identifier

  • namestring

    Service name

  • descriptionstring | null

    Service description

  • isPremiumboolean

    Whether the service is marked as premium

  • keylessModeboolean

    Whether the service can be accessed without issuing a key

  • keylessWeekdaysarray of integers

    Weekdays when keyless mode is active (0=Sunday, 1=Monday, ..., 6=Saturday)

  • slugstring | null

    Public slug used in end-user key claim flows

  • hwidResetsAllowedinteger

    How many times a key for this service can reset its bound hardware ID

  • keysTotalinteger

    Total number of keys for this service

  • createdAtdatetime

    Creation timestamp

  • updatedAtdatetime

    Last update timestamp

curl -X PUT "https://api.santiauth.com/api/services/3f2b8c1e-4d5a-4e6f-9a7b-8c9d0e1f2a3b" \
  -H "x-api-key: $SANTIAUTH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "keyless_mode": true,
  "keyless_weekdays": [
    0,
    6
  ]
}'
200 OK
{
  "success": true,
  "data": {
    "id": 1,
    "name": "Premium Discord Bot",
    "description": "A premium bot with advanced features",
    "isPremium": false,
    "keylessMode": false,
    "keylessWeekdays": [
      1,
      3,
      5
    ],
    "slug": "premium-discord-bot",
    "hwidResetsAllowed": 3,
    "keysTotal": 0,
    "createdAt": "2026-04-30T15:37:00.604Z",
    "updatedAt": "2026-04-30T15:37:00.604Z"
  }
}

Delete a service

DELETE/api/services/{id}services:write

Permanently deletes the service. This can't be undone.

Path parameters

  • idintegerrequired> 0

    ID of the service

curl -X DELETE "https://api.santiauth.com/api/services/3f2b8c1e-4d5a-4e6f-9a7b-8c9d0e1f2a3b" \
  -H "x-api-key: $SANTIAUTH_API_KEY"
204 No Content
Empty body.

Check slug availability

GET/api/services/slug/checkservices:read

Tells whether a key-page slug is free. Pass exclude_id when renaming an existing service so its own slug counts as free.

Query parameters

  • slugstringrequired≤ 64 chars

    Slug to test for availability. Empty/whitespace is treated as unset and always reported available.

  • exclude_idinteger> 0

    Service ID to exclude from the duplicate check. Use this when editing a service so its current slug is not flagged as taken.

Response fieldsinside data
  • availableboolean
  • slugstring
curl "https://api.santiauth.com/api/services/slug/check?slug=premium-discord-bot" \
  -H "x-api-key: $SANTIAUTH_API_KEY"
200 OK
{
  "success": true,
  "data": {
    "available": false,
    "slug": "string"
  }
}

List a service's providers

GET/api/services/{id}/providersservices:read

Providers with their checkpoints, in the order they appear on the public key page.

Path parameters

  • idintegerrequired> 0

    ID of the service

curl "https://api.santiauth.com/api/services/3f2b8c1e-4d5a-4e6f-9a7b-8c9d0e1f2a3b/providers" \
  -H "x-api-key: $SANTIAUTH_API_KEY"
200 OK
{
  "success": true,
  "data": null
}

Reorder providers

PUT/api/services/{id}/providers/orderservices:write

Sets the order of providers on the key page — first ID is shown first. Providers you leave out keep their relative order after the listed ones.

Path parameters

  • idintegerrequired> 0

    ID of the service

Bodyapplication/json

  • provider_idsarray of integersrequired≤ 200 items

    Provider ids of this service in their new order (first = shown first). Providers left out keep their relative order after these.

curl -X PUT "https://api.santiauth.com/api/services/3f2b8c1e-4d5a-4e6f-9a7b-8c9d0e1f2a3b/providers/order" \
  -H "x-api-key: $SANTIAUTH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "provider_ids": [
    1,
    2
  ]
}'
200 OK
{
  "success": true,
  "data": null
}

Get traffic stats

GET/api/services/{id}/statsservices:read

Key-page traffic and keys for the selected range (days): flow starts, checkpoints passed, validations, keys generated and used, plus a daily series.

Path parameters

  • idintegerrequired> 0

    ID of the service

Query parameters

  • rangestring

    Range in days, capped by the owner's plan

    One of7143090365
Response fieldsinside data
  • service_idnumber
  • range_daysnumber
  • flow_startsnumber
  • checkpoints_passednumber
  • key_validationsnumber
  • keys_generatednumber
  • keys_usednumber
  • timeSeriesarray of objects
    Show 6 child attributes
    • datestring
    • flow_startsnumber
    • checkpoints_passednumber
    • key_validationsnumber
    • keys_generatednumber
    • keys_usednumber
  • byExecutorarray of objects
    Show 3 child attributes
    • datestring
    • executorstring
    • countnumber
  • byCountryarray of objects
    Show 2 child attributes
    • countrystring
    • countnumber
  • byReferrerarray of objects
    Show 2 child attributes
    • referrerstring
    • countnumber
  • byProviderarray of objects
    Show 4 child attributes
    • provider_idnumber
    • provider_namestring
    • flow_startsnumber
    • checkpoints_passednumber
  • byRevenuearray of objects
    Show 3 child attributes
    • revenue_idnumber
    • revenue_namestring
    • checkpoints_passednumber
  • lockedarray of strings
  • maxRangeDaysnumber
curl "https://api.santiauth.com/api/services/3f2b8c1e-4d5a-4e6f-9a7b-8c9d0e1f2a3b/stats" \
  -H "x-api-key: $SANTIAUTH_API_KEY"
200 OK
{
  "success": true,
  "data": {
    "service_id": 1,
    "range_days": 1,
    "flow_starts": 1,
    "checkpoints_passed": 1,
    "key_validations": 1,
    "keys_generated": 1,
    "keys_used": 1,
    "timeSeries": [
      {
        "date": "string",
        "flow_starts": 1,
        "checkpoints_passed": 1,
        "key_validations": 1,
        "keys_generated": 1,
        "keys_used": 1
      }
    ],
    "byExecutor": [
      {
        "date": "string",
        "executor": "string",
        "count": 1
      }
    ],
    "byCountry": [
      {
        "country": "string",
        "count": 1
      }
    ],
    "byReferrer": [
      {
        "referrer": "string",
        "count": 1
      }
    ],
    "byProvider": [
      {
        "provider_id": 1,
        "provider_name": "string",
        "flow_starts": 1,
        "checkpoints_passed": 1
      }
    ],
    "byRevenue": [
      {
        "revenue_id": 1,
        "revenue_name": "string",
        "checkpoints_passed": 1
      }
    ],
    "locked": [
      "string"
    ],
    "maxRangeDays": 1
  }
}