> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.brightmove.com/get-started/quickstart/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.brightmove.com/_mcp/server. ## Authentication The BrightMove API uses OAuth 2.0's `client_credentials` grant. Create a client under **User > API Keys** in the app (or have an admin create one for you under the company admin panel) to get a `client_id`/`client_secret` pair, then exchange it for a short-lived access token and send that token as a Bearer credential on every request. All requests require authentication and will return `401 Unauthorized` otherwise. **1. Get an access token** ``` curl --request POST \ --url https://app.brightmove.com/ATS/oauth2/token \ --user 'YOUR_CLIENT_ID:YOUR_CLIENT_SECRET' \ --data grant_type=client_credentials ``` This returns a JSON response with a short-lived `access_token` (one hour by default): ```json { "access_token": "eyJhbGciOiJSUzI1NiIs...", "token_type": "Bearer", "expires_in": 3599 } ``` **2. Call the API with the access token** ``` curl --request GET \ --url https://app.brightmove.com/ATS/app/req/{guid} \ --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' ``` > **Tip** > > There is no refresh token for this grant type — the `client_id`/`client_secret` pair is itself the long-lived > credential. When your access token expires, just request a new one the same way; there's no session or refresh > flow to manage. ## Parameters Many API methods take optional parameters. For `GET` requests, all parameters should be specified as a segment of the endpoint URL: ``` curl --request GET \ --url https://app.brightmove.com/ATS/app/req/{guid} ``` In this case, the guid for the Requirement to be retrieved is passed as a segment of the URL. For `POST` and `DELETE` requests, parameters not included in the URL should be encoded as JSON with an Accept and Content-Type of 'application/json': ``` curl --request POST \ --url https://app.brightmove.com/ATS/app/req/find \ --header 'accept: application/json' \ --header 'content-type: application/json' \ --data '{"queryString":"is_submittable: true"}' ``` ## Pagination An API method that performs query operations will typically be paginated to 50 items by default. You can specify further pages with the `pageNumber` parameter and adjust the page size with the `pageSize` parameter. These should be specified in the JSON encoded parameter: ``` curl --request POST \ --url https://app.brightmove.com/ATS/app/req/find \ --header 'accept: application/json' \ --header 'content-type: application/json' \ --data '{"queryString":"is_submittable: true", "pageNumber":1, "pageSize":"PAGE_SIZE_100"}' ``` ## General Considerations * All API access is over HTTPS, and accessed from `https://app.brightmove.com`. * All data is sent and received as JSON (unless otherwise noted). * All timestamps return in Unix time format with millisecond precision: `1597953763000`