openapi: 3.2.0 info: title: Aspiresingapore Public API version: '2026-09-26' description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-09-26: 3 operation(s) read from 2 public documentation page(s) (each operation names its page in x-source). This is not the provider''s published contract; Aspiresingapore has published no machine-readable contract that the pipeline could find. Engine: local.' x-evidence-tiers: code-example: 1 documentation: 2 pages-with-code: 1 pages-read: 2 x-generated-from: documentation x-provenance: generated x-authored-by: API Evangelist x-generated: '2026-09-26' x-generator: generate-contract-from-docs.py x-engine: local x-sources: - https://docs.api.aspireapp.com/glossary - https://docs.api.aspireapp.com/authentication servers: - url: https://api.aspireapp.com security: - Bearer_token: [] - API_Key_client_credentials: [] tags: - name: Public paths: /public/v1/batch-transfers/{id}: get: operationId: get_public_v1_batch_transfers_id tags: - Public summary: Bulk / Batch Transfer Status x-source: https://docs.api.aspireapp.com/glossary parameters: - name: id in: path required: true schema: type: string responses: '200': description: Success (status as documented) x-evidence: kind: documentation /public/v1/login: post: operationId: post_public_v1_login tags: - Public summary: POST /public/v1/login x-source: https://docs.api.aspireapp.com/authentication requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PostPublicV1LoginRequest' responses: '201': description: Success (shape read from the example response on the page) content: application/json: schema: $ref: '#/components/schemas/PostPublicV1LoginResponse' x-evidence: kind: code-example language: curl snippet: "curl --location 'https://api.aspireapp.com/public/v1/login' \\ --header 'Content-Type: application/json' \\ --data '{ \"grant_type\": \"client_credentials\", \"client_id\": \"{CLIENT_ID}\", \"client_secret\": \"{CLIENT_SECRET}\" }' \n Response: \n { \"access_token\" : \"{access_token}\" , \"token_type\" : \"Bearer\" , \"expires_in\" : 900 } \n Send the access_token as Authorization: Bearer {access_token} on every\nsubsequent" /public/v1/{v1id}/{uuid}/status: get: operationId: get_public_v1_v1id_uuid_status tags: - Public summary: Bulk / Batch Transfer Status x-source: https://docs.api.aspireapp.com/glossary parameters: - name: v1id in: path required: true schema: type: string - name: uuid in: path required: true schema: type: string responses: '200': description: Success (status as documented) x-evidence: kind: documentation collapsed_from: 2 example path(s) differing only at v1Id components: schemas: PostPublicV1LoginResponse: type: object properties: access_token: type: string token_type: type: string expires_in: type: integer PostPublicV1LoginRequest: type: object properties: grant_type: type: string client_id: type: string client_secret: type: string securitySchemes: Bearer_token: type: http scheme: bearer x-source: https://help.aspireapp.com/en/articles/9285867-how-to-set-up-a-biometric-authentication.md API_Key_client_credentials: type: oauth2 flows: clientCredentials: tokenUrl: https://api.aspireapp.com/public/v1/login scopes: {} x-source: https://help.aspireapp.com/en/articles/9285867-how-to-set-up-a-biometric-authentication.md