UrbanFox Tenants API
Tenant details and tenant authentication credentials.
Tenant details and tenant authentication credentials.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/urbanfox-tenants-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: UrbanFox Customer Cases Tenants API
version: 2.0.0
summary: Fraud case management, end-user accounts, and tenant operations for UrbanFox customers.
description: 'REST API for UrbanFox tenants to manage fraud cases, end-user accounts, tenant
metrics, and machine-to-machine credentials.
## Authentication
JWT Bearer tokens, issued by `POST /v2/oauth/token` via the OAuth 2.0 client-credentials flow.
## Authorization
Each protected operation declares its required scope in its OAuth 2.0 security requirement.
Tokens missing the required scope receive a `403`.
## Versioning
Versioned via the URL path (`/v2/...`).
'
contact:
name: UrbanFox
license:
name: Proprietary - UrbanFox
servers:
- url: https://api.{tenant_slug}.urbanfox.io
description: 'Per-tenant API host. The {tenant_slug} subdomain matches the {tenant_slug} path parameter on each operation. Example: a tenant with slug ''demo-retail'' calls https://api.demo-retail.urbanfox.io/v2/demo-retail/cases.'
variables:
tenant_slug:
default: demo-retail
description: Tenant DNS slug (lowercase, hyphenated).
security:
- oauth2: []
tags:
- name: Tenants
description: Tenant details and tenant authentication credentials.
paths:
/v2/{tenant_slug}/tenants:
get:
summary: Get tenant
description: Retrieve tenant identifiers and integration configuration.
operationId: getTenant
parameters:
- description: Tenant DNS slug (lowercase letters, digits, and hyphens; 3-100 characters).
required: true
schema:
type: string
maxLength: 100
minLength: 3
pattern: ^[a-z0-9]+(-[a-z0-9]+)*$
title: Tenant Name
description: Tenant DNS slug (lowercase letters, digits, and hyphens; 3-100 characters).
examples:
- demo-retail
name: tenant_slug
in: path
responses:
'422':
description: Request Validation Failed
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: validation-error
title: Request Validation Failed
status: 422
detail: One or more fields failed validation
errors:
- field: path.tenant_slug
message: Validation failed
type: validation_error
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/APIResponse_TenantDetailsResponse_'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: bad-request
title: Bad Request
status: 400
detail: Malformed request
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: unauthorized
title: Unauthorized
status: 401
detail: Authentication required
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: internal-error
title: Internal Server Error
status: 500
detail: Internal server error
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: item-not-found
title: Application Error
status: 404
detail: 'Tenant not found with name: demo-retail'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: forbidden
title: Forbidden
status: 403
detail: Access denied
tags:
- Tenants
security:
- oauth2:
- read:tenant
/v2/{tenant_slug}/tenants/auth-secret:
get:
summary: Get tenant OAuth client credentials
description: Retrieve the current OAuth client credentials for a tenant.
operationId: getTenantAuthSecret
parameters:
- description: Tenant DNS slug (lowercase letters, digits, and hyphens; 3-100 characters).
required: true
schema:
type: string
maxLength: 100
minLength: 3
pattern: ^[a-z0-9]+(-[a-z0-9]+)*$
title: Tenant Name
description: Tenant DNS slug (lowercase letters, digits, and hyphens; 3-100 characters).
examples:
- demo-retail
name: tenant_slug
in: path
responses:
'422':
description: Request Validation Failed
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: validation-error
title: Request Validation Failed
status: 422
detail: One or more fields failed validation
errors:
- field: path.tenant_slug
message: Validation failed
type: validation_error
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/APIResponse_TenantAuthSecretResponse_'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: bad-request
title: Bad Request
status: 400
detail: Malformed request
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: unauthorized
title: Unauthorized
status: 401
detail: Authentication required
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: internal-error
title: Internal Server Error
status: 500
detail: Internal server error
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: item-not-found
title: Application Error
status: 404
detail: 'Tenant not found with name: demo-retail'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: bad-gateway
title: Bad Gateway
status: 502
detail: Failed to communicate with external service
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: service-unavailable
title: Service Unavailable
status: 503
detail: Service temporarily unavailable
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: forbidden
title: Forbidden
status: 403
detail: Access denied
tags:
- Tenants
security:
- oauth2:
- read:tenant_auth_secret
/v2/{tenant_slug}/tenants/rotate-auth-secret:
post:
summary: Rotate tenant OAuth client secret
description: Rotate a tenant OAuth client secret and return the new credentials.
operationId: postRotateTenantAuthSecret
parameters:
- description: Tenant DNS slug (lowercase letters, digits, and hyphens; 3-100 characters).
required: true
schema:
type: string
maxLength: 100
minLength: 3
pattern: ^[a-z0-9]+(-[a-z0-9]+)*$
title: Tenant Name
description: Tenant DNS slug (lowercase letters, digits, and hyphens; 3-100 characters).
examples:
- demo-retail
name: tenant_slug
in: path
responses:
'422':
description: Request Validation Failed
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: validation-error
title: Request Validation Failed
status: 422
detail: One or more fields failed validation
errors:
- field: path.tenant_slug
message: Validation failed
type: validation_error
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/APIResponse_TenantRotateAuthSecretResponse_'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: bad-request
title: Bad Request
status: 400
detail: Malformed request
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: unauthorized
title: Unauthorized
status: 401
detail: Authentication required
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: internal-error
title: Internal Server Error
status: 500
detail: Internal server error
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: item-not-found
title: Application Error
status: 404
detail: 'Tenant not found with name: demo-retail'
'502':
description: Bad Gateway
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: bad-gateway
title: Bad Gateway
status: 502
detail: Failed to communicate with external service
'503':
description: Service Unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: service-unavailable
title: Service Unavailable
status: 503
detail: Service temporarily unavailable
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ProblemDetail'
example:
type: forbidden
title: Forbidden
status: 403
detail: Access denied
tags:
- Tenants
security:
- oauth2:
- update:tenant_auth_secret
components:
schemas:
TenantDetailsResponse:
properties:
tenant_name:
type: string
title: Tenant Name
description: Unique tenant slug returned as tenant_name for compatibility (e.g. `/v2/{tenant_slug}/...`)
examples:
- demo-retail
readOnly: true
tenant_id:
type: string
format: uuid
title: Tenant Id
description: Stable UUID identifier for the tenant, embedded in JWT claims and downstream services
examples:
- 00000000-0000-4000-8000-000000000000
readOnly: true
client_id:
type: string
title: Client Id
description: OAuth 2.0 client identifier. Send this value as `client_id` when requesting a token from `POST /v2/oauth/token`.
examples:
- A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6
readOnly: true
clickstream_app_id:
anyOf:
- type: string
- type: 'null'
title: Clickstream App Id
description: 'Clickstream application identifier injected into the tracking snippet (format: `<tenant_slug>_<32-char-hex>`); null until provisioned'
examples:
- demo-retail_00000000000000000000000000000001
readOnly: true
created_at:
anyOf:
- type: string
format: date-time
- type: 'null'
title: Created At
description: Time the tenant record was created (RFC 3339 / ISO 8601 UTC); null for tenants created before this field was tracked
examples:
- '2026-03-10T14:32:00Z'
readOnly: true
additionalProperties: false
type: object
required:
- tenant_name
- tenant_id
- client_id
title: TenantDetailsResponse
TenantAuthSecretResponse:
properties:
client_id:
type: string
title: Client Id
description: OAuth 2.0 client identifier. Send this value as `client_id` when requesting a token from `POST /v2/oauth/token`.
examples:
- A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6
readOnly: true
client_secret:
type: string
title: Client Secret
description: Current OAuth 2.0 client secret; send as `client_secret` (with `client_id`) when requesting a token from `POST /v2/oauth/token`
examples:
- csec_example_7q9x2k4m6p8r0t1v3w5y
readOnly: true
additionalProperties: false
type: object
required:
- client_id
- client_secret
title: TenantAuthSecretResponse
APIResponse_TenantDetailsResponse_:
properties:
data:
$ref: '#/components/schemas/TenantDetailsResponse'
description: Response payload
readOnly: true
type: object
required:
- data
title: APIResponse[TenantDetailsResponse]
APIResponse_TenantRotateAuthSecretResponse_:
properties:
data:
$ref: '#/components/schemas/TenantRotateAuthSecretResponse'
description: Response payload
readOnly: true
type: object
required:
- data
title: APIResponse[TenantRotateAuthSecretResponse]
APIResponse_TenantAuthSecretResponse_:
properties:
data:
$ref: '#/components/schemas/TenantAuthSecretResponse'
description: Response payload
readOnly: true
type: object
required:
- data
title: APIResponse[TenantAuthSecretResponse]
TenantRotateAuthSecretResponse:
properties:
client_id:
type: string
title: Client Id
description: OAuth 2.0 client identifier. Send this value as `client_id` when requesting a token from `POST /v2/oauth/token`.
examples:
- A1b2C3d4E5f6G7h8I9j0K1l2M3n4O5p6
readOnly: true
client_secret:
type: string
title: Client Secret
description: Newly issued OAuth 2.0 client secret; the previous secret is invalidated immediately
examples:
- csec_example_9v1t0r8p6m4k2xq7y5w3
readOnly: true
additionalProperties: false
type: object
required:
- client_id
- client_secret
title: TenantRotateAuthSecretResponse
ProblemDetail:
properties:
type:
type: string
title: Type
description: URI reference (or identifier) for problem type
default: about:blank
examples:
- validation-error
readOnly: true
title:
type: string
title: Title
description: Short, human-readable summary
examples:
- Validation Failed
readOnly: true
status:
type: integer
maximum: 599.0
minimum: 100.0
title: Status
description: HTTP status code
examples:
- 400
readOnly: true
detail:
anyOf:
- type: string
- type: 'null'
title: Detail
description: Human-readable explanation (MUST NOT contain PII or sensitive data)
examples:
- Request validation failed on one or more fields
readOnly: true
instance:
anyOf:
- type: string
- type: 'null'
title: Instance
description: URI reference identifying this specific occurrence (e.g., request ID)
examples:
- /v2/demo-retail/cases/case-abc123
readOnly: true
errors:
anyOf:
- items:
additionalProperties: true
type: object
type: array
- type: 'null'
title: Errors
description: Validation errors (extension member)
examples:
- - field: status
message: Input should be 'OPEN' or 'CLOSED'
type: enum
readOnly: true
type: object
required:
- title
- status
title: ProblemDetail
securitySchemes:
oauth2:
type: oauth2
description: 'OAuth 2.0 client-credentials flow. Request a token from `POST /v2/oauth/token` and send it as `Authorization: Bearer <access_token>`.'
flows:
clientCredentials:
tokenUrl: https://api.demo-retail.urbanfox.io/v2/oauth/token
scopes:
create:enduseraccount: Create an end-user account
delete:enduseraccount: Delete an end-user account
read:case: Get a case
read:cases: List cases
read:enduseraccount: Get an end-user account
read:enduseraccounts: List end-user accounts
read:metrics: Get tenant metrics
read:snippet: Get integration snippets
read:tenant: Get tenant
read:tenant_auth_secret: Get tenant OAuth client credentials
update:case: Update a case
update:enduseraccount: Update an end-user account
update:tenant_auth_secret: Rotate tenant OAuth client secret