Procore Authentication API

The Authentication API from Procore — 4 operation(s) for authentication.

Operations 4

GET /oauth/authorize Grant App Authorization #
POST /oauth/revoke Revoke Token #
GET /oauth/token/info Get Token Info #
POST /oauth/token Get or Refresh an Access Token #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/procore:procore-authentication-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

procore-authentication-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Procore REST Authentication API
  version: v1.0/v2.0
  description: Merged from the per-resource OpenAPI documents Procore publishes through its developer portal (https://developers.procore.com/api/v1/resource_groups). Originals are kept verbatim in openapi/_original/resources/.
  x-source: https://developers.procore.com/api/v1/resource_groups
servers:
- url: https://api.procore.com
  description: Production
security:
- bearerAuth: []
tags:
- name: Authentication
paths:
  /oauth/authorize:
    x-compliance-level: full
    get:
      x-doc:
        visibility: public
        stage: ga
        exposure: public
      x-skip-snippet-generation: true
      summary: Grant App Authorization
      description: 'Creates and returns a temporary authorization code with 10 minute expiration. Note that all parameters listed below are required. This endpoint

        corresponds to the OAuth 2.0 authorization endpoint described in section 3.1 of the OAuth 2.0 RFC. See the Authentication Guide

        for additional information and authentication examples.'
      tags:
      - Authentication
      parameters:
      - name: response_type
        in: query
        description: Response type. Value should be `code` for server apps, `token` for client apps.
        required: true
        schema:
          type: string
          enum:
          - code
          - token
          example: code
      - name: client_id
        in: query
        description: Client ID you were assigned when you registered your application.
        required: true
        schema:
          type: string
          example: 76ba4c5c75c96f6087f58a4de10be6c00b29ea1ddc3b2022ee2016d1363e3a7c
      - name: redirect_uri
        in: query
        description: The URI that the user will be redirected to after they grant authorization to your application. For browser-based web applications, use a `https://` web address. For "headless" applications use `urn:ietf:wg:oauth:2.0:oob`.
        required: true
        schema:
          type: string
          example: http://localhost
      responses:
        '302':
          description: Redirect to the specified `redirect_uri`
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    format: int32
                  message:
                    type: string
                  fields:
                    type: string
                  reason:
                    description: A human-readable code providing additional detail on the cause of the error.
                    type: string
                  error:
                    description: Description of the error thrown.
                    type:
                    - string
                    - 'null'
                    example: Invalid Token
      x-rate-limit-enabled: true
      x-procore-kong-tags:
      - rate-limit:enabled
      operationId: grantAppAuthorization
  /oauth/revoke:
    parameters:
    - name: Procore-Company-Id
      in: header
      description: Unique company identifier associated with the Procore User Account.
      required: true
      schema:
        type: integer
    x-compliance-level: full
    post:
      x-doc:
        visibility: public
        stage: ga
        exposure: public
      summary: Revoke Token
      description: 'Revoke authorization of an access token. The request must contain the body data as form-data. The authorization server responds with HTTP status code 200 if the token has been revoked successfully

        or if the client submitted an invalid token. Note that the Revoke Token endpoint revokes both the Access Token and Refresh Token. The `client_secret` param is only required for confidential

        applications. Public applications using the implicit OAuth flow do not need to provide this parameter to revoke access tokens.'
      tags:
      - Authentication
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - token
              - client_id
              - client_secret
              properties:
                token:
                  description: Token
                  type: string
                  example: dbaf9757982a9e738f05d249b7b5b4a266b3a139049317c4909f2f263572c781
                client_id:
                  description: Client ID
                  type: string
                  example: 76ba4c5c75c96f6087f58a4de10be6c00b29ea1ddc3b2022ee2016d1363e3a7c
                client_secret:
                  description: Client Secret
                  type: string
                  example: 83414fdb340392acbd910f6d4f2091da007cb584fd3e872df109c9e7221e2d12
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    format: int32
                  message:
                    type: string
                  fields:
                    type: string
                  reason:
                    description: A human-readable code providing additional detail on the cause of the error.
                    type: string
                  error:
                    description: Description of the error thrown.
                    type:
                    - string
                    - 'null'
                    example: Invalid Token
      x-code-samples:
      - id: node_request
        mimeType: application/json
        title: Node.js
        content: "const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://login.procore.com/oauth/revoke',\n  headers: {'content-type': 'application/json'},\n  body: {\n    token: 'dbaf9757982a9e738f05d249b7b5b4a266b3a139049317c4909f2f263572c781',\n    client_id: '76ba4c5c75c96f6087f58a4de10be6c00b29ea1ddc3b2022ee2016d1363e3a7c',\n    client_secret: '83414fdb340392acbd910f6d4f2091da007cb584fd3e872df109c9e7221e2d12'\n  },\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
      - id: python_python3
        mimeType: application/json
        title: Python3
        content: 'import http.client


          conn = http.client.HTTPSConnection("login.procore.com")


          payload = "{\"token\":\"dbaf9757982a9e738f05d249b7b5b4a266b3a139049317c4909f2f263572c781\",\"client_id\":\"76ba4c5c75c96f6087f58a4de10be6c00b29ea1ddc3b2022ee2016d1363e3a7c\",\"client_secret\":\"83414fdb340392acbd910f6d4f2091da007cb584fd3e872df109c9e7221e2d12\"}"


          headers = { ''content-type'': "application/json" }


          conn.request("POST", "/oauth/revoke", payload, headers)


          res = conn.getresponse()

          data = res.read()


          print(data.decode("utf-8"))'
      - id: shell_curl
        mimeType: application/json
        title: Curl
        content: "curl --request POST \\\n  --url https://login.procore.com/oauth/revoke \\\n  --header 'content-type: application/json' \\\n  --data '{\"token\":\"dbaf9757982a9e738f05d249b7b5b4a266b3a139049317c4909f2f263572c781\",\"client_id\":\"76ba4c5c75c96f6087f58a4de10be6c00b29ea1ddc3b2022ee2016d1363e3a7c\",\"client_secret\":\"83414fdb340392acbd910f6d4f2091da007cb584fd3e872df109c9e7221e2d12\"}'"
      - id: csharp_httpclient
        mimeType: application/json
        title: C#
        content: "var client = new HttpClient();\nvar request = new HttpRequestMessage\n{\n    Method = HttpMethod.Post,\n    RequestUri = new Uri(\"https://login.procore.com/oauth/revoke\"),\n    Content = new StringContent(\"{\\\"token\\\":\\\"dbaf9757982a9e738f05d249b7b5b4a266b3a139049317c4909f2f263572c781\\\",\\\"client_id\\\":\\\"76ba4c5c75c96f6087f58a4de10be6c00b29ea1ddc3b2022ee2016d1363e3a7c\\\",\\\"client_secret\\\":\\\"83414fdb340392acbd910f6d4f2091da007cb584fd3e872df109c9e7221e2d12\\\"}\")\n    {\n        Headers =\n        {\n            ContentType = new MediaTypeHeaderValue(\"application/json\")\n        }\n    }\n};\nusing (var response = await client.SendAsync(request))\n{\n    response.EnsureSuccessStatusCode();\n    var body = await response.Content.ReadAsStringAsync();\n    Console.WriteLine(body);\n}"
      x-rate-limit-enabled: true
      x-procore-kong-tags:
      - rate-limit:enabled
      operationId: revokeToken
  /oauth/token/info:
    x-compliance-level: full
    get:
      x-doc:
        visibility: public
        stage: ga
        exposure: public
      summary: Get Token Info
      description: 'Return access token details. See the Authentication Guide

        for additional information and authentication examples.

        The request must contain the access token in the Authorization header: `Authorization: Bearer `'
      security:
      - bearerAuth: []
      tags:
      - Authentication
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  resource_owner_id:
                    type: integer
                    description: Resource owner ID
                    example: 1
                  scopes:
                    type: array
                    description: Scopes
                    items:
                      type: string
                    example:
                    - public
                  expires_in_seconds:
                    type: integer
                    description: Expiration time in seconds
                    example: 5378
                  application:
                    type: object
                    description: Application information
                    properties:
                      uid:
                        type: string
                        example: 31c385f56a9a3262789fcecab9c1d02b4bead2a56700b79cb1134bed9c276fbea757ada91a41a4502d3c9aec73aeff95
                  created_at:
                    type: integer
                    description: The integer value representing the time the access token was created.
                    example: 1440460991
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    format: int32
                  message:
                    type: string
                  fields:
                    type: string
                  reason:
                    description: A human-readable code providing additional detail on the cause of the error.
                    type: string
                  error:
                    description: Description of the error thrown.
                    type:
                    - string
                    - 'null'
                    example: Invalid Token
      x-code-samples:
      - id: node_request
        title: Node.js
        content: "const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://login.procore.com/oauth/token/info',\n  headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
      - id: python_python3
        title: Python3
        content: 'import http.client


          conn = http.client.HTTPSConnection("login.procore.com")


          headers = { ''Authorization'': "Bearer REPLACE_BEARER_TOKEN" }


          conn.request("GET", "/oauth/token/info", headers=headers)


          res = conn.getresponse()

          data = res.read()


          print(data.decode("utf-8"))'
      - id: shell_curl
        title: Curl
        content: "curl --request GET \\\n  --url https://login.procore.com/oauth/token/info \\\n  --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"
      - id: csharp_httpclient
        title: C#
        content: "var client = new HttpClient();\nvar request = new HttpRequestMessage\n{\n    Method = HttpMethod.Get,\n    RequestUri = new Uri(\"https://login.procore.com/oauth/token/info\"),\n    Headers =\n    {\n        { \"Authorization\", \"Bearer REPLACE_BEARER_TOKEN\" },\n    },\n};\nusing (var response = await client.SendAsync(request))\n{\n    response.EnsureSuccessStatusCode();\n    var body = await response.Content.ReadAsStringAsync();\n    Console.WriteLine(body);\n}"
      x-rate-limit-enabled: true
      x-procore-kong-tags:
      - rate-limit:enabled
      operationId: getTokenInfo
  /oauth/token:
    x-compliance-level: full
    post:
      x-doc:
        visibility: public
        stage: ga
        exposure: public
      summary: Get or Refresh an Access Token
      description: 'Used to acquire a new access token or refresh an existing access token. Certain parameter

        combinations and values are used depending on which scenario you are handling. See the individual

        parameter descriptions for additional information. This endpoint corresponds to the token endpoint

        described in section 3.2 of the OAuth 2.0 RFC. See the Authentication Guide

        for additional information and authentication examples.

        JavaScript applications cannot make this request to get the access token or refresh token.'
      tags:
      - Authentication
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - grant_type
              - client_id
              - client_secret
              properties:
                grant_type:
                  description: Use the value `authorization_code` when getting a new access token. Use `refresh_token` when refreshing an existing access token. Use `client_credentials` when using a Procore Service Account for authentication.
                  type: string
                  enum:
                  - authorization_code
                  - refresh_token
                  - client_credentials
                  example: authorization_code
                client_id:
                  description: Client ID you were assigned when you registered your application.
                  type: string
                  example: db0d63cfa7ac3ceed7166081542216ec99e12341300e5e879105e36bd76dbf63
                client_secret:
                  description: Client Secret you were assigned when you registered your application.
                  type: string
                  example: 0b57e8d87e35370307ba5f98ad456bd155cabacea56d49994afe083e2eb04b54
                code:
                  description: Value of the `authorization_code` retrieved from the `/oauth/authorize` call. Only required when getting a new access code.
                  type: string
                  example: 8957b84a67f6ae55ab79c9767836a0af30b7fb7e4c36b27434993123cce71ec7
                redirect_uri:
                  description: The URI that the user will be redirected to after they grant authorization to your application. For browser-based web applications, use a `https://` web address. For "headless" applications use `urn:ietf:wg:oauth:2.0:oob`.
                  type: string
                  example: http://localhost
                refresh_token:
                  description: The refresh token string. Only required when refreshing an access token.
                  type: string
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token:
                    type: string
                    description: Access token
                    example: dbaf9757982a9e738f05d249b7b5b4a266b3a139049317c4909f2f263572c781
                  token_type:
                    type: string
                    description: Token type
                    example: bearer
                  expires_in:
                    type: integer
                    description: Expires in (sec)
                    example: 5378
                  refresh_token:
                    type: string
                    description: Refresh token
                    example: 76ba4c5c75c96f6087f58a4de10be6c00b29ea1ddc3b2022ee2016d1363e3a7c
                  created_at:
                    type: integer
                    description: The integer value representing the time the access token was created.
                    example: 1484786897
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    format: int32
                  message:
                    type: string
                  fields:
                    type: string
                  reason:
                    description: A human-readable code providing additional detail on the cause of the error.
                    type: string
                  error:
                    description: Description of the error thrown.
                    type:
                    - string
                    - 'null'
                    example: Invalid Token
      x-code-samples:
      - id: node_request
        mimeType: application/json
        title: Node.js
        content: "const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://login.procore.com/oauth/token',\n  headers: {'content-type': 'application/json'},\n  body: {\n    grant_type: 'authorization_code',\n    client_id: 'db0d63cfa7ac3ceed7166081542216ec99e12341300e5e879105e36bd76dbf63',\n    client_secret: '0b57e8d87e35370307ba5f98ad456bd155cabacea56d49994afe083e2eb04b54',\n    code: '8957b84a67f6ae55ab79c9767836a0af30b7fb7e4c36b27434993123cce71ec7',\n    redirect_uri: 'http://localhost',\n    refresh_token: 'string'\n  },\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
      - id: python_python3
        mimeType: application/json
        title: Python3
        content: 'import http.client


          conn = http.client.HTTPSConnection("login.procore.com")


          payload = "{\"grant_type\":\"authorization_code\",\"client_id\":\"db0d63cfa7ac3ceed7166081542216ec99e12341300e5e879105e36bd76dbf63\",\"client_secret\":\"0b57e8d87e35370307ba5f98ad456bd155cabacea56d49994afe083e2eb04b54\",\"code\":\"8957b84a67f6ae55ab79c9767836a0af30b7fb7e4c36b27434993123cce71ec7\",\"redirect_uri\":\"http://localhost\",\"refresh_token\":\"string\"}"


          headers = { ''content-type'': "application/json" }


          conn.request("POST", "/oauth/token", payload, headers)


          res = conn.getresponse()

          data = res.read()


          print(data.decode("utf-8"))'
      - id: shell_curl
        mimeType: application/json
        title: Curl
        content: "curl --request POST \\\n  --url https://login.procore.com/oauth/token \\\n  --header 'content-type: application/json' \\\n  --data '{\"grant_type\":\"authorization_code\",\"client_id\":\"db0d63cfa7ac3ceed7166081542216ec99e12341300e5e879105e36bd76dbf63\",\"client_secret\":\"0b57e8d87e35370307ba5f98ad456bd155cabacea56d49994afe083e2eb04b54\",\"code\":\"8957b84a67f6ae55ab79c9767836a0af30b7fb7e4c36b27434993123cce71ec7\",\"redirect_uri\":\"http://localhost\",\"refresh_token\":\"string\"}'"
      - id: csharp_httpclient
        mimeType: application/json
        title: C#
        content: "var client = new HttpClient();\nvar request = new HttpRequestMessage\n{\n    Method = HttpMethod.Post,\n    RequestUri = new Uri(\"https://login.procore.com/oauth/token\"),\n    Content = new StringContent(\"{\\\"grant_type\\\":\\\"authorization_code\\\",\\\"client_id\\\":\\\"db0d63cfa7ac3ceed7166081542216ec99e12341300e5e879105e36bd76dbf63\\\",\\\"client_secret\\\":\\\"0b57e8d87e35370307ba5f98ad456bd155cabacea56d49994afe083e2eb04b54\\\",\\\"code\\\":\\\"8957b84a67f6ae55ab79c9767836a0af30b7fb7e4c36b27434993123cce71ec7\\\",\\\"redirect_uri\\\":\\\"http://localhost\\\",\\\"refresh_token\\\":\\\"string\\\"}\")\n    {\n        Headers =\n        {\n            ContentType = new MediaTypeHeaderValue(\"application/json\")\n        }\n    }\n};\nusing (var response = await client.SendAsync(request))\n{\n    response.EnsureSuccessStatusCode();\n    var body = await response.Content.ReadAsStringAsync();\n    Console.WriteLine(body);\n}"
      x-rate-limit-enabled: true
      x-procore-kong-tags:
      - rate-limit:enabled
      operationId: getOrRefreshAnAccessToken
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer