acc-api-setup

acc-api-setup is a skill for Claude Code from Utopia5327/claude-plugin-for-revit-bim. It costs 163 tokens per session (2,410 once invoked), scanned B, original, MIT.

A setup workflow for connecting Python programs to Autodesk Platform Services, the APIs behind Autodesk Construction Cloud. It configures OAuth2 login, account discovery, and a reusable API client.

In plain words
What is it for?
Use it to configure server-to-server access for automation and reporting, or user-authorised access for personal ACC content, while keeping credentials in environment variables.
Why use it?
API scripts cannot access ACC data safely without registered-app credentials, the right login flow, and the correct hub and project identifiers. This setup prepares those pieces before other automation runs.

Skill for Claude Code

Written for Claude Code: $ARGUMENTS substitution.

Part of the revit-bim plugin — 25 skills, 3 agents, 2 hooks shipped together

Good fit Use it to configure server-to-server access for automation and reporting, or user-authorised access for personal ACC content, while keeping credentials in environment variables.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/utopia5327/claude-plugin-for-revit-bim/acc-api-setup
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add Utopia5327/claude-plugin-for-revit-bim --skill acc-api-setup
Clone the repo
git clone --depth 1 https://github.com/Utopia5327/claude-plugin-for-revit-bim

Made for: Claude Code.

Or install revit-bim, the plugin that ships this one along with the rest of its 25 skills, 3 agents, 2 hooks.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for acc-api-setup

README.md
[![agentmods](https://agentmods.dev/badge/skills/utopia5327/claude-plugin-for-revit-bim/acc-api-setup.svg)](https://agentmods.dev/skills/utopia5327/claude-plugin-for-revit-bim/acc-api-setup)
Your own site
<a href="https://agentmods.dev/skills/utopia5327/claude-plugin-for-revit-bim/acc-api-setup"><img src="https://agentmods.dev/badge/skills/utopia5327/claude-plugin-for-revit-bim/acc-api-setup.svg" alt="Measured on agentmods" height="20"></a>
Per session 163 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,410 The whole file, excluding the scripts and references it only reads on demand.
Security scan B 2 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00163 $0.02410
Opus 5 $0.00081 $0.01205
Sonnet 5 $0.00033 $0.00482
Haiku 4.5 $0.00016 $0.00241

Measured 7d ago against content hash 131b05f21540, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-07, from the pricing page.

Security

Grade B, and why

acc-api-setup scanned grade B with 2 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 7d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Sends data to an external URLmediumData exfiltration

A POST to an outside endpoint may be telemetry or may be exfiltration; either way the mod talks to somewhere, and you should know where.

resp = requests.post( "https://developer.api.autodesk.com/authentication/v2/token",

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

resp = requests.post(
skills/acc-api-setup/SKILL.md · 276 lines

How it starts

The opening of the file, as written. The whole thing — 276 lines — stays where its author put it; the contents beside it link to each section on GitHub.

ACC / APS API Setup & Authentication

Set up Python access to Autodesk Construction Cloud for:

"$ARGUMENTS"

Prerequisites

Before writing any code, the user needs:

  1. An APS app registered at APS Developer Portal
  2. A Client ID and Client Secret from their app
  3. The app provisioned to their ACC account (ACC Admin → Apps & Integrations → Custom Integrations)
  4. Python 3.8+ with requests installed (pip install requests)

Ask the user which flow they need:

  • 2-legged (server-to-server, no user login) — for automation scripts, reporting, data extraction
  • 3-legged (user authorises in browser) — for user-specific data: issues, RFIs, personal ACC content

Script 1: 2-Legged Token (Client Credentials — most common for automation)

import os
import requests
import base64
import time

# ── Configuration — use environment variables, never hardcode secrets ─────────
CLIENT_ID     = os.environ.get("APS_CLIENT_ID", "YOUR_CLIENT_ID")
CLIENT_SECRET = os.environ.get("APS_CLIENT_SECRET", "YOUR_CLIENT_SECRET")

# Scopes for typical ACC read/write operations
SCOPES = "data:read data:write account:read"

APS_AUTH_URL = "https://developer.api.autodesk.com/authentication/v2/token"
# ─────────────────────────────────────────────────────────────────────────────

class APSClient:
    """Reusable APS client that auto-refreshes the 2-legged token."""

    def __init__(self, client_id, client_secret, scopes):
        self.client_id     = client_id
        self.client_secret = client_secret
        self.scopes        = scopes
        self._token        = None
        self._expires_at   = 0

    def _credentials_header(self):
        """Base64-encode client_id:client_secret for Basic auth (OAuth2 v2)."""
        creds = base64.b64encode(
            (self.client_id + ":" + self.client_secret).encode()
        ).decode()
        return "Basic " + creds

    def get_token(self):
        """Return a valid access token, refreshing if needed."""
        if self._token and time.time() < self._expires_at - 60:
            return self._token

        resp = requests.post(
            APS_AUTH_URL,
            headers={
                "Authorization": self._credentials_header(),
                "Content-Type":  "application/x-www-form-urlencoded",
            },
            data={
                "grant_type": "client_credentials",
                "scope":      self.scopes,
            }
        )
        resp.raise_for_status()
        data = resp.json()
        self._token      = data["access_token"]
        self._expires_at = time.time() + data["expires_in"]
        return self._token

    def headers(self):
        """Return headers dict ready to pass to any APS API call."""
        return {
            "Authorization": "Bearer " + self.get_token(),
            "Content-Type":  "application/json",
        }

    def get(self, url, params=None):
        r = requests.get(url, headers=self.headers(), params=params)
        r.raise_for_status()
        return r.json()

    def post(self, url, payload):
        r = requests.post(url, headers=self.headers(), json=payload)
        r.raise_for_status()
        return r.json()

    def patch(self, url, payload):
        r = requests.patch(url, headers=self.headers(), json=payload)
        r.raise_for_status()
        return r.json()


# ── Usage example ─────────────────────────────────────────────────────────────
if __name__ == "__main__":
    client = APSClient(CLIENT_ID, CLIENT_SECRET, SCOPES)
    print("Token acquired:", client.get_token()[:20] + "...")

Read the full file on GitHub · 276 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 7d ago First seen · 276 lines · 163 tokens per session scan B 131b05f21540

Subscribe to this mod's changes

acc-api-setup is a skill published in the GitHub repository Utopia5327/claude-plugin-for-revit-bim (6 stars, last pushed 6mo ago), licensed MIT. It adds 163 tokens to every session and 2,410 once invoked, about $0.0008 per session on Opus 5. A static security scan graded it B with 2 findings (sends data to an external url, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.