Dotfile · OpenAPI Overlay 1.0.0
API Evangelist enhancements for the Dotfile API
10 actions
10 updates
documentation
extends
openapi/_original/dotfile-openapi.json
Generated by API Evangelist
Written by API Evangelist tooling for Dotfile's API. It is a proposal applied on top of the contract, not a document Dotfile publishes.
What the actions change
titlex-apievangelist-slugx-apievangelist-reviewedx-original-titlex-discoverycontacttermsOfServicex-privacy-policy
Targets 4
$.info
$.servers
$.components.securitySchemes.DotfileAPIKey
$
OpenAPI Overlay
overlay: 1.0.0
info:
title: API Evangelist enhancements for the Dotfile API
version: 1.0.0
extends: openapi/_original/dotfile-openapi.json
x-provenance:
generated: '2026-08-17'
method: generated
source: >-
Enhancements derived from Dotfile's own published documentation
(docs.dotfile.com/reference/{overview,authentication,status-codes,filtering-sorting-and-pagination,api-release-changes,webhooks-guide})
and from one live unauthenticated probe of https://api.dotfile.com/v1/ping on 2026-08-17. Applied as an
Overlay so the harvested specification is never mutated.
note: >-
Every action below adds information Dotfile publishes SOMEWHERE but not in the OpenAPI. Nothing here
invents behaviour. The largest gaps this overlay records are: no error response schema anywhere in the
document, no 401/403/429/500 declared on any operation, no rate-limit headers, and no idempotency contract.
actions:
- target: $.info
description: Name the document, cite the discovery path, and carry the API Evangelist assessment.
update:
title: Dotfile API
x-apievangelist-slug: dotfile
x-apievangelist-reviewed: '2026-08-17'
x-original-title: "⚙️ API specifications"
x-discovery:
well_known: https://docs.dotfile.com/.well-known/api-catalog
standard: RFC 9727
service_desc: https://docs.dotfile.com/openapi/%EF%B8%8F-api-specifications.json
note: >-
The specification is publicly downloadable but effectively unlisted — the docs host returns an HTML
shell for /openapi.json and /openapi.yaml, and the ReadMe project has its OpenAPI download privacy set
to "admin". The only anonymous path to it is the api-catalog linkset.
contact:
name: Dotfile Support
email: support@dotfile.com
url: https://docs.dotfile.com/reference/getting-help
termsOfService: https://www.dotfile.com/terms
x-privacy-policy: https://www.dotfile.com/privacy
x-status-page: https://status.dotfile.com/
x-changelog: https://docs.dotfile.com/changelog
x-trust-center: https://trust.dotfile.com/
- target: $.servers
description: >-
Record the base URL Dotfile documents. The harvested servers[] entry is https://api.dotfile.com with the
/v1 carried in every path; the reference states the base URL as https://api.dotfile.com/v1. Both are
correct — this annotates rather than replaces, because rewriting servers[] would double the /v1.
update:
- url: https://api.dotfile.com
description: Production environment
x-documented-base-url: https://api.dotfile.com/v1
x-transport: HTTPS only; plain HTTP requests fail
x-environments: none — no sandbox or test host exists; environment separation is a separate workspace
- target: $.components.securitySchemes.DotfileAPIKey
description: Fill in the key format and the operational rules Dotfile documents on its authentication page.
update:
description: >-
Workspace API key in the X-DOTFILE-API-KEY header. Format dotkey.<secret>.<identifier>. Scoped to one
workspace and carries the full permissions of the API within it — there is no read-only key and no
sandbox variant. Shown once at creation and unrecoverable afterwards; the console then shows only an
11-character hint. Rotation means create, cut over, revoke — a secret cannot be changed in place. Up to
50 keys per workspace. Each key carries an optional IP allowlist (addresses or CIDR ranges, IPv4/IPv6);
once populated, a request from any other address returns 403.
x-docs: https://docs.dotfile.com/reference/authentication
x-key-prefix: dotkey.
x-max-keys-per-workspace: 50
x-ip-allowlist: true
x-read-only-key: false
- target: $
description: >-
Declare the tags the operations already use. The harvested document tags 100 of 100 operations but leaves
the root tags[] array EMPTY, so no tag carries a name or description at the document level.
update:
tags:
- name: Ping
description: Key and connectivity test.
- name: Cases
description: The case — one customer under verification, and the unit a compliance decision is recorded against.
- name: Companies
description: Legal entities on a case, of type main or affiliated.
- name: Individuals
description: Natural persons on a case.
- name: Company data
description: Registry search, profile fetch, legal forms, countries and document orders.
- name: Checks
description: Generic check listing and deletion across all nine check types.
- name: AML check
description: Sanctions, PEP and adverse-media screening, with hit-level review and ongoing monitoring.
- name: Document check
description: Collect and decide on documents from companies and individuals.
- name: ID Document check
description: Automated extraction, comparison and validation of an identity document.
- name: ID Verification check
description: Liveness identity verification against a vendor-hosted flow.
- name: eKYC check
description: Electronic KYC against data sources, returning trust and fraud signals.
- name: Electronic Signature check
description: eSignature against a document template.
- name: Fraud database check
description: Fraud-record search on an individual or company. Requires workspace enablement.
- name: Online Reputation check
description: Automated online-reputation analysis of a company.
- name: Company Monitoring check
description: Ongoing company monitoring. Read-only over the API; reviewed in the console.
- name: Templates
description: The rules deciding which checks are created, and on which entities.
- name: Client portal
description: Hosted white-label collection surface, and its wait steps.
- name: Tables
description: Workspace-defined reference tables and their entries.
- name: Custom properties
description: Workspace-defined properties per entity type.
- name: Tags
description: Workspace tags and their attachment to cases.
- name: Notes
description: Notes and comments on a case.
- name: Files
description: Upload (returning an upload_ref) and download.
- name: Activities
description: The workspace audit trail.
- name: Users
description: Workspace users, active and suspended.
- name: Webhooks
description: Webhook endpoint registration and delivery logs.
- name: Routines
description: Autonomy agent routine triggering.
- target: $
description: >-
Record the cross-cutting runtime semantics the specification omits entirely. These are the facts an agent
needs at call time and cannot get from the contract as published.
update:
x-conventions:
artifact: conventions/dotfile-conventions.yml
pagination:
style: page-number
params: [page, limit]
defaults: {page: 1, limit: 20}
max_limit: 100
exceptions: {GET /v1/webhook-logs: 50}
response_meta: {field: pagination, keys: [page, limit, count]}
filtering:
style: field.operator=value
combination: AND
operators: [eq, not_eq, lt, lte, gt, gte, like, ilike, in, not_in, array_contains, array_not_contains, array_overlap]
default_operator: {scalar: eq, array: array_contains}
gotcha: comma-separated values are not trimmed
sorting:
param: sort
suffixes: ['.asc', '.desc']
multi_field: comma-separated, left to right
idempotency:
supported: false
note: >-
No Idempotency-Key header or parameter exists. A retried POST /v1/cases can create a duplicate case.
The nearest mitigation is the caller-supplied external_id, which is accepted in place of the case id
on read, so a client can detect a duplicate after the fact.
request_id_header: null
identifiers: UUID v4 with no type prefix; templates also addressable by template_key
- target: $
description: Record the published rate limits, which appear nowhere in the specification.
update:
x-rate-limits:
artifact: rate-limits/dotfile-rate-limits.yml
docs: https://docs.dotfile.com/reference/status-codes
scope: per workspace API key
read: {limit: 800, window: 1m, burst: 200, methods: [GET]}
write: {limit: 300, window: 1m, burst: 100, methods: [POST, PATCH, DELETE]}
status_on_exhaustion: 429
response_headers: []
retry_after: false
note: >-
No RateLimit-*, X-RateLimit-* or Retry-After header is documented, and none could be observed because
api.dotfile.com returns 401 to every unauthenticated request. An agent has no runtime budget signal.
- target: $
description: >-
Record the error envelope and the four statuses documented in prose but declared on ZERO operations. The
specification declares no error schema at all, so this is the only machine-readable statement of the shape.
update:
x-error-envelope:
artifact: errors/dotfile-problem-types.yml
media_type: application/json
rfc9457: false
schema:
type: object
required: [status_code, timestamp, code, message]
properties:
status_code: {type: integer}
timestamp: {type: string, format: date-time}
code: {type: string}
message: {type: string}
observed:
request: GET https://api.dotfile.com/v1/ping with no API key
date: '2026-08-17'
status: 401
body: '{"status_code":401,"timestamp":"2026-08-17T13:42:05.699Z","code":"UNAUTHORIZED","message":"Missing workspace API key in Header X-DOTFILE-API-KEY"}'
undeclared_statuses:
- {status: 401, code: UNAUTHORIZED, retryable: false, declared_on_operations: 0}
- {status: 403, code: FORBIDDEN, retryable: false, declared_on_operations: 0, cause: caller IP outside the key's allowlist}
- {status: 429, code: TOO_MANY_REQUESTS, retryable: true, declared_on_operations: 0}
- {status: 500, code: INTERNAL_SERVER_ERROR, retryable: true, declared_on_operations: 0}
quota_as_400:
note: >-
Workspace quota exhaustion is returned as 400 with "Limit reached. Contact us at support@dotfile.com
to lift all limits." on 9 operations. It is NOT retryable, despite sharing a status with validation
errors — a client that retries 400s selectively must inspect the message.
ambiguous_code:
code: CASE_REPORT_RENDER_FAILED
note: Returned as a non-retryable 400 and a retryable 502 by the same operation, so the code alone does not determine retry behaviour.
- target: $
description: >-
Record the event surface. This is OpenAPI 3.0.0, which has no `webhooks` root object, and Dotfile publishes
no AsyncAPI — so 46 real events are otherwise invisible to a machine reading the contract.
update:
x-webhooks:
artifact: asyncapi/dotfile-webhooks.yml
docs: https://docs.dotfile.com/reference/webhooks-guide
asyncapi_published: false
event_count: 46
families: {Case: 17, CaseReport: 1, Note: 3, NoteComment: 3, Individual: 6, Company: 6, Check: 6, DocumentOrder: 2, AutonomyChatRun: 2}
key_event: Check.ReviewNeeded
signature_verification: false
signature_note: >-
No signing secret, HMAC header or replay guard is published. A receiver cannot verify that a delivery
came from Dotfile and must re-read state over the API before acting.
max_webhooks_per_workspace: 50
log:
operation: webhook-log-get-many
retention_days: 30
sub_event_note: >-
Case.Updated, Individual.Updated and Company.Updated always carry a sub_event naming what changed;
switching on `event` alone collapses every property change into one case.
cascade: Deleted events do not fire the deleted event of sub-entities.
- target: $
description: Record the lifecycle and deprecation posture, none of which is in the specification.
update:
x-lifecycle:
artifact: lifecycle/dotfile-lifecycle.yml
versioning: {scheme: uri-path, current: v1}
release: continuous, zero-downtime, no maintenance window
changelog: https://docs.dotfile.com/changelog
deprecation_policy: https://docs.dotfile.com/reference/api-release-changes
breaking_change_notice: at least one month
sunset_header: false
deprecated_operations_in_spec: 0
deprecated_properties:
- {property: template_id, on: case, replacement: template.key}
- {property: assignee_id, on: case, replacement: assignee.id}
- {parameter: property_origin, replacement: data_lineage, removed: '2026-08-14'}
consumer_warning: >-
Dotfile explicitly warns that an integration generating a validation schema from this specification and
rejecting unknown fields will break on changes Dotfile classifies as NON-breaking. Tolerate unknown
properties and unknown enum values.
- target: $
description: Record that there is no sandbox — an absence a consumer must plan around before writing a line of code.
update:
x-sandbox:
artifact: sandbox/dotfile-sandbox.yml
available: false
test_key_prefix: null
test_values: []
note: >-
Quoting Dotfile's authentication page: "There is no read-only key and no sandbox variant." Environment
separation is a separate workspace, provisioned by Dotfile. Every check dispatches to a paid
third-party vendor, so there is nothing to simulate. GET /v1/ping is the only zero-side-effect call.