# AlgoKit TestNet Dispenser API Documentation ## Overview The AlgoKit TestNet Dispenser API provides functionalities to interact with the Dispenser service. This service enables users to fund and refund assets. ## Base URLs - **Production Instance (publicly available):** `https://api.dispenser.algorandfoundation.tools` ## Authorization All API endpoints require an `Authorization` header containing a valid JWT token. > Refer to [algokit dispenser](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/dispenser.md#login) command documentation to learn how to obtain a valid JWT token by executing `algokit dispenser login --ci` command. ## Endpoints ### 1. `POST /fund/{assetID}` Funds a user's wallet with a specified asset. **URL Parameters:** | Parameter | Description | | --------- | ------------------------------------------------------------------------ | | `assetID` | ID of the asset for which the funding limit is sought. Use `0` for ALGO. | **Request Body:** | Parameter | Description | | --------- | ----------------------------------- | | receiver | Address of the wallet to be funded. | | amount | Amount of the asset to be funded. | **Response Body:** ```json { "txID": "string", "amount": "number" } ``` | Parameter | Description | | --------- | ------------------------------------------------------------------------ | | `txID` | ID of the fund transaction from the dispenser to the requesting address. | | `amount` | Amount of the asset to be funded. | ### 2. `GET /fund/{assetID}/limit` Fetches the funding limit for a specified asset. **URL Parameters:** | Parameter | Description | | --------- | ------------------------------------------------------------------------ | | `assetID` | ID of the asset for which the funding limit is sought. Use `0` for ALGO. | **Response Body:** ```json { "amount": "number" } ``` | Parameter | Description | | --------- | --------------------------------------------------- | | `amount` | Current daily amount limit for the requested asset. | ### 3. `POST /refund` Allows refunding a transaction. A status code `200` indicates a successful refund. **Request Body:** ```json { "refundTransactionID": "string" } ``` | Parameter | Description | | ------------------- | ----------------------------- | | refundTransactionID | ID of the refund transaction. | --- ## Error Handling If an error occurs, the API returns a specific status and error code. **Error Codes Table:** | Status Code | Error Code | Description | | ----------- | ------------------------ | --------------------------------- | | 400 | `dispenser_out_of_funds` | Dispenser is out of funds | | 403 | `forbidden` | Dispenser access is forbidden | | 400 | `fund_limit_exceeded` | Dispenser fund limit exceeded | | 400 | `missing_params` | Missing required input parameters | | 403 | `authorization_error` | Authorization error | | 400 | `txn_expired` | Transaction expired | | 400 | `txn_invalid` | Invalid transaction | | 400 | `txn_already_processed` | Transaction already processed | | 404 | `txn_not_found` | Transaction not found | | 400 | `invalid_asset` | Unsupported asset ID | | 500 | `unexpected_error` | Unexpected internal error | For more detailed error information, please refer to the error code in the response body. ## Common Error Response All error responses have the following common format: ```json { "code": "string", "message": "string" } ``` | Error Parameter | Description | | --------------- | ------------------------------------------------- | | `code` | Error code as described in the error codes table. | | `message` | Error message. | ### `missing_params` error response ```json { "code": "missing_params", "message": "string", "parameters": ["string"] } ``` | Error Parameter | Description | | --------------- | --------------------------- | | `parameters` | List of missing parameters. | ### `fund_limit_exceeded` error response ```json { "code": "dispenser_fund_limit_exceeded", "message": "string", "limit": "number", "resetsAt": "string" } ``` | Error Parameter | Description | | --------------- | --------------------------------------------------- | | `limit` | Current daily amount limit for the requested asset. | | `resetsAt` | Timestamp when the daily limit resets. |