Habu · OpenAPI Overlay 1.0.0

API Evangelist enhancements — Habu Clean Room API

7 actions 7 updates update extends openapi/habu-clean-room-api-openapi.yml
Published by Habu Authored by the provider (searched).
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelistx-rate-limitx-undeclared-responsesx-token-requestx-observed-envelopex-stabilityx-agent-guidancex-enrichment-gaps

Targets 6

$.info
$.servers
$.paths['/cleanroom-questions/{cleanroomQuestionId}/cleanroom-question-runs'].post
$.components.securitySchemes.application
$.components.schemas.ReturnObject
$.tags[?(@.name=="Internal")]

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements — Habu Clean Room API
  version: 1.0.0
  x-description: Overlay of the API Evangelist enrichment findings onto the published Habu Clean Room OpenAPI.
    It adds provenance, the runtime semantics the contract omits (rate limits on run creation, the token-issuance
    ceiling, the request-id header, the richer live error envelope) and stability annotations on the Internal
    tag. Applies to openapi/habu-clean-room-api-openapi.yml; the original is never mutated.
extends: openapi/habu-clean-room-api-openapi.yml
actions:
- target: $.info
  description: Stamp provenance and the acquisition context.
  update:
    x-apievangelist:
      profile: https://apis.io/provider/habu
      generated: '2026-08-12'
      method: searched
      spec_source: https://storage.googleapis.com/lr-tech-docs-resources/Files/clean-room/api/liveramp-clean-room-api-specification.yml
      docs: https://developers.liveramp.com/clean-room-api
      note: Habu was acquired by LiveRamp in January 2024. The API is still served from Habu infrastructure
        (api.habu.com) and the console is still console.habu.com, while the documentation moved to developers.liveramp.com.
- target: $.servers
  description: Record that the declared server was verified live.
  update:
  - url: https://api.habu.com/v1/
    description: External APIs for Customer Integration
    x-verified:
      date: '2026-08-12'
      evidence: GET https://api.habu.com/v1/health → 200 {"status":"UP","statusCode":200,"description":"External
        API is available","version":"v1.0.0"}
- target: $.paths['/cleanroom-questions/{cleanroomQuestionId}/cleanroom-question-runs'].post
  description: Document the published 20-per-hour rate limit and the undeclared 429 on question-run creation.
  update:
    x-rate-limit:
      limit: 20
      window: hour
      scope: per API user, organization and IP address
      enforcement: token bucket
      docs: https://developers.liveramp.com/clean-room-api/reference/api-limits
    x-undeclared-responses:
    - 429 Too Many Requests — documented at https://developers.liveramp.com/clean-room-api/reference/api-limits
      but absent from this operation's responses block.
- target: $.components.securitySchemes.application
  description: Add the token-request mechanics the securityScheme cannot express.
  update:
    x-token-request:
      method: POST
      content_type: application/x-www-form-urlencoded
      body: grant_type=client_credentials
      authorization: Basic base64(client_id:client_secret)
      response_fields:
      - accessToken
      - tokenType
      - expiresIn
      - expiresAt
      token_lifetime_seconds: 43200
      issuance_limit: 2 tokens per 24-hour period per API user
      docs: https://developers.liveramp.com/clean-room-api/reference/request-an-access-token
- target: $.components.schemas.ReturnObject
  description: Record the richer error envelope observed live, which the declared schema understates.
  update:
    x-observed-envelope:
      fields:
      - status
      - code
      - timestamp
      - message
      - details
      example: '{"status":"UNAUTHORIZED","code":401,"timestamp":"12-08-2026 05:17:12","message":"Full
        authentication is required to access this resource","details":"uri=/v1/cleanrooms"}'
      observed: '2026-08-12'
      note: The spec declares only {code, message}; the live API returns five fields and code is an integer,
        not a string.
- target: $.tags[?(@.name=="Internal")]
  description: Flag the Internal tag as outside the supported external contract.
  update:
    x-stability: internal
    x-agent-guidance: Do not call operations tagged Internal from an agent — LiveRamp states they are
      not part of the supported external customer contract and may change without notice.
- target: $.info
  description: Record the cross-cutting gaps found during enrichment.
  update:
    x-enrichment-gaps:
    - No Idempotency-Key on any of the 151 operations — retried run creation can duplicate work.
    - No rate-limit response headers; the 429 is the only runtime signal.
    - No request or response examples anywhere in the spec.
    - Only 11 of 151 operations accept limit/offset; the rest are unpaginated.
    - No operation declares 429 despite a documented rate limit.