---
updatedAt: 2026-05-07T18:17:26.000Z
agentTools:
  projectIndex: https://docs.joinforage.app/llms.txt
---

# Bulk revoke authentication tokens

> 📘 Authentication Guide
>
> For comprehensive details about authenticating with the Forage API, refer to the [authentication guide](doc:authentication).

A `POST` request to `/o/bulk_revoke/` deletes a specified number of [authentication tokens](doc:authentication#authentication-tokens).

Tokens are revoked in chronological order based on expiry time. For example, setting `revoke_count` to `50` deletes the `50` oldest tokens. The `revoke_count` value can range between `1` and `1000`.


# OpenAPI definition

```json
{
  "openapi": "3.0.0",
  "x-readme": {
    "explorer-enabled": false,
    "proxy-enabled": false
  },
  "info": {
    "title": "Forage Payments API",
    "description": "The Forage Payments API is a REST API for processing Electronic Benefits Transfer (EBT) payments (SNAP and EBT Cash) in your e-commerce or in-store application.\n\nProcessing any EBT payment, or checking an EBT card's balance, requires the cardholder's PIN. Federal regulations require all PIN entry to happen through a PCI-compliant, USDA-approved interface. Forage provides that interface, so EBT PIN collection always happens through a Forage-hosted surface (Forage Checkout or a Forage SDK), never directly in your own form. Some endpoints (for example, capture and balance) are only reachable through that surface because they require PIN data in the request.\n\nEBT rarely covers an entire order: items like delivery fees and non-eligible products can't be paid with SNAP or EBT Cash. You decide how to handle the remaining balance (split tender) and any credit or debit processing alongside the EBT portion.\n\nForage offers four integration options. Pick the one that fits your platform and engineering resources:\n\n1. **Fully Hosted Checkout.** Forage processes EBT and credit/debit through a Forage-hosted Checkout UI. Lowest engineering effort, and Forage absorbs most error handling. See the [Fully Hosted Checkout guide](https://docs.joinforage.app/docs/fully-hosted).\n2. **Custom Checkout.** Forage processes EBT; you handle split tender, taxes, and credit/debit in your own checkout flow. Best when you want minimal changes to your existing UX. See the [Custom Checkout guide](https://docs.joinforage.app/docs/custom).\n3. **Online SDKs.** Client-side SDKs for [web](https://docs.joinforage.app/docs/forage-js), [iOS](https://docs.joinforage.app/docs/ios), and [Android](https://docs.joinforage.app/docs/android) that collect EBT PINs in your app while keeping you out of PCI scope.\n4. **POS Terminal SDK.** Accept in-person EBT payments on an Android POS device. See the [POS Terminal guide](https://docs.joinforage.app/docs/forage-terminal-android).\n\nAs a general principle, any data created by your requests, or by your customers on a Forage-hosted surface, is retrievable through GET requests to the appropriate resource.\n\nHave more questions? Use our [contact form](https://www.joinforage.com/get-in-touch) to reach our sales and engineering support teams.\n",
    "contact": {
      "name": "API Support",
      "email": "engineering@joinforage.com"
    },
    "version": "2025-08-04"
  },
  "externalDocs": {
    "description": "Forage documentation",
    "url": "https://docs.joinforage.app/"
  },
  "servers": [
    {
      "url": "https://{environment}.joinforage.app",
      "variables": {
        "environment": {
          "default": "api.sandbox",
          "enum": [
            "api",
            "api.sandbox"
          ]
        }
      }
    }
  ],
  "security": [],
  "paths": {
    "/o/bulk_revoke/": {
      "post": {
        "tags": [
          "Bearer Tokens"
        ],
        "summary": "Bulk revoke authentication tokens",
        "x-readme": {
          "code-samples": [
            {
              "language": "curl",
              "code": "curl --request POST \\\n    --url https://api.sandbox.joinforage.app/o/bulk_revoke/ \\\n    --header 'accept: application/json' \\\n    --header 'content-type: application/json' \\\n    --data '\n{\n  \"client_id\": \"abc123\",\n  \"client_secret\": \"a1b2c3d45678\",\n  \"revoke_count\": 100\n}\n'\n"
            }
          ]
        },
        "description": "> 📘 Authentication Guide\n>\n> For comprehensive details about authenticating with the Forage API, refer to the [authentication guide](https://docs.joinforage.app/docs/authentication).\n\nA `POST` request to `/o/bulk_revoke/` deletes a specified number of [authentication tokens](https://docs.joinforage.app/docs/authentication#authentication-tokens).\n\nTokens are revoked in chronological order based on expiry time. For example, setting `revoke_count` to `50` deletes the `50` oldest tokens. The `revoke_count` value can range between `1` and `1000`.\n",
        "security": [],
        "operationId": "forage_oauth:forage_bulk_revoke_token",
        "requestBody": {
          "$ref": "#/components/requestBodies/BulkRevokeTokens"
        },
        "responses": {
          "200": {
            "description": "__OK__ - Success"
          },
          "401": {
            "description": "__Unauthorized__",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponseObject"
                },
                "example": {
                  "path": "/o/bulk_revoke/",
                  "errors": [
                    {
                      "code": "resource_not_found",
                      "message": "Invalid client id and client secret",
                      "source": {
                        "resource": "OAuth_Access_Tokens",
                        "ref": ""
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ErrorsArray": {
        "type": "array",
        "description": "An array with information about the error.",
        "items": {
          "type": "object",
          "properties": {
            "code": {
              "type": "string",
              "description": "A short string that represents the error."
            },
            "message": {
              "type": "string",
              "description": "A developer-facing message with more details about the error, not to be displayed to customers."
            },
            "source": {
              "type": "object",
              "properties": {
                "resource": {
                  "type": "string",
                  "description": "The type of the Forage resource involved in the error."
                },
                "ref": {
                  "type": "string",
                  "description": "If applicable, the ten character reference hash of the Forage resource that caused the error. An empty string if no specific individual resource was involved."
                }
              }
            },
            "details": {
              "type": "object",
              "description": "Additional details about the error, if applicable."
            }
          }
        },
        "example": []
      },
      "ErrorResponseObject": {
        "type": "object",
        "description": "An object that includes details about the error.",
        "properties": {
          "path": {
            "type": "string",
            "description": "The requested endpoint."
          },
          "errors": {
            "$ref": "#/components/schemas/ErrorsArray"
          }
        }
      },
      "BulkRevokeTokenRequest": {
        "type": "object",
        "description": "The configuration for the bulk token revocation.",
        "properties": {
          "client_id": {
            "type": "string",
            "description": "The client ID for your application, found in the Forage dashboard ([sandbox](https://dashboard.sandbox.joinforage.app/), [production](https://dashboard.joinforage.app/))."
          },
          "client_secret": {
            "type": "string",
            "description": "The client secret for your application, found in the Forage dashboard ([sandbox](https://dashboard.sandbox.joinforage.app/), [production](https://dashboard.joinforage.app/))."
          },
          "revoke_count": {
            "type": "integer",
            "description": "The number of tokens to revoke, between `1` and `1000`. Tokens are revoked in chronological order based on expiry time."
          }
        },
        "required": [
          "client_id",
          "client_secret",
          "revoke_count"
        ]
      }
    },
    "requestBodies": {
      "BulkRevokeTokens": {
        "description": "Request payload body for server bulk revoke tokens",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BulkRevokeTokenRequest"
            }
          }
        }
      }
    }
  }
}
```

# Sibling pages

* [Create an authentication token](https://docs.joinforage.app/reference/create-authentication-token.md)
* [Revoke an authentication token](https://docs.joinforage.app/reference/revoke-authentication-token.md)
* [Create a session token](https://docs.joinforage.app/reference/create-session-token.md)