Capability gold set

Every edge on apis.io/capabilities/ is produced by a classifier that maps an API's tag to a business capability. This 39-item set is what decides whether that classifier is right. It is published so the labels can be argued with.

Each label was assigned by reading the item's operations and schema names — never the tag string, and never the OpenAPI title, which is actively misleading (see below). 15 of 39 labels are ABSTAIN: a set that forces a mapping teaches the classifier to guess.

39 labels
12 deliberate homographs
3 title traps
75.0% precision
9/12 homographs resolved
Calibration is the headline metric, not precision. The lexical baseline this replaced scored 12.5% precision — but its real defect was that confidence carried no information: it was right 20% of the time when it said 1.0, and 0% when it said 0.5. Anti-correlated. No threshold could turn that into something usable. Precision alone would never have caught it.

Calibration

Does a stated confidence mean what it says?

statednactually rightgap
0.6850%-10%
0.7580%+10%
0.8580%+0%
0.92100%+10%
1.04100%+0%

Precision at threshold

Where to cut. Only edges at ≥ 0.7 are published.

thresholdedgesprecision
≥ 0.71687.5%
≥ 0.81190.9%
≥ 0.96100.0%

The three-way homograph

The centrepiece. Positions means job positions on Workday (BC-300), portfolio positions on FactSet (BC-1380), and an IAM/device artifact on AWS (abstain). Any method that maps a tag string without reading the vendor's operations must get at least two of the three wrong — and a fan-out filter cannot help, because each one is specific. It is specific to the wrong sense.

Title traps

refine-openapis builds each split file's title by joining the source spec's title to the tag name, so titles carry business nouns belonging to a different tag: PeopleSoft … Accounts Payable Employees API. The title is the least reliable field the classifier is given, and these items exist to catch a classifier that reads it.

Every label

Shaded rows are where the classifier disagreed with the label.

itemgoldclassifierconfverdictwhy this label
workday::CandidatesBC-300BC-3000.95correctgetCandidates / Candidate schema — recruiting.
workday::Job PostingsBC-300BC-3000.92correctgetJobPostings / JobPosting schema.
workday::Leave of AbsenceBC-300BC-3000.75correctrequestLeaveOfAbsence / LeaveOfAbsenceRequest.
workday::Compensation PlansBC-300BC-3000.95correctrequestCompensationChange / CompensationGrade.
oracle-fusion::AbsencesBC-300BC-3000.72correctlistAbsences / createAbsence / Absence schema.
peoplesoft::Employeestitle trapBC-300BC-3000.72correctlistEmployees / getEmployee — HCM. The TITLE says "Accounts Payable Employees API". A title-reading classifier maps this to finance. The operations do not.
peoplesoft::General LedgerBC-200BC-2000.92correctlistJournalEntries — financial management.
peoplesoft::Accounts PayableBC-200BC-2000.85correctlistVouchers — payables.
oracle-fusion::Accounts Receivabletitle trapBC-200BC-2000.95correctlistReceivablesInvoices / listReceipts / ReceivablesInvoice. Title carries "Absences" from the source spec; the operations are unambiguous receivables.
stripe::PaymentsBC-1340BC-13400.7correctgetPaymentIntents / payment_method — the cleanest true positive in the set.
stripe::ChargesBC-1340BC-13400.7correctPostCharges / PostChargesChargeRefundsRequest / dispute close.
bloomberg-emsx::OrdersBC-1370BC-13700.95correctcreateOrder / modifyOrder on Bloomberg Execution Management — capital markets TRADING, not procurement or e-commerce orders.
factset::PositionshomographBC-1380BC-13700.6wrong"List all open positions of a portfolio" / PostPortfolioPositionClosedListRequest — portfolio positions. Capital markets operations, NOT job positions.
servicenow::Trouble TicketBC-430BC-6000.7wrongcreateTroubleTicket / TroubleTicket — customer service.
servicenow::Catalog ItemsBC-600BC-6000.8correctlistCatalogItems — IT service catalogue.
datadog::AuditBC-600ABSTAINmissedListAuditLogs / AuditLogsEventAttributes — IT observability, not internal audit.
cloudflare::AccountshomographBC-600BC-6000.6correct740 operations — account details, IP address management, zero-trust gateway. "Accounts" here is a TENANT, not a bank account and not accounting.
citrix::PolicieshomographBC-600BC-6000.6correctdeployPolicy on a NetScaler application delivery controller — network policy. NOT insurance policies, which is what the banking frame invites.
workday::PositionshomographBC-300BC-3000.8correctgetPositions / Position schema on the Staffing API — JOB positions. One third of the three-way `Positions` homograph.
amazon-web-services::PositionshomographABSTAINABSTAINcorrectThird of the three-way. One operation, amazonWebServicesUpdatePosition, under an IAM Access Analyzer description, no schemas. Neither trading nor staffing, and there is not enough here to name any capability. ABSTAIN is correct.
amazon-web-services::ClaimshomographABSTAINABSTAINcorrectClaimDevicesByClaimCode — IoT device claiming. NOT insurance or healthcare claims. Context is one operation with no schemas; abstain.
jupyter-notebook::ProxyhomographABSTAINABSTAINcorrectgetProxyTable / addProxyRoute / ProxyRoute — HTTP proxy routing in a kernel gateway. NOT proxy voting, which is what a capital-markets frame invites.
salesforce::Benefitshomograph title trapABSTAINBC-4200.75wrong — should abstainOne operation, MemberBenefits, inside the Bulk API 2.0 spec, title "Abort Benefits API". Could be HCM benefits or insurance member benefits; the context cannot tell. Abstain — this is precisely where a confident guess is worse than nothing.
stripe::CapabilitieshomographABSTAINABSTAINcorrectGetAccountsAccountCapabilities — Stripe's account "capabilities" (which payment methods an account may use). A pure lexical collision with this whole exercise.
factset::AlerthomographABSTAINABSTAINcorrect/alerting/prices/basic/alert/list — price alerting plumbing. The lexical baseline put `Alert` on Financial Crime Management; on a market-data vendor it is a notification feature. Abstain.
adobe-suite::Ordershomograph relabelledBC-4240BC-42400.65correctcreateOrderUsingPOST / OrderLineItemDto / Subscription / AutoRenewal — reseller product orders in a partner marketplace. Same tag as bloomberg-emsx::Orders, entirely different capability. RELABELLED from BC-410 Sales Management: the first label was written when the frame was Cross-Industry + Banking only, so Subscription Lifecycle Management did not exist as an option. Once Software & Technology joined the frame the classifier chose BC-4240, which the `Subscription` and `AutoRenewal` schemas support better than Sales. The classifier beat the gold label here.
salesforce::AbortABSTAINABSTAINcorrectAbortaJobQuery / CloseorAbortaJob — bulk job control.
salesforce::AsyncABSTAINABSTAINcorrectToolingRunTestsAsync — a fragment tag, not a resource.
factset::AsynchABSTAINABSTAINcorrectrequest-files / check-status / get-files — async job plumbing.
datadog::AddABSTAINABSTAINcorrectCreateDashboardListItems, CreateFastlyService, AddUserToRole — a verb fragment holding three unrelated operations. No single capability exists to map it to.
stripe::AttachABSTAINBC-13400.65wrong — should abstainpostPaymentMethodsPaymentMethodAttach — one verb fragment off the payments API.
slack::AuthABSTAINABSTAINcorrectauthTest / authRevoke — authentication plumbing.
slack::BookmarksABSTAINABSTAINcorrectAdd/Edit/List Bookmark — a chat product feature, no business capability.
github::EmojisABSTAINABSTAINcorrectemojis/get. If anything maps this, calibration is broken.
github::GitignoreABSTAINABSTAINcorrectgitignore template listing.
stripe::Balance TransactionsBC-200BC-13400.6wrongGetBalanceTransactions / balance_transaction. Arguably BC-1340 Payments; labelled Financial Management because the surface is a ledger of settled movements rather than payment initiation. FLAGGED FOR REVIEW — if Kin reads it the other way this label should flip, and the classifier should not be penalised for BC-1340 here.
github::BillingrelabelledBC-4250BC-42500.6correctget-github-advanced-security-billing / advanced-security-active-committers — seat-based subscription billing. RELABELLED from BC-200 Financial Management for the same reason as adobe-suite::Orders: Subscription Billing & Revenue Management was not in the 53-L1 frame when this was first labelled. FLAGGED FOR REVIEW.
mastercard::ClaimsBC-1300BC-13400.6wronggetClaimsIdentities, "Share an Identity when the TP is also an RP", with UserConsent and FraudDetectionResponseMeta — identity claims in bill payment. Labelled Banking Customer Management; BC-1400 Financial Crime is a defensible alternative. FLAGGED FOR REVIEW.
datadog::AccounthomographBC-600ABSTAINmissedCreateGCPSTSAccount / GCPSTSServiceAccount — cloud SERVICE accounts. Not customers, not accounting.

Contest it

Some of these are judgements, not facts, and are marked as such in the notes — stripe::Balance Transactions (Financial Management or Payments?), github::Billing, mastercard::Claims. Two labels have already been relabelled because the classifier produced a better answer than the human did.

If you think a label is wrong, say so — open an issue on the roadmap. The set should grow toward more homographs and more abstentions, not more easy positives: the easy ones already score 100% and tell us nothing.

Capability definitions: Turbo EA Capabilities by Vincent Verdet — Turbo EA, github.com/vincentmakes/turbo-ea-capabilities, CC BY 4.0. See the NOTICE.