Pioneer Loan Platform API (1.0.0)
The Pioneer API allows third-party systems to programmatically access loan data, documents, and related entities.
API requests use environment-specific domains (following existing portal pattern):
Production: https://{api-portal}.{bank-domain}/api/public/v1/{resource}
Staging: https://{api-portal}.staging.{bank-domain}/api/public/v1/{resource}- Production:
https://api.pioneerft.com/api/public/v1/...(usepk_live_*keys) - Staging:
https://api.staging.pioneerft.com/api/public/v1/...(usepk_test_*keys)
All API requests require authentication using an API key. Include your API key in the Authorization header:
Authorization: Bearer pk_live_your_api_key_hereKey Types:
pk_test_*- Test keys (only work on staging URLs)pk_live_*- Live keys (only work on production URLs - no env prefix)
API keys can be generated in the Pioneer dashboard under Organization Settings. Note: Production keys require explicit approval from Pioneer.
Rate limits are applied per API key, with separate budgets for reads and writes:
- Reads (GET): 100 requests per minute per API key.
- Writes (POST/PATCH/DELETE): 30 requests per minute per API key.
Rate limit information is included in response headers:
X-RateLimit-Limit: Maximum requests per windowX-RateLimit-Remaining: Requests remaining in current windowX-RateLimit-Reset: Unix timestamp when window resets
When rate limited, you'll receive a 429 Too Many Requests response with a Retry-After header indicating seconds to wait.
⚠️ Important: Production API keys (pk_live_*) that exceed rate limits 3 or more times within 24 hours will be automatically revoked, and your organization's production API access will be disabled. Contact Pioneer support to re-enable access.
List endpoints support pagination via query parameters:
limit: Number of items to return (default: 50, max: 100)offset: Number of items to skip
Response includes pagination metadata. Offset-mode responses look like:
{
"data": [],
"meta": {
"mode": "offset",
"limit": 50,
"offset": 0,
"hasMore": true
}
}Cursor-mode responses (returned when a cursor query param is supplied) instead contain { "mode": "cursor", "limit": 50, "hasMore": true, "nextCursor": "<token>" }, where nextCursor is an opaque token (null when there are no more results). Pass it back as the cursor query param to fetch the next page. Offset and cursor are mutually exclusive, and cursor mode always orders by creation time.
Errors are returned with appropriate HTTP status codes and JSON body:
{
"code": "auth.invalid_key",
"message": "Invalid or expired API key"
}Common error codes:
auth.invalid_key: API key is invalid or expiredauth.org_mismatch: API key does not belong to the organization in the URLauth.env_mismatch: API key type does not match URL environmentauth.env_not_available: Environment not available for this organizationauth.insufficient_permissions: API key lacks required permissionauth.country_restricted: Request IP not allowed for this API keyapi_key.production_not_allowed: Organization not approved for production API keysinput.invalid: Request validation failedrate_limit.exceeded: Too many requests
The spec is published in two OpenAPI versions, both under Download OpenAPI description and each in YAML and JSON. They are generated from the same routes in the same run, describe the identical API, and differ only in schema dialect.
OpenAPI 3.1.0 is the current one. It uses JSON Schema 2020-12: type: [..., "null"] for nullables and numeric exclusiveMinimum/exclusiveMaximum.
OpenAPI 3.0.3 is for tooling that does not read 3.1 — the same document with nullable: true and boolean exclusive* instead. It is also what the Postman collection is generated from. 3.0.3 is the last patch of the 3.0 line; a consumer pinned to 3.0.0, 3.0.1 or 3.0.2 reads it without changes, since those patches clarify the specification rather than alter the document format.
If your generator supports both, take 3.1.0.
Ready-to-import clients are generated from these same routes in the same run, so they never drift from the live API. Both are listed under Download OpenAPI description above, next to the spec itself.
Postman. Import the collection plus the environment for your target (Staging or Production), then set apiKey to your key — every request inherits collection-level bearer auth. Path parameters such as :id appear as editable fields under the URL bar, and optional query parameters are pre-filled but disabled, so tick only the ones you need.
Insomnia. Imports OpenAPI directly: Import -> File -> choose the OpenAPI 3.0.3 YAML. Set the base environment's base_url to the environment you are targeting and add your key as a bearer token.
Need access or a key? Contact us.