{"id":"bid-coverage","title":"Bid coverage: uncovered lines, substitutions, partial quantities and conditional bundles","description":"Checks which required lines of a tender or RFQ are covered by the bids received (up to 200 lines, 30 bidders, 2000 offers), for an agent comparing responses. A line is covered when firm offers (exact item, no condition, no bundle) sum to the required quantity; substitute offers, offers bound to a bundle (all-or-nothing across the lines in that bundle) and offers with a stated condition are reported separately and never count as firm. Returns per line the firm quantity, which bidders cover it and what else is on offer, and per bidder the lines they fully cover. pass: every line has enough firm quantity. fail: some line has no offers or too little quantity even counting every offer. unknown: every line is coverable only by counting substitutes, bundles or conditions, which need a human decision. Duplicate bidder names, and a second firm offer for the same line from one bidder, are refused rather than summed. Does not price or rank bids.","roi":"A bid that quietly substitutes an item, covers half the quantity or only holds if you buy the bundle looks complete in a summary. Gaps are listed per line.","audience":"business","package":"money-math-kit","channels":["x402","mcp"],"endpoint":{"method":"POST","url":"https://agents.writerslogic.com/api/v1/bid-coverage","path":"/api/v1/bid-coverage","contentType":"application/json"},"price":{"amount":"0.005","currency":"USDC","network":"base","perCall":true,"failedCallsCharged":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["lines","bids"],"properties":{"lines":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","required":["id","quantity"],"properties":{"id":{"type":"string","minLength":1,"maxLength":80},"quantity":{"type":"string","pattern":"^-?\\d{1,15}(\\.\\d{1,12})?$","maxLength":30,"description":"Decimal string such as \"-12.50\" (up to 15 integer and 12 fraction digits). JSON numbers are not accepted: they are binary floats."}},"additionalProperties":false}},"bids":{"type":"array","minItems":1,"maxItems":30,"items":{"type":"object","required":["bidder","offers"],"properties":{"bidder":{"type":"string","minLength":1,"maxLength":80},"offers":{"type":"array","maxItems":400,"items":{"type":"object","required":["line","quantity"],"properties":{"line":{"type":"string","minLength":1,"maxLength":80},"quantity":{"type":"string","pattern":"^-?\\d{1,15}(\\.\\d{1,12})?$","maxLength":30,"description":"Decimal string such as \"-12.50\" (up to 15 integer and 12 fraction digits). JSON numbers are not accepted: they are binary floats."},"substitute":{"type":"boolean","description":"The bidder offers a different item than specified."},"bundle":{"type":"string","maxLength":80,"description":"Bundle id: the offer holds only if the bidder is awarded every line carrying the same bundle id."},"condition":{"type":"string","maxLength":200,"description":"Any stated condition (minimum spend, lead time, award of another lot)."}},"additionalProperties":false}}},"additionalProperties":false}}}},"resultSchema":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"required":{"type":"string"},"firmQuantity":{"type":"string"},"coverage":{"type":"string","enum":["firm","uncovered","short","substitute-or-conditional-only"]},"firmBidders":{"type":"array","items":{"type":"string"}},"other":{"type":"array","items":{"type":"object","properties":{"bidder":{"type":"string"},"quantity":{"type":"string"},"kind":{"type":"string","enum":["substitute","bundle","conditional"]},"note":{"type":"string"}}}}}}},"bidders":{"type":"array","items":{"type":"object","properties":{"bidder":{"type":"string"},"fullyCovers":{"type":"array","items":{"type":"string"}},"missing":{"type":"array","items":{"type":"string"}}}}},"uncoveredLines":{"type":"array","items":{"type":"string"}},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"outputSchema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"required":{"type":"string"},"firmQuantity":{"type":"string"},"coverage":{"type":"string","enum":["firm","uncovered","short","substitute-or-conditional-only"]},"firmBidders":{"type":"array","items":{"type":"string"}},"other":{"type":"array","items":{"type":"object","properties":{"bidder":{"type":"string"},"quantity":{"type":"string"},"kind":{"type":"string","enum":["substitute","bundle","conditional"]},"note":{"type":"string"}}}}}}},"bidders":{"type":"array","items":{"type":"object","properties":{"bidder":{"type":"string"},"fullyCovers":{"type":"array","items":{"type":"string"}},"missing":{"type":"array","items":{"type":"string"}}}}},"uncoveredLines":{"type":"array","items":{"type":"string"}},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]},"example":{"lines":[{"id":"L1","quantity":"100"},{"id":"L2","quantity":"50"},{"id":"L3","quantity":"10"}],"bids":[{"bidder":"Acme","offers":[{"line":"L1","quantity":"100"},{"line":"L2","quantity":"20"}]},{"bidder":"Birch","offers":[{"line":"L2","quantity":"30"},{"line":"L3","quantity":"10","bundle":"B1"},{"line":"L1","quantity":"100","substitute":true}]}]},"openapiOperation":{"operationId":"bid_coverage","summary":"Bid coverage: uncovered lines, substitutions, partial quantities and conditional bundles","description":"Checks which required lines of a tender or RFQ are covered by the bids received (up to 200 lines, 30 bidders, 2000 offers), for an agent comparing responses. A line is covered when firm offers (exact item, no condition, no bundle) sum to the required quantity; substitute offers, offers bound to a bundle (all-or-nothing across the lines in that bundle) and offers with a stated condition are reported separately and never count as firm. Returns per line the firm quantity, which bidders cover it and what else is on offer, and per bidder the lines they fully cover. pass: every line has enough firm quantity. fail: some line has no offers or too little quantity even counting every offer. unknown: every line is coverable only by counting substitutes, bundles or conditions, which need a human decision. Duplicate bidder names, and a second firm offer for the same line from one bidder, are refused rather than summed. Does not price or rank bids.\n\nPrice: 0.005 USDC on Base (x402).","x-x402-price-usdc":"0.005","x-x402-amount":"5000","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}},"x-audience":"business","x-sample-url":"https://agents.writerslogic.com/api/v1/samples/bid-coverage","security":[{"x402":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["lines","bids"],"properties":{"lines":{"type":"array","minItems":1,"maxItems":200,"items":{"type":"object","required":["id","quantity"],"properties":{"id":{"type":"string","minLength":1,"maxLength":80},"quantity":{"type":"string","pattern":"^-?\\d{1,15}(\\.\\d{1,12})?$","maxLength":30,"description":"Decimal string such as \"-12.50\" (up to 15 integer and 12 fraction digits). JSON numbers are not accepted: they are binary floats."}},"additionalProperties":false}},"bids":{"type":"array","minItems":1,"maxItems":30,"items":{"type":"object","required":["bidder","offers"],"properties":{"bidder":{"type":"string","minLength":1,"maxLength":80},"offers":{"type":"array","maxItems":400,"items":{"type":"object","required":["line","quantity"],"properties":{"line":{"type":"string","minLength":1,"maxLength":80},"quantity":{"type":"string","pattern":"^-?\\d{1,15}(\\.\\d{1,12})?$","maxLength":30,"description":"Decimal string such as \"-12.50\" (up to 15 integer and 12 fraction digits). JSON numbers are not accepted: they are binary floats."},"substitute":{"type":"boolean","description":"The bidder offers a different item than specified."},"bundle":{"type":"string","maxLength":80,"description":"Bundle id: the offer holds only if the bidder is awarded every line carrying the same bundle id."},"condition":{"type":"string","maxLength":200,"description":"Any stated condition (minimum spend, lead time, award of another lot)."}},"additionalProperties":false}}},"additionalProperties":false}}}},"example":{"lines":[{"id":"L1","quantity":"100"},{"id":"L2","quantity":"50"},{"id":"L3","quantity":"10"}],"bids":[{"bidder":"Acme","offers":[{"line":"L1","quantity":"100"},{"line":"L2","quantity":"20"}]},{"bidder":"Birch","offers":[{"line":"L2","quantity":"30"},{"line":"L3","quantity":"10","bundle":"B1"},{"line":"L1","quantity":"100","substitute":true}]}]}}}},"responses":{"200":{"description":"Paid result with provenance","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"required":{"type":"string"},"firmQuantity":{"type":"string"},"coverage":{"type":"string","enum":["firm","uncovered","short","substitute-or-conditional-only"]},"firmBidders":{"type":"array","items":{"type":"string"}},"other":{"type":"array","items":{"type":"object","properties":{"bidder":{"type":"string"},"quantity":{"type":"string"},"kind":{"type":"string","enum":["substitute","bundle","conditional"]},"note":{"type":"string"}}}}}}},"bidders":{"type":"array","items":{"type":"object","properties":{"bidder":{"type":"string"},"fullyCovers":{"type":"array","items":{"type":"string"}},"missing":{"type":"array","items":{"type":"string"}}}}},"uncoveredLines":{"type":"array","items":{"type":"string"}},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]}}}},"400":{"description":"Invalid request (no payment consumed)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Invalid X-API-KEY","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Payment required or invalid","content":{"application/json":{"schema":{"type":"object","description":"x402 v2 PaymentRequired (also base64 in the PAYMENT-REQUIRED header)","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"code":{"type":"string"},"resource":{"type":"object"},"accepts":{"type":"array","items":{"type":"object"}},"extensions":{"type":"object"}}}}}},"502":{"description":"Upstream failure; the payment is released or not settled","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"links":{"docs":"https://agents.writerslogic.com/docs/bid-coverage/","docsJson":"https://agents.writerslogic.com/docs/bid-coverage.json","sample":"https://agents.writerslogic.com/api/v1/samples/bid-coverage","openapi":"https://agents.writerslogic.com/openapi.json","catalog":"https://agents.writerslogic.com/api/v1/catalog","verifyProvenance":"https://agents.writerslogic.com/api/v1/verify-provenance","index":"https://agents.writerslogic.com/docs/index.json"}}