{"openapi":"3.1.0","info":{"title":"Namesome","version":"v1","summary":"Pick a name, make teams, publish a wheel, or run a draw anyone can verify.","description":"A free random-picker API. Give it a list; it gives you a result and a human-readable permalink you can cite. Every successful answer carries that `url`; a refusal carries a stable `error` code instead, because a refusal made nothing there is to cite.\n\n**Free.** There is no paid tier, no billing and no card. A key is free and comes with an account (a magic link to an email address — no password).\n\n**Not a gambling tool.** It never touches money: no tickets, no entry fees, no prizes and no odds, anywhere in it. Using it as the drawing mechanism for something that does is outside the terms at https://namesome.com/terms.\n\n**Authentication.** `Authorization: Bearer <key>`, where a key begins `nsk_`. Calls without one work, at a smaller allowance.\n\n**Rate limits.** Without a key: 60 calls per day per IP address. With a free API key from an account: 5000 calls per day, per account rather than per key. Both windows are fixed and reset at 00:00 UTC. Over the allowance the answer is 429 with a `Retry-After` header in seconds.\n\n**Versioning.** The path carries the version (`/api/v1`). A breaking change ships as a new version; when a version is retired it keeps answering for at least 6 months after the retirement is announced, and the announcement goes on https://namesome.com/developers. Fields may be ADDED to a response without notice, so parse leniently.\n\n**Documentation.** https://namesome.com/developers","contact":{"email":"hello@namesome.com","url":"https://namesome.com/developers"},"termsOfService":"https://namesome.com/terms"},"servers":[{"url":"https://namesome.com"}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"A free key from https://namesome.com/account. Send it as `Authorization: Bearer nsk_…`."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}},"security":[{},{"apiKey":[]}],"paths":{"/api/v1/picks":{"post":{"operationId":"pick","summary":"Pick one or more winners from a list.","description":"Draws from a cryptographic random source. Nothing is stored unless `record` is true, in which case a verifiable draw record is published as well and `url` becomes its page.\n\n`weights` and `record` cannot be used together: a record is verified by reproducing the shuffle from what it publishes, and ns-draw-v1 publishes no weights. `mask` needs `record` — there is nothing to mask on a pick that stores nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["entries"],"properties":{"entries":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string","minLength":1,"maxLength":200},"description":"The list, in the caller's own order. Names are returned exactly as they are sent."},"winners":{"type":"integer","minimum":1,"default":1,"description":"How many names to pick."},"weights":{"type":"array","items":{"type":"integer","minimum":1,"maximum":100},"description":"One weight per entry, in the same order. Omit for an even list."},"record":{"type":"boolean","default":false,"description":"Publish a verifiable record of this draw at /d/{id}."},"mask":{"description":"`true` fingerprints the entries with the draw's own id; `{\"salt\": \"…\"}` fingerprints them with a salt you choose and publish. Either way the names never reach the database.","oneOf":[{"type":"boolean"},{"type":"object","required":["salt"],"properties":{"salt":{"type":"string","maxLength":200}}}]}}}}}},"responses":{"200":{"description":"The winners, in the order they came out.","content":{"application/json":{"schema":{"type":"object","required":["winners","url"],"properties":{"winners":{"type":"array","items":{"type":"string"},"description":"Plain names, even when the record is masked."},"url":{"type":"string","format":"uri","description":"The record's public page. Cite this."},"id":{"type":"string"},"managePath":{"type":"string"},"manageUrl":{"type":"string","format":"uri","description":"The creator's own copy of that address. Keep it: it is not recoverable."},"manageToken":{"type":"string","description":"The capability that reveals a sealed draw or deletes the record. Shown once."},"joinCode":{"type":["string","null"],"description":"The digits somebody can type at /join."},"expiresAt":{"type":"integer","description":"Unix seconds. Records are kept twelve months."},"record":{"type":"object","description":"One `ns-draw-v1` record, exactly as `/d/{id}.json` serves it: the entries, the seed, the commitment, the result and an Ed25519 signature over the whole thing. Verify it against the key at /.well-known/namesome-signing-key.","properties":{"id":{"type":"string"},"algorithm":{"type":"string"},"mode":{"type":"string","enum":["auditable","commit_reveal"]},"created":{"type":"string","format":"date-time"},"revealed":{"type":["string","null"],"format":"date-time"},"entries":{"type":"array","items":{"type":"string"}},"mask":{"type":"object","properties":{"salt":{"type":"string"}}},"winners":{"type":"integer"},"seed":{"type":["string","null"]},"entriesHash":{"type":"string"},"commitment":{"type":"string"},"order":{"type":["array","null"],"items":{"type":"string"}},"result":{"type":["array","null"],"items":{"type":"string"}},"signature":{"type":["string","null"]},"publicKey":{"type":["string","null"]}}}}}}}},"400":{"description":"`bad_request` — the body does not meet the contract.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"401":{"description":"`bad_key` — a key was presented and it is not one that works.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"413":{"description":"`too_many` or `too_big` — over the entry cap or the byte cap.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"429":{"description":"`busy` — over the allowance. `Retry-After` says when, in seconds.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"503":{"description":"`unsigned` — a record was asked for and this deployment cannot sign one.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}}}}},"/api/v1/teams":{"post":{"operationId":"makeTeams","summary":"Split a list into balanced teams.","description":"Sizes end within one of each other. `rules` are keep-together (`apart: false`) and keep-apart (`apart: true`) pairs, named by the names in `people`; a rule about somebody who is not on the list is ignored. When no split can satisfy them the answer is 409 and names the smallest set of rules that cannot all hold at once.\n\nGive exactly one of `teams` (how many) or `size` (how big).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["people"],"properties":{"people":{"type":"array","minItems":1,"maxItems":1000,"description":"A name, or an object. `skill` 1–5 is what `balance` spreads across the teams.","items":{"oneOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":200},"skill":{"type":"integer","minimum":1,"maximum":5},"tag":{"type":"string","maxLength":200},"captain":{"type":"boolean"}}}]}},"teams":{"type":"integer","minimum":1,"description":"How many teams. Use this or `size`."},"size":{"type":"integer","minimum":1,"description":"How many people per team. Use this or `teams`."},"rules":{"type":"array","maxItems":200,"description":"Pairs to keep together or apart, named by the names in `people`. A rule about somebody who is not on the list is ignored.","items":{"type":"object","required":["a","b"],"properties":{"apart":{"type":"boolean","default":false,"description":"true keeps them apart; false keeps them together."},"a":{"type":"string"},"b":{"type":"string"}}}},"balance":{"type":"boolean","default":true,"description":"Spread the higher `skill` levels across teams."},"captains":{"type":"boolean","default":false,"description":"Name one captain per team."}}}}}},"responses":{"200":{"description":"The teams.","content":{"application/json":{"schema":{"type":"object","required":["teams","url"],"properties":{"teams":{"type":"array","items":{"type":"object","required":["members","captain"],"properties":{"members":{"type":"array","items":{"type":"string"}},"captain":{"type":["string","null"]}}}},"url":{"type":"string","format":"uri"}}}}}},"400":{"description":"`bad_request` — the body does not meet the contract.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"401":{"description":"`bad_key` — a key was presented and it is not one that works.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"409":{"description":"`unsatisfiable` — the rules cannot all hold at once. `rules` names the smallest set that clash.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"413":{"description":"`too_many` or `too_big` — over the entry cap or the byte cap.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"429":{"description":"`busy` — over the allowance. `Retry-After` says when, in seconds.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}}}}},"/api/v1/wheels":{"post":{"operationId":"createWheel","summary":"Publish a list as a shared wheel and get its link.","description":"The link opens a spinnable wheel anybody can use — no account needed at either end. It carries a join code so somebody without the link can reach it by typing digits at /join, and it expires twelve months after it was last opened.\n\nEntries go through the same word screen the site's other stranger-readable pages use; a list it refuses answers `blocked`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["entries"],"properties":{"entries":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string","minLength":1,"maxLength":200},"description":"The list, in the caller's own order. Names are returned exactly as they are sent."},"weights":{"type":"array","items":{"type":"integer","minimum":1,"maximum":100},"description":"One weight per entry, in the same order. Omit for an even list."},"tool":{"type":"string","enum":["wheel","picker"],"default":"wheel","description":"Which tool the link opens in."}}}}}},"responses":{"200":{"description":"The published wheel.","content":{"application/json":{"schema":{"type":"object","required":["slug","url"],"properties":{"slug":{"type":"string"},"url":{"type":"string","format":"uri","description":"The wheel's page. Cite this."},"joinCode":{"type":["string","null"]},"expiresAt":{"type":"integer","description":"Unix seconds. Moves forward each time the link is opened."}}}}}},"400":{"description":"`bad_request` — the body does not meet the contract. · `blocked` — the word screen refused an entry, or one was a URL.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"401":{"description":"`bad_key` — a key was presented and it is not one that works.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"413":{"description":"`too_many` or `too_big` — over the entry cap or the byte cap.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"429":{"description":"`busy` — over the allowance. `Retry-After` says when, in seconds.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}}}}},"/api/v1/draws":{"post":{"operationId":"createDraw","summary":"Run a draw anyone can verify, and publish the record.","description":"The commitment is computed and stored BEFORE the result is, so the record proves the outcome was fixed before it was known. With `commit: true` the seed and the result are withheld until you reveal them, which lets you publish the commitment first.\n\nSend `entries` (names, which are published) or `masked_hashes` (SHA-256 of `salt|name`, which you compute yourself so the names never leave your machine — this needs `mask: {salt}`).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["params"],"properties":{"entries":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string","minLength":1,"maxLength":200},"description":"The list, in the caller's own order. Names are returned exactly as they are sent."},"masked_hashes":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string","pattern":"^[0-9a-f]{64}$"},"description":"Fingerprints you made yourself. Requires `mask` with a salt."},"params":{"type":"object","required":["winners"],"properties":{"winners":{"type":"integer","minimum":0,"description":"How many of the entries win."}}},"mask":{"description":"`true` fingerprints the entries with the draw's own id; `{\"salt\": \"…\"}` fingerprints them with a salt you choose and publish. Either way the names never reach the database.","oneOf":[{"type":"boolean"},{"type":"object","required":["salt"],"properties":{"salt":{"type":"string","maxLength":200}}}]},"commit":{"type":"boolean","default":false,"description":"Seal the draw: publish the commitment now, the result when you reveal it."}}}}}},"responses":{"200":{"description":"The record, and the creator's own capability over it.","content":{"application/json":{"schema":{"type":"object","required":["id","url","manageToken","record"],"properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri","description":"The record's public page. Cite this."},"managePath":{"type":"string"},"manageUrl":{"type":"string","format":"uri","description":"The creator's own copy of that address. Keep it: it is not recoverable."},"manageToken":{"type":"string","description":"The capability that reveals a sealed draw or deletes the record. Shown once."},"joinCode":{"type":["string","null"],"description":"The digits somebody can type at /join."},"expiresAt":{"type":"integer","description":"Unix seconds. Records are kept twelve months."},"record":{"type":"object","description":"One `ns-draw-v1` record, exactly as `/d/{id}.json` serves it: the entries, the seed, the commitment, the result and an Ed25519 signature over the whole thing. Verify it against the key at /.well-known/namesome-signing-key.","properties":{"id":{"type":"string"},"algorithm":{"type":"string"},"mode":{"type":"string","enum":["auditable","commit_reveal"]},"created":{"type":"string","format":"date-time"},"revealed":{"type":["string","null"],"format":"date-time"},"entries":{"type":"array","items":{"type":"string"}},"mask":{"type":"object","properties":{"salt":{"type":"string"}}},"winners":{"type":"integer"},"seed":{"type":["string","null"]},"entriesHash":{"type":"string"},"commitment":{"type":"string"},"order":{"type":["array","null"],"items":{"type":"string"}},"result":{"type":["array","null"],"items":{"type":"string"}},"signature":{"type":["string","null"]},"publicKey":{"type":["string","null"]}}}}}}}},"400":{"description":"`bad_request` — the body does not meet the contract. · `blocked` — the word screen refused an entry or the salt.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"401":{"description":"`bad_key` — a key was presented and it is not one that works.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"413":{"description":"`too_many` or `too_big` — over the entry cap or the byte cap.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"429":{"description":"`busy` — over the allowance. `Retry-After` says when, in seconds.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"503":{"description":"`unsigned` — this deployment has no signing key, so it will not mint a record it cannot sign.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}}}}},"/api/v1/draws/{id}":{"get":{"operationId":"readDraw","summary":"Read a draw record back, signed, to verify it.","description":"The record is signed on the way out with this deployment's current key, so you can check it against /.well-known/namesome-signing-key without trusting this response. A record is kept for twelve months; after that, and for an id that never existed, the answer is 410.","parameters":[{"name":"id","in":"path","required":true,"description":"The record's id — the last segment of its /d/{id} page.","schema":{"type":"string"}}],"responses":{"200":{"description":"The record.","content":{"application/json":{"schema":{"type":"object","required":["url","record"],"properties":{"url":{"type":"string","format":"uri","description":"The record's page. Cite this."},"record":{"type":"object","description":"One `ns-draw-v1` record, exactly as `/d/{id}.json` serves it: the entries, the seed, the commitment, the result and an Ed25519 signature over the whole thing. Verify it against the key at /.well-known/namesome-signing-key.","properties":{"id":{"type":"string"},"algorithm":{"type":"string"},"mode":{"type":"string","enum":["auditable","commit_reveal"]},"created":{"type":"string","format":"date-time"},"revealed":{"type":["string","null"],"format":"date-time"},"entries":{"type":"array","items":{"type":"string"}},"mask":{"type":"object","properties":{"salt":{"type":"string"}}},"winners":{"type":"integer"},"seed":{"type":["string","null"]},"entriesHash":{"type":"string"},"commitment":{"type":"string"},"order":{"type":["array","null"],"items":{"type":"string"}},"result":{"type":["array","null"],"items":{"type":"string"}},"signature":{"type":["string","null"]},"publicKey":{"type":["string","null"]}}}}}}}},"401":{"description":"`bad_key` — a key was presented and it is not one that works.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"410":{"description":"`gone` — no such record, or it has reached its twelve months.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}},"429":{"description":"`busy` — over the allowance. `Retry-After` says when, in seconds.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"A stable code. Never a sentence, never localized."},"rules":{"type":"array","description":"On `unsatisfiable` only: the smallest set of rules that cannot all hold at once. Every rule in it is necessary — drop any one and the rest are satisfiable.","items":{"type":"object","required":["apart","a","b"],"properties":{"apart":{"type":"boolean"},"a":{"type":"string"},"b":{"type":"string"}}}}}}}}}}}}}}