Source profileQuality 94/100

WYRE-AI/msp-claude-plugins/msp-claude-plugins/hudu/hudu/skills/api-patterns/SKILL.md

Hudu API Patterns

Hudu REST API fundamentals: x-api-key authentication, base URL and /api/v1/ structure, granular API key permission levels, UI-vs-API resource naming differences, query-parameter filtering, page-based pagination, the 300 req/min rate limit, and HTTP status/error semantics.

Source repository stars
42
Declared platforms
0
Static risk flags
1
Last source update
2026-08-28
Source checked
2026-08-28

Decision brief

What it does: where it fits

Hudu REST API fundamentals: x-api-key authentication, base URL and /api/v1/ structure, granular API key permission levels, UI-vs-API resource naming differences, query-parameter filtering, page-based pagination, the 300 req/min rate limit, and HTTP status/error semantics.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/hudu/hudu/skills/api-patterns"
    Safe inspection promptEditorial

    Inspect the Agent Skill "Hudu API Patterns" from https://github.com/WYRE-AI/msp-claude-plugins/blob/5005f73ba2f52cd299f58aa6bb79f4e70ae87103/msp-claude-plugins/hudu/hudu/skills/api-patterns/SKILL.md at commit 5005f73ba2f52cd299f58aa6bb79f4e70ae87103. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Anti-triggers

      IT Glue's request model — the other documentation platform here uses

      IT Glue's request model — the other documentation platform here usesA 403 on a password endpoint — that is Hudu's per-API-key passwordHudu tools missing from the client entirely, or a 401 before any call
    2. 02

      Authentication

      Hudu uses API key authentication via the x-api-key header:

      Hudu uses API key authentication via the x-api-key header:Required Headers: | Header | Value | Description | |--------|-------|-------------| | x-api-key | Your API key | Authentication token | | Content-Type | application/json | JSON content type |All API endpoints follow the pattern:
    3. 03

      API Key Authentication

      Hudu uses API key authentication via the x-api-key header:

      Hudu uses API key authentication via the x-api-key header:Required Headers: | Header | Value | Description | |--------|-------|-------------| | x-api-key | Your API key | Authentication token | | Content-Type | application/json | JSON content type |
    4. 04

      Environment Variables

      Review the “Environment Variables” section in the pinned source before continuing.

      Review and apply the “Environment Variables” source section.
    5. 05

      Base URL Pattern

      All API endpoints follow the pattern:

      All API endpoints follow the pattern:For Hudu Cloud instances:For self-hosted instances:

    Permission review

    Static risk signals and limitations

    Network access

    medium · line 42

    The documentation includes network, browsing, or remote request actions.

    export HUDU_BASE_URL="https://your-company.huducloud.com"

    Network access

    medium · line 51

    The documentation includes network, browsing, or remote request actions.

    https://[YOUR_DOMAIN]/api/v1/[resource]

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score94/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars42SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    WYRE-AI/msp-claude-plugins
    Skill path
    msp-claude-plugins/hudu/hudu/skills/api-patterns/SKILL.md
    Commit
    5005f73ba2f52cd299f58aa6bb79f4e70ae87103
    License
    Apache-2.0
    Collected
    2026-08-28
    Default branch
    main
    View the original SKILL.md

    Hudu API Patterns

    Overview

    The Hudu API is a RESTful JSON API that provides access to companies, assets, asset layouts, articles, asset passwords, websites, folders, procedures, and more. This skill covers authentication, query building, pagination, error handling, and performance optimization patterns.

    Anti-triggers

    • IT Glue's request model — the other documentation platform here uses a JSON:API envelope with data/attributes wrappers and its own pagination, against Hudu's flat JSON and x-api-key header. Use itglue-api-patterns. Request shapes do not transfer between them.
    • A 403 on a password endpoint — that is Hudu's per-API-key password toggle, not a bad key or an expired token, and the same key works everywhere else. Use hudu-passwords.
    • Hudu tools missing from the client entirely, or a 401 before any call succeeds — that is a gateway-connection problem; use shared-skills-wyre-gateway-troubleshooting.

    Authentication

    API Key Authentication

    Hudu uses API key authentication via the x-api-key header:

    GET /api/v1/companies
    x-api-key: YOUR_API_KEY
    Content-Type: application/json
    

    Required Headers:

    HeaderValueDescription
    x-api-keyYour API keyAuthentication token
    Content-Typeapplication/jsonJSON content type

    Environment Variables

    export HUDU_BASE_URL="https://your-company.huducloud.com"
    export HUDU_API_KEY="your-api-key-here"
    

    Base URL Pattern

    All API endpoints follow the pattern:

    https://[YOUR_DOMAIN]/api/v1/[resource]
    

    For Hudu Cloud instances:

    https://your-company.huducloud.com/api/v1/companies
    

    For self-hosted instances:

    https://hudu.yourcompany.com/api/v1/companies
    

    API Key Permission Levels

    Hudu API keys support granular permission controls:

    PermissionDescription
    Password AccessAllow or deny reading password values
    DELETE OperationsAllow or deny deletion of records
    IP WhitelistRestrict API key usage to specific IPs
    Company ScopeRestrict API key to specific companies

    Administrators configure these in Admin > API Keys when creating or editing a key.

    API Naming Differences

    Hudu's UI names differ from API endpoint names in several cases. This is critical to get right:

    Hudu UI NameAPI EndpointAPI Resource Name
    Company (label is customizable)/api/v1/companiescompany
    Password/api/v1/asset_passwordsasset_password
    Knowledge Base Article/api/v1/articlesarticle
    Process/api/v1/proceduresprocedure
    Asset/api/v1/assetsasset
    Asset Layout/api/v1/asset_layoutsasset_layout
    Website/api/v1/websiteswebsite
    Folder/api/v1/foldersfolder
    Activity Log/api/v1/activity_logsactivity_log
    Magic Dash/api/v1/magic_dashmagic_dash
    Network/api/v1/networksnetwork
    Relation/api/v1/relationsrelation

    Request and Response Envelope

    Hudu uses standard JSON (not JSON:API). Request and single-resource response bodies are wrapped in the singular resource key ({ "company": { ... } }); collections are wrapped in the plural key ({ "companies": [ ... ] }).

    See references/examples.md for full CRUD request/response examples.

    Filtering

    Query Parameter Filtering

    Hudu uses simple query parameters for filtering:

    GET /api/v1/companies?name=Acme
    GET /api/v1/companies?city=Springfield
    GET /api/v1/companies?id_in_integration=12345
    GET /api/v1/assets?company_id=1
    GET /api/v1/asset_passwords?company_id=1&name=Domain
    GET /api/v1/articles?company_id=1&name=backup
    

    Common Filter Parameters by Endpoint

    EndpointParametersDescription
    /companiesname, city, state, id_in_integration, websiteFilter companies
    /assetscompany_id, asset_layout_id, name, primary_serial, archivedFilter assets
    /asset_passwordscompany_id, name, slugFilter passwords
    /articlescompany_id, name, slugFilter articles
    /websitescompany_id, name, slugFilter websites
    /asset_layoutsnameFilter asset layouts
    /activity_logsuser_id, user_email, resource_id, resource_type, action_messageFilter logs

    Search Parameter

    Some endpoints support a search parameter for broader matching:

    GET /api/v1/companies?search=Acme
    

    Pagination

    Page-Based Pagination

    Hudu uses page-based pagination with the page query parameter:

    GET /api/v1/companies?page=1
    GET /api/v1/companies?page=2
    GET /api/v1/companies?page=3
    

    Pagination Details:

    ParameterDescriptionDefault
    pagePage number (1-based)1
    Results per pageFixed by Hudu25

    Detecting End of Pages

    When a page returns fewer than 25 results (or an empty array), you have reached the last page:

    async function fetchAllCompanies() {
      const allItems = [];
      let page = 1;
      let hasMore = true;
    
      while (hasMore) {
        const response = await fetch(
          `${baseUrl}/api/v1/companies?page=${page}`,
          { headers: { 'x-api-key': apiKey } }
        );
    
        const data = await response.json();
        const companies = data.companies || [];
        allItems.push(...companies);
    
        // If fewer than 25 results, we reached the last page
        hasMore = companies.length === 25;
        page++;
      }
    
      return allItems;
    }
    

    Rate Limiting

    Rate Limit Details

    Hudu enforces rate limits to ensure fair API usage:

    MetricLimit
    Requests per minute300

    Rate Limit Response

    When rate limited (HTTP 429):

    {
      "error": "Rate limit exceeded. Please wait before making more requests."
    }
    

    Retry Strategy

    async function requestWithRetry(url, options, maxRetries = 5) {
      for (let attempt = 0; attempt < maxRetries; attempt++) {
        try {
          const response = await fetch(url, options);
    
          if (response.status === 429) {
            const retryAfter = response.headers.get('Retry-After') || 60;
            const jitter = Math.random() * 5000;
            await sleep(retryAfter * 1000 + jitter);
            continue;
          }
    
          return response;
        } catch (error) {
          if (attempt === maxRetries - 1) throw error;
    
          // Exponential backoff with jitter
          const delay = Math.pow(2, attempt) * 1000 + Math.random() * 1000;
          await sleep(delay);
        }
      }
    }
    

    CRUD and Company Scoping

    Standard REST verbs: POST to the collection, GET on collection or /:id, PUT /:id for updates (send only the fields you're changing), DELETE /:id. DELETE requires explicit API key permission — not all keys can delete records. Several resources also expose /:id/archive and /:id/unarchive as PUT verbs rather than an archived field.

    Most child resources are filtered by company rather than nested under it:

    GET /api/v1/assets?company_id=123
    GET /api/v1/asset_passwords?company_id=123
    GET /api/v1/articles?company_id=123
    GET /api/v1/websites?company_id=123
    GET /api/v1/assets?company_id=123&asset_layout_id=5
    

    See references/examples.md for full request/response bodies per verb.

    Error Handling

    HTTP Status Codes

    CodeMeaningAction
    200SuccessProcess response
    201CreatedResource created successfully
    204No ContentDelete successful
    400Bad RequestCheck request format and required fields
    401UnauthorizedVerify API key
    403ForbiddenCheck API key permissions (e.g., password access, DELETE)
    404Not FoundResource doesn't exist or wrong base URL
    422Unprocessable EntityValidation errors (missing/invalid fields)
    429Rate LimitedImplement backoff, wait 60 seconds
    500Server ErrorRetry with backoff

    Error Response Format

    Errors come back as either a single error string or an errors array of strings — handle both. See references/examples.md for the exact shapes and a status-code dispatch helper.

    Gotchas

    • 403 is about key scope, not key validity. Password access, DELETE, IP whitelist, and company scope are all per-key toggles; a working key can still 403 on one resource.
    • 404 often means a wrong HUDU_BASE_URL or a missing /api/v1/ prefix, not a missing record.
    • The UI name is not the API name. Passwords are asset_passwords; Processes are procedures.
    • Page size is fixed at 25 and there is no total count — you only know you've finished when a page returns fewer than 25 items.

    Best Practices

    1. Paginate large results - Loop through pages until fewer than 25 results returned
    2. Implement retry logic - Handle rate limits (429) and transient errors (500)
    3. Cache reference data - Asset layouts rarely change; cache them
    4. Use filters - Narrow results server-side rather than client-side filtering
    5. Monitor rate limits - Stay under 300 requests per minute
    6. Scope by company - Always filter by company_id when possible

    Related Skills

    Frequently asked questions

    What to verify before installation and use

    What does the Hudu API Patterns source document cover?

    Hudu REST API fundamentals: x-api-key authentication, base URL and /api/v1/ structure, granular API key permission levels, UI-vs-API resource naming differences, query-parameter filtering, page-based pagination, the 300 req/min rate limit, and HTTP status/error semantics.

    How do I install Hudu API Patterns?

    The source record exposes this install command: npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/hudu/hudu/skills/api-patterns". Inspect the command and pinned source before running it.

    Which permission-related actions were detected?

    Static rules flagged network in the source; the page lists the matching lines and excerpts.

    Alternatives

    Compare before choosing

    Computed 10045,960

    coreyhaines31/marketingskills

    ab-testing

    When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program

    Computed 100147

    oaustegard/claude-skills

    featuring

    Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre

    Computed 1009

    event4u-app/agent-config

    existing-ui-audit

    Use BEFORE writing or editing any non-trivial UI — inventories components, design tokens, shadcn primitives, and reusable patterns into state.ui_audit. Hard gate for the ui directive set.

    Computed 1009

    event4u-app/agent-config

    fe-design

    Frontend design heuristics — and, outside the ticket engine, the loop that applies them: audit, brief, inventory, build, review. Use when building or changing any UI, not only when planning one.