{"openapi":"3.1.0","info":{"title":"iFixit API","version":"2.0","description":"Our API provides programmatic access to iFixit, enabling anyone to write innovative\napplications and utilities on top of our rich repair database.\n\n**What can I do with the API?**\n\nAnything you want! The sky is the limit for awesome applications built using our database\nof repair guides. We can't wait to see what you come up with. Build repair tools, scripts,\nand agents that act for your users.\n\nThe content API is free for non-commercial use; [commercial licenses and higher\naccess quotas are available](https://www.ifixit.com/Developers/Pricing).\n**FixBot chat requires an active FixBot subscription.**\nTraining AI Models on iFixit content is prohibited by our\n[Terms of Service](https://www.ifixit.com/Info/Terms_of_Use).\n\nThe API provides access to our repair guides (step-by-step guides and wiki pages),\ncategories, users, teams, and our reputation badges.\n\nIf you build on our API, we will support you by maintaining future compatibility. Make sure\nto version your API calls with `2.0`. When we introduce changes that may break existing apps,\nwe will increment the version number.\n\n## Anonymous access is ending\n\nToday, reads of public content work without an API key. Starting January 1, 2027, we\nwill require an API key for API requests, including reads of public repair guides.\nCreating an account (`POST /users`), logging in (`POST /user/token`), and the `/oidc`\nsign-in routes don't need one. The Workbench keeps accepting a session cookie from a\nvisitor without an account.\n\nTo help you find calls that need updating, anonymous reads return `401` during these\nscheduled brownouts. All times are UTC.\n\n| Start | End |\n|---|---|\n| December 1, 2026, 17:00 | December 1, 2026, 18:00 |\n| December 8, 2026, 01:00 | December 8, 2026, 05:00 |\n| December 15, 2026, 00:00 | December 16, 2026, 00:00 |\n\n## Using the API\n\n### Getting Started\n\nCreate an API key in [your profile settings](https://www.ifixit.com/User/api_keys),\nthen set `IFIXIT_TOKEN` in your environment. Reads of public content work without it\nuntil January 1, 2027.\n\nList repair guides with curl:\n\n```sh\ncurl -H \"Authorization: Bearer $IFIXIT_TOKEN\" https://www.ifixit.com/api/2.0/guides\n```\n\nOr search with the [iFixit CLI](https://github.com/iFixit/ifixit-cli#readme),\nwhich uses the same `IFIXIT_TOKEN`:\n\n```sh\nifixit search \"iphone 12\"\n```\n\n### Authentication\n\nChoose a credential based on who your code acts for:\n\n| Use case | Authentication | Request header |\n|---|---|---|\n| A script, CLI command, CI job, or agent acting for your own account | API key | `Authorization: Bearer YOUR_API_KEY` |\n| An approved app or MCP integration asking a user to connect their iFixit account | OpenID Connect (OIDC) | `Authorization: Bearer ACCESS_TOKEN` |\n| An existing integration that signs in with an email and password | Legacy session token | `Authorization: api SESSION_TOKEN` |\n\n**API keys: personal tools and automation.** Create a key in\n[your profile settings](https://www.ifixit.com/User/api_keys). No app registration\nor password in your code is needed, including for accounts that use single sign-on.\nA key lasts up to a year, can be limited to reads, and can be revoked independently.\nIt cannot change account credentials or create or list API keys. A key that can\nwrite revokes itself with `DELETE /user/token`. This is the current way to\nauthenticate scripts and the [iFixit CLI](https://github.com/iFixit/ifixit-cli#readme).\n\n**OIDC: connect a user's account through their browser.** Use this for an approved\nintegration that acts for users who authorize it. The user signs in on iFixit and\napproves access; your app receives an authorization code and exchanges it for\ntokens at `POST /oidc/token`. Your app does not collect the user's password. Send\nthe access token to the API, not the ID token. Use the refresh token to obtain a\nnew access token when it expires.\n\nOIDC requires a client registered with iFixit. To set up an integration, contact\nus through the [developers page](https://www.ifixit.com/Developers). It is not a\nself-service replacement for creating an API key. The client's approved scopes\ndetermine what the token can access: general API access requires `api`, while\nan MCP resource grant is limited to the registered resource and Workbench access.\nAn MCP token is not a general API credential.\n\n**Legacy session tokens: existing password integrations.** `POST /user/token`\naccepts an email and password and returns `authToken`. Send that value with the\n`api` scheme, not `Bearer`. A new sign-in can end earlier sessions, and an account\nthat signs in only through an identity provider may have no password to submit.\nFor new personal tools, use an API key; for an approved integration that connects\nusers' accounts, use OIDC.\n\nOnly the legacy login (`POST /user/token`) and registration (`POST /users`)\nendpoints require an `X-App-Id` header from iFixit, and only when public\nregistration is enabled. Other endpoints do not require an App ID.\n\n### Response Format\n\nMost endpoints return JSON by default. Append `?pretty` to a JSON request URL for\nhuman-readable formatted output. Additional formats are endpoint-specific; for\nexample, guide reads support\n`?type=XML`.\n\n### Error Responses\n\nA failed request returns a status code of 400 or higher. Check the status code\nfirst, because the body isn't always the same shape.\n\nMost error bodies hold a `message`, a sentence about what went wrong:\n\n```json\n{\n  \"message\": \"Guide not found\"\n}\n```\n\nSome also hold `\"error\": true`, and some `404` bodies are a plain JSON string, such\nas `\"Not Found\"`.\n\nDon't match on `message`, because its wording can change. Branch on the status code,\nand on `errors[].code` in a `422` body.\n\nA `422` means a field in your request is wrong. The body is usually `{\"message\":\n\"Validation failed\", \"errors\": [...]}`, where each entry names the `field` and has a\n`code` of `invalid_value`, `invalid_field`, or `missing_field`. A few operations\nreturn `error` as an object that maps each field name to a code, such as\n`{\"message\": \"Validation Error\", \"error\": {\"title\": \"REQUIRED\"}}`.\n\nA `409` on a guide, step, or wiki edit means the `revisionid` you sent is no longer\nthe current one. The body holds the current guide, step, or page instead of an\nerror, so read its `revisionid`, reapply your change, and send it again.\n\nA `401` means the API didn't accept your credentials: fix them or sign in again. A\n`403` means you can't make this request. An API key that can only read gets `403` on\nevery request except GET, HEAD, and OPTIONS; create a key that can write. An\noperation that doesn't need you to sign in treats an invalid key as no key at all,\nexcept Workbench operations, which return `401`.\n\nA `429` is a rate limit, so wait and try again. A `420` is a quota on a community\naction: your reputation is too low for it, or you've done it too often. Read the\n`message` to see which, and wait only if you've done it too often. Your reputation is\nthe `reputation` field of `GET /user`. Adding a guide\nstep returns `429` when you've done it too often. Posting a story returns `429` if\nyou sent another create request in the last minute.\n\nIf a request times out, the change may still have gone through. Read the item before\nyou send the request again.\n\nCommon status codes:\n\n| Code | Meaning |\n|------|---------|\n| 400 | The request can't be processed as sent |\n| 401 | Your credentials are missing or not valid |\n| 403 | You can't make this request |\n| 404 | Nothing matches what you asked for |\n| 409 | The request conflicts with the current state, such as an old `revisionid` |\n| 420 | Action or reputation quota reached; read the `message` |\n| 422 | A field in your request is wrong |\n| 429 | Rate limit reached |\n\n### Paging\n\nA list that takes `limit` and `offset` returns one page at a time. `limit` is the most\nitems a page holds: 20 by default, and 200 at most. `offset` is how many items to skip:\n0 by default. `order`, on a list that has it, is the sort direction: `ASC` by default,\nor `DESC`. Each operation says what it sorts by.\n\nTo get the next page, add `limit` to `offset`. Stop when a page comes back empty.\n\nAn item added or removed while you page moves the items after it, so you can see one\ntwice or miss one. To pick up changes later, send `modifiedSince` to `GET /guides` or\n`GET /wikis/{namespace}`. On `GET /comments` it returns only comments someone has\nedited, so it doesn't find new ones.\n\nThese lists differ:\n\n- `GET /comments`, `GET /user/guides`, `GET /users/{userid}/guides`,\n  `GET /user/completions`, and `GET /users/{userid}/completions` can return a short or\n  empty page with more items after it, and the response doesn't say how many are left.\n  On these, send `limit=200` and stop at the first empty page. That can still stop\n  before the last item, so don't rely on having every item.\n- `GET /user/media/library` and `GET /admin/product-images/library` apply `limit` and\n  `offset` to each media class, so a page can hold more than `limit` items. Send one\n  class in `types` to page it.\n- `GET /users` returns `422` for an `offset` above 1000.\n- `GET /stories` has a `limit` of 50 at most.\n- `GET /search/{search}` has no next page.\n\n### Language codes\n\nA `langid` holds one of these codes, which are the languages `www.ifixit.com` offers.\nThey are ISO 639-1 two-letter language codes, except Japanese.\nIf you leave `langid` out, the language you get depends on the operation.\nMany operations return the site's default language, which is the main language of\nthe site you call: English on `www.ifixit.com`.\n\n| Code | Language |\n|------|----------|\n| `de` | German |\n| `en` | English |\n| `es` | Spanish |\n| `fr` | French |\n| `it` | Italian |\n| `jp` | Japanese |\n| `ko` | Korean |\n| `nl` | Dutch |\n| `pt` | Portuguese |\n| `ru` | Russian |\n| `tr` | Turkish |\n| `zh` | Chinese |\n\nJapanese is `jp`, not the ISO 639-1 code `ja`.\n\n### Currency codes\n\nA currency code is three letters that name a currency, such as `USD` for US dollars\n(ISO 4217).\n\n### Rate Limiting\n\nAPI requests are rate limited. Past the limit, the API returns `429`. If the\nresponse has a `Retry-After` header, wait that many seconds. If it doesn't, wait and\nadd more time after each `429`.\n\n### Versioning\n\nThis is version 2.0 of the iFixit API. The version is included in the URL path: `/api/2.0/`.\n","contact":{"name":"Developers","url":"https://www.ifixit.com/Developers"},"license":{"name":"Creative Commons BY-NC-SA 3.0","url":"https://www.ifixit.com/Info/Licensing"}},"servers":[{"url":"https://www.ifixit.com/api/2.0","description":"iFixit Production API"}],"security":[{"apiToken":[]},{"oidcBearer":[]}],"tags":[{"name":"Authentication","description":"Use an API key for a script, CLI, or agent acting for your own account.\nUse OIDC browser sign-in for an approved integration that connects users'\naccounts. The password login endpoint returns legacy session tokens for\nexisting integrations. API keys and OIDC access tokens use `Bearer`;\nlegacy session tokens use `api`.\n"},{"name":"Categories","description":"Browse and manage the tree of device categories.\n\nA device report covers a category and every category under it. An orphan is a\ndevice name with no place in the tree. It may have a device page, or be only a\nname that guides and questions use.\n"},{"name":"Comments","description":"Comments on guides, steps, wiki pages, questions, answers, stories, and news\nposts. A reply sits one level under a top-level comment. Deleting a comment also\ndeletes its replies.\n"},{"name":"FixBot","description":"Streaming repair chat for iFixit accounts with an active FixBot subscription.\n"},{"name":"Guides","description":"Create, edit, delete, and list guides and guide steps.\n\nA revision is a saved version of a guide or step, and `revisionid` changes when a\nversion is saved. Patrol is the queue of edits waiting for review: an account that\ncan't publish its own edits sends them there. A guide's allowed list names the\naccounts and teams that can see the guide while it's private. Changing that list\nneeds permission to change the guide's privacy, which the guide's author, its allowed\naccounts, and members of its allowed teams have. Approving or denying a pending edit\nneeds a reputation of at least the guide's `patrol_threshold`.\n"},{"name":"Media","description":"Images, videos, documents, and embeds.\n"},{"name":"Search","description":"Search and search suggestions.\n"},{"name":"Stories","description":"Repair stories about guides and products.\n"},{"name":"Tags","description":"Tags label guides and wikis so people can find them.\n\nA tag that starts with `device:`, `product:`, `lang:`, `source:`, or `system:` is a\ntyped tag. A typed tag is saved with the guide or wiki, but a guide's tag list and a\nwiki's `tags` field leave it out.\n"},{"name":"Teams","description":"Teams and their members.\n\nA business team belongs to a repair business and has a profile page that lists its\nrepair services. Managing those services needs a business team that you own, and a\nteam that isn't a business team returns 403. The student program's universities,\nteachers, and terms are what students pick from when they sign up.\n"},{"name":"Troubleshooting","description":"Troubleshooting pages, and the list of problems for each device.\n"},{"name":"Users","description":"User profiles, badges, favorites, and media.\n\nOperations under `/user` act on the account you're signed in as. Operations under\n`/users/{userid}` name the account in the path. Your media manager is the library\nof images, videos, documents, and embeds you've uploaded or copied. Only you can\nlist it, and removing an item from it doesn't remove it from guides or wikis that\nuse it.\n"},{"name":"Wikis","description":"Create, edit, delete, and list wiki pages.\n\nThe `namespace` is the kind of page. A revision is a saved version of a page.\nPatrol is the queue of edits waiting for review: an edit by an account whose\nreputation is below the page's patrol threshold waits there. A page's original\nlanguage is the language it was first written in. A wiki transfer copies a wiki\nfrom one site to another and runs in the background.\n"},{"name":"Workbench","description":"Manage the things you own. Track repair information and maintenance.\n\nYour workbench is the list of devices and tools you own. Each entry is an *item*:\na device or tool with an iFixit wiki page (`wikiid`), or a custom item you name.\nThe wiki page of a device is its device page. The wiki page of a tool or part that\nguides list is its Item wiki page, in the `ITEM` namespace.\n\nA *task* is something to do on an item. A one-off task is a single event, usually\nwith a date you pick. A *repeating task* has a *schedule* with one or more\n*triggers*, and each round of the task is an *occurrence*. Only the current\noccurrence is a task: when you complete or skip it, it moves to the item's history\n(the events lists return it) and the next occurrence takes its place. A task's\n`taskid` starts with `item-schedule:` or `wiki-schedule:` when it repeats, and\nwith `event:` for a one-off task or a finished occurrence. A *wiki schedule* is a\nrepeating task from the item's device page; the item gets its own copy the first\ntime you complete, skip, or change it.\n\nAn *event* is one saved or upcoming occurrence of a task, or a reading. A wiki\nschedule is *dismissed* when the item's copy of it is muted, archived, done, or\ndeleted, and its task stops appearing. Setting a muted, archived, or done copy back\nto `active` brings the task back, so mute a task you may want later. After you\ndelete a copy, the task doesn't return on its own. A repeating task\nwith no occurrences left has *ended*. A *reading* is a measurement of an item (an\nodometer value, a cycle count). Readings and completed tasks can record a `usage`\nand its unit; an item's `latest_readings` hold the latest of each unit.\n\nA trigger is one of three kinds. A `time` trigger sets the task's date. A `usage`\ntrigger is a number of miles, kilometers, hours, pages, or cycles, and a\n`condition` trigger is a metric reaching a threshold. Neither of those two gives\nthe task a date, and the API doesn't compare your readings with them; your client\ndoes. A task is due at the first trigger that fires. `first_due_at` and\n`first_interval` set the first occurrence only. `repeat_interval` sets how far\napart later ones are. Without a `repeat_interval` (and no `condition` trigger) the\ntask ends after its first occurrence.\n\n**Tasks or events.** Use the task operations to create, complete, or skip a task:\n`PATCH /workbench/items/{workbenchItemid}/tasks/{taskid}` with `date_completed` and\n`occurrence_seq` finishes the current occurrence, and sending it again is safe. Use\n`POST /workbench/events/{workbenchItemid}` to log a reading, or work that isn't on a\ntask's current occurrence. Each repeat of that `POST` logs another event. An event\nyou log with `date_completed` and no schedule ID changes no task. With a schedule\nID, it joins that task's history and the task's next date can count from it, but\nthe task's current occurrence stays open and `occurrence_seq` doesn't change.\n\n**Tasks or schedules.** To make a repeating task, send `recurrence` to `POST\n/workbench/items/{workbenchItemid}/tasks`. The `/workbench/schedules` operations\nwork on the schedule itself: use them to change a schedule's triggers or `status`,\nor to delete it.\n\n**Currency codes.** A `currency` field takes an ISO 4217 code, such as `AUD`, `CAD`,\n`EUR`, `GBP`, or `USD`. An unknown code returns 422.\n\n**Overdue and time zones.** The API has no overdue flag. A task is overdue when it\nis `pending` and its `date_event` is before the current time. Dates are UNIX\ntimestamps, which have no time zone. A `months` or `years` interval is counted in\nUTC. Adding 1 month to 23:00 UTC on January 31 gives 23:00 UTC on the last day of\nFebruary.\n\n**Where triggers go.** The trigger fields are the same everywhere. Task operations\ntake them in `recurrence.triggers`, and `null` or `[]` there makes the task one-off.\nEvent and schedule operations take a top-level `triggers`. On a schedule or an\nevent that has one, `[]` keeps the schedule but stops its occurrences.\n\nThe API doesn't send reminders to your app, and it has no webhook or filter for\ndue tasks. iFixit notifies account owners, unless they turned the reminders off,\non its site and in its mobile app on the day a dated task is due and a week later.\nTo remind your own users, list tasks with `status=pending` and compare each\n`date_event` with today.\n\nWorked example. You add a car and create a repeating \"Change oil\" task (`POST\n/workbench/items/{workbenchItemid}/tasks`) with `{\"title\": \"Change oil\", \"recurrence\":\n{\"triggers\": [{\"trigger_type\": \"time\", \"metric\": \"elapsed_time\", \"unit\": \"months\",\n\"repeat_interval\": 6}]}}`. On January 15, 2026 the task is created, so its first\ndate (`date_event`) is July 15, 2026 and `occurrence_seq` is `0`. You complete it\non July 20 (`PATCH` with `date_completed` and `occurrence_seq: 0`). That is within\n45 days of the date it was due, so the next date counts from July 15 and is\nJanuary 15, 2027, and `occurrence_seq` is `1`. If you had completed it on\nSeptember 20, it would be more than 45 days from the due date, so the next date\nwould count from September 20 and be March 20, 2027. The July 20 completion is now\nhistory: the task list shows only the next occurrence, and the events list shows\nboth. If your request times out and you send it again with `occurrence_seq: 0`,\nthe API returns the occurrence you already completed and does not complete the\nnext one.\n\nA request about an item that isn't on your workbench returns 403, never 404. A guest\nsession also gets 403 from an operation that needs an account.\n\nWhere an operation uses `langid`, it works the same way. Without it, or with a code the\nsite doesn't have, you get the site's default language. On a task or event, `langid`\nsets the language of `guide` and `guide_parts`, and of `task` on a schedule copied from\na device's schedule.\n\nA visitor without an account can use a session cookie to add, read, and remove\nitems, and to read tasks, events, schedules, and attachments. Editing an item,\nchanging a task, event, schedule, or attachment, and the task batch need an\naccount.\n"}],"paths":{"/chat":{"servers":[{"url":"https://fixbot.ifixit.com/api/2.0","description":"FixBot consumer API"}],"post":{"operationId":"chat","tags":["FixBot"],"summary":"Chat with FixBot","x-api-usage-kind":"fixbot","security":[{"oidcBearer":[]}],"description":"Sends a message to FixBot and streams back its reply. Start each\nconversation with a new `chatId` UUID. For a follow-up, send the same\n`chatId` and only your latest message, with a new message UUID. FixBot\nkeeps the earlier messages.\n\nThe reply is a stream of server-sent events (`text/event-stream`). Each\n`data:` line is a JSON event with a `type`, and the last line is\n`data: [DONE]`. A `text-delta` event holds the next piece of the reply in\n`delta`. The stream also holds events you may not need, such as status\nand reasoning, so skip any `type` you don't use. A failure after the\nstream starts arrives as an event with `type` `error` and a message in\n`errorText`, not as a status code. Wait for the stream to finish before\nyou send the next message in the same conversation.\n\nThis endpoint is on `fixbot.ifixit.com`, not `www.ifixit.com`. It needs an\nactive FixBot subscription, and the account must have accepted the FixBot\ndisclosure, which FixBot asks for after you sign in on `fixbot.ifixit.com`.\n","requestBody":{"required":true,"content":{"application/json":{"example":{"chatId":"e8a1c76f-e917-413f-a1fa-2f42149fa0f0","persona":"fixbot","messages":[{"id":"e92bf1d2-5fb8-4b0c-87db-e8cd7a3683c3","role":"user","parts":[{"type":"text","text":"My phone will not charge. What should I check first?"}]}]},"schema":{"type":"object","properties":{"chatId":{"type":"string","format":"uuid","description":"A UUID you generate. Send a new one to start a conversation and the same one to continue it. Only the account that owns the API key can continue the conversation."},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"A new UUID for each message. If you send an `id` you've already used, the new text isn't saved and FixBot answers the earlier message again."},"role":{"description":"Who sent the message.","type":"string","enum":["user"]},"parts":{"description":"The content of the message. It is text only, so you can't send images or files.","type":"array","items":{"type":"object","properties":{"type":{"description":"The kind of content.","type":"string","enum":["text"]},"text":{"description":"The message text.","type":"string"}},"required":["type","text"],"additionalProperties":false},"minItems":1}},"required":["id","role","parts"],"additionalProperties":false},"minItems":1,"description":"Send only the newest user message. The conversation's earlier messages are already stored under `chatId`."},"persona":{"description":"Which assistant answers the conversation.","type":"string","enum":["fixbot"]},"trigger":{"description":"What the request does. `submit-message` is the default, and `regenerate-message` gives the same result.","type":"string","enum":["submit-message","regenerate-message"]},"messageId":{"type":"string","format":"uuid","description":"The `id` of an earlier user message in this conversation, to answer it again. Answering again counts toward your rate limit like a new message."}},"required":["chatId","messages","persona"],"additionalProperties":false}}}},"responses":{"200":{"description":"The reply stream. A `finish` event marks a complete reply.","headers":{"x-vercel-ai-ui-message-stream":{"description":"The version of the event format.","schema":{"type":"string","enum":["v1"]}}},"content":{"text/event-stream":{"example":"data: {\"type\":\"text-start\",\"id\":\"text-1\"}\n\ndata: {\"type\":\"text-delta\",\"id\":\"text-1\",\"delta\":\"Check the charging cable first.\"}\n\ndata: {\"type\":\"text-end\",\"id\":\"text-1\"}\n\ndata: {\"type\":\"finish\",\"finishReason\":\"stop\"}\n\ndata: [DONE]\n\n","schema":{"type":"string"}}}},"400":{"description":"The body isn't valid JSON or doesn't match the request. The body is plain text."},"401":{"description":"The API key is missing, invalid, expired, or revoked. The body is `{\"error\": \"unauthenticated\"}`."},"403":{"description":"The body's `error` says why. `forbidden`: the account has no active FixBot subscription. `terms_not_accepted`: the account hasn't accepted the disclosure. `chat_not_owned`: the `chatId` belongs to another account or to a deleted conversation, so use a new one."},"409":{"description":"The body's `error` says why. `stream_in_progress`: FixBot is still answering the previous message in this conversation. `chat_out_of_sync`: the stored conversation doesn't end with the message you sent."},"415":{"description":"The `Content-Type` header isn't `application/json`. The body is plain text."},"429":{"description":"You've reached the limit for your IP address or for your account's messages. The body is a JSON object describing the limit.","headers":{"Retry-After":{"schema":{"type":"integer","minimum":0},"description":"Seconds to wait before you send the request again."}}},"500":{"description":"The request failed before the stream started."},"503":{"description":"FixBot can't check your request right now. Try again later."}},"x-badges":[{"name":"FixBot","color":"#fde68a"}]}},"/oidc/mcp-token":{"get":{"operationId":"validateMcpToken","summary":"Validate an MCP access token","description":"Checks an access token for a Model Context Protocol (MCP) server, and\nreturns the claims the server needs to authorize the request. The token\nmust still be valid for its client, its resource, and an enabled account.\nCurrently, the token must include the `workbench` scope.\n\nThis is not OAuth token introspection. It rejects session cookies, API\nkeys, and tokens with the `api` scope.\n","tags":["Authentication"],"security":[{"workbenchBearer":[]}],"responses":{"200":{"description":"Active MCP resource grant","content":{"application/json":{"schema":{"type":"object","required":["iss","sub","aud","scope","exp"],"properties":{"iss":{"type":"string","format":"uri","description":"The issuer's absolute URL, which ends in `/api/2.0/oidc`."},"sub":{"type":"string","description":"The token owner's `userid`, as a string."},"aud":{"type":"string","format":"uri","description":"Registered MCP resource this token authorizes."},"scope":{"type":"string","description":"Space-separated scopes granted to the token."},"exp":{"type":"integer","description":"When the token expires, as a UNIX timestamp (seconds since January 1, 1970, UTC)."}}}}}},"401":{"description":"Missing, invalid, expired, revoked, or no longer permitted token","headers":{"WWW-Authenticate":{"schema":{"type":"string","example":"Bearer error=\"invalid_token\""}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","enum":["invalid_token"]}}}}}},"403":{"$ref":"#/components/responses/Forbidden"}}}},"/user/token":{"post":{"operationId":"login","summary":"Log in","description":"Logs in with an `email` and `password` and returns the user record. Its `authToken` is a session token. Send it on later requests as `Authorization: api YOUR_AUTH_TOKEN`. A new login can stop the tokens from earlier logins working. For a script, use an API key instead. A `Bearer` header on this request is ignored.\nThis legacy login endpoint requires a valid `X-App-Id` header when public registration is enabled, including on www.ifixit.com. A missing or invalid App ID returns 400. Get an App ID from iFixit. Only this endpoint and legacy registration (`POST /users`) require one.","tags":["Authentication"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"type":"string","format":"email","description":"The email address of the account."},"password":{"type":"string","format":"password","description":"The account's password."}}}}}},"responses":{"201":{"description":"Login successful","content":{"application/json":{"schema":{"type":"object","description":"An account's full profile. When the profile is your own, it also holds `links` and, usually, `unread_notification_count` (how many notifications you haven't read). The count can be missing.","allOf":[{"type":"object","description":"A short public view of an account. Lists of users and search results hold this shape. Full profiles add more fields.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},{"type":"object","properties":{"certification_count":{"type":"integer","description":"How many of the account's certifications are approved.","example":0},"badge_counts":{"type":"object","description":"How many badges the account holds at each level.","properties":{"bronze":{"type":"integer","description":"How many bronze badges the account holds."},"silver":{"type":"integer","description":"How many silver badges the account holds."},"gold":{"type":"integer","description":"How many gold badges the account holds."},"total":{"type":"integer","description":"All three levels added together."}}},"summary":{"type":["string","null"],"description":"The short about text from the account's profile.","example":"I fix things!"},"about_raw":{"oneOf":[{"type":"string"},{"type":"boolean"}],"description":"The text of the account's about page, in wiki markup. `false` when the account has no about page."},"about_rendered":{"oneOf":[{"type":"string"},{"type":"boolean"}],"description":"The account's about page as HTML. `false` when the account has no about page."},"partner":{"type":["string","null"],"description":"A partner's name, or `null`."},"greatest_privilege":{"type":"string","description":"The highest privilege the account holds, from highest to lowest: `Admin`, `Author & Mod`, `Moderator`, `Author`, `Student`, `Teacher`. `User` when it holds none."},"langid":{"type":"string","description":"The account's preferred language, as one of the [language codes](#api-1/description/language-codes). The site's default language when the account has not set one.","example":"en"},"preferredStoreDomain":{"type":"string","description":"The domain of the store the request is for, for example `ifixit-us`. It describes the request, not the account in the response. To choose the store, send an `x-ifixit-view-locale` header with one of `en-us`, `en-ca`, `fr-ca`, `en-au`, `en-gb`, `en-eu`, `it-it`, `es-es`, `es-us`, `fr-fr`, or `de-de`. Without a valid one, it comes from the signed-in account's saved store, or a guess from where the request came from."},"preferredStoreLocale":{"type":"string","description":"The locale of that store, for example `en-us`. The `x-ifixit-view-locale` header decides it, as described for `preferredStoreDomain`."},"authToken":{"type":"string","description":"A session token. Send it as `Authorization: api AUTH_TOKEN`. Login and registration responses hold it. Other responses don't. It stops working when you log out or the session expires.","example":"0123456789abcdef0123456789abcdef"},"links":{"type":"object","description":"Present only on your own profile. An empty object unless your account has access to the management pages.","properties":{"manage":{"type":"string","description":"Link to the management pages."}},"additionalProperties":{"type":"string"}}}}]}}}},"400":{"description":"The site needs an `X-App-Id` header and yours is missing or not valid.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"401":{"description":"The login failed: the email or password is wrong, the account is banned, or there were too many failed attempts.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"description":"`email` or `password` is missing or isn't a string. The `error` field maps each wrong field to a code.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"logout","summary":"Log out","description":"Logs out. With a session token from `POST /user/token`, this ends the user's session. With an API key that can write, it revokes the key you sent. To revoke a read-only key, use the API keys tab of your profile settings.","tags":["Authentication"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"responses":{"204":{"description":"The request worked. The response has no body."},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"write"}},"/user":{"get":{"operationId":"getCurrentUser","summary":"Get current user","description":"Returns the profile of the signed-in account, including fields only you get, such as `unread_notification_count`.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"responses":{"200":{"description":"Current user info","content":{"application/json":{"schema":{"type":"object","description":"An account's full profile. When the profile is your own, it also holds `links` and, usually, `unread_notification_count` (how many notifications you haven't read). The count can be missing.","allOf":[{"type":"object","description":"A short public view of an account. Lists of users and search results hold this shape. Full profiles add more fields.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},{"type":"object","properties":{"certification_count":{"type":"integer","description":"How many of the account's certifications are approved.","example":0},"badge_counts":{"type":"object","description":"How many badges the account holds at each level.","properties":{"bronze":{"type":"integer","description":"How many bronze badges the account holds."},"silver":{"type":"integer","description":"How many silver badges the account holds."},"gold":{"type":"integer","description":"How many gold badges the account holds."},"total":{"type":"integer","description":"All three levels added together."}}},"summary":{"type":["string","null"],"description":"The short about text from the account's profile.","example":"I fix things!"},"about_raw":{"oneOf":[{"type":"string"},{"type":"boolean"}],"description":"The text of the account's about page, in wiki markup. `false` when the account has no about page."},"about_rendered":{"oneOf":[{"type":"string"},{"type":"boolean"}],"description":"The account's about page as HTML. `false` when the account has no about page."},"partner":{"type":["string","null"],"description":"A partner's name, or `null`."},"greatest_privilege":{"type":"string","description":"The highest privilege the account holds, from highest to lowest: `Admin`, `Author & Mod`, `Moderator`, `Author`, `Student`, `Teacher`. `User` when it holds none."},"langid":{"type":"string","description":"The account's preferred language, as one of the [language codes](#api-1/description/language-codes). The site's default language when the account has not set one.","example":"en"},"preferredStoreDomain":{"type":"string","description":"The domain of the store the request is for, for example `ifixit-us`. It describes the request, not the account in the response. To choose the store, send an `x-ifixit-view-locale` header with one of `en-us`, `en-ca`, `fr-ca`, `en-au`, `en-gb`, `en-eu`, `it-it`, `es-es`, `es-us`, `fr-fr`, or `de-de`. Without a valid one, it comes from the signed-in account's saved store, or a guess from where the request came from."},"preferredStoreLocale":{"type":"string","description":"The locale of that store, for example `en-us`. The `x-ifixit-view-locale` header decides it, as described for `preferredStoreDomain`."},"authToken":{"type":"string","description":"A session token. Send it as `Authorization: api AUTH_TOKEN`. Login and registration responses hold it. Other responses don't. It stops working when you log out or the session expires.","example":"0123456789abcdef0123456789abcdef"},"links":{"type":"object","description":"Present only on your own profile. An empty object unless your account has access to the management pages.","properties":{"manage":{"type":"string","description":"Link to the management pages."}},"additionalProperties":{"type":"string"}}}}]}}}},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"account"}},"/users":{"get":{"operationId":"listUsers","summary":"List registered users","description":"Lists active user accounts, sorted by `userid`. Each item is a user's public profile summary. You can't page past the first 1,000 users.","tags":["Users"],"parameters":[{"name":"offset","in":"query","description":"Number of items to skip from the start of the list. See [paging](#api-1/description/paging).","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","description":"Maximum number of items to return. A value above 200 returns 200 items.","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}},{"name":"order","in":"query","description":"Sort direction, `ASC` or `DESC`.","schema":{"type":"string","enum":["ASC","DESC"],"default":"ASC"}},{"name":"joinedSince","in":"query","description":"Only return users who joined at or after this UNIX timestamp (seconds since January 1, 1970, UTC), such as `1767225600` for January 1, 2026.","schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"List of users","content":{"application/json":{"schema":{"type":"array","description":"A list of accounts, each a short public view.","items":{"type":"object","description":"A short public view of an account. Lists of users and search results hold this shape. Full profiles add more fields.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"description":"`offset` is above 1000.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"message":"Offset must be <= 1000"}}}}},"x-api-usage-kind":"list"},"post":{"operationId":"registerUser","summary":"Register a user","description":"Creates a user account and logs it in. The 201 response holds the new user's record and an `authToken`. Send it on later requests as `Authorization: api YOUR_AUTH_TOKEN`. Don't send an API key with this request. A failed registration returns 401 with a `message` that says why.","tags":["Users"],"security":[],"parameters":[{"name":"X-App-Id","in":"header","required":true,"description":"Identifies your app for this legacy registration endpoint. Required when public registration is enabled, including on www.ifixit.com. Get an App ID from iFixit; it works only on the sites it was issued for. Only this endpoint and legacy login (`POST /user/token`) require one.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","username","unique_username","password"],"properties":{"email":{"type":"string","format":"email","description":"The new account's email address."},"username":{"type":"string","description":"The name shown on the account's profile. It has 3 to 30 characters and can't contain `<` or `>`. A name that doesn't fit is replaced with one made from the email address, and the request still succeeds."},"unique_username":{"type":"string","description":"The name people use to @-mention the account. It has 3 to 15 characters: a lowercase letter, then lowercase letters, digits, or underscores. Another account can't already use it."},"password":{"type":"string","format":"password","description":"The account's password, at least 10 characters."}}}}}},"responses":{"201":{"description":"User registered and logged in; the response includes `authToken`","content":{"application/json":{"schema":{"type":"object","description":"An account's full profile. When the profile is your own, it also holds `links` and, usually, `unread_notification_count` (how many notifications you haven't read). The count can be missing.","allOf":[{"type":"object","description":"A short public view of an account. Lists of users and search results hold this shape. Full profiles add more fields.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},{"type":"object","properties":{"certification_count":{"type":"integer","description":"How many of the account's certifications are approved.","example":0},"badge_counts":{"type":"object","description":"How many badges the account holds at each level.","properties":{"bronze":{"type":"integer","description":"How many bronze badges the account holds."},"silver":{"type":"integer","description":"How many silver badges the account holds."},"gold":{"type":"integer","description":"How many gold badges the account holds."},"total":{"type":"integer","description":"All three levels added together."}}},"summary":{"type":["string","null"],"description":"The short about text from the account's profile.","example":"I fix things!"},"about_raw":{"oneOf":[{"type":"string"},{"type":"boolean"}],"description":"The text of the account's about page, in wiki markup. `false` when the account has no about page."},"about_rendered":{"oneOf":[{"type":"string"},{"type":"boolean"}],"description":"The account's about page as HTML. `false` when the account has no about page."},"partner":{"type":["string","null"],"description":"A partner's name, or `null`."},"greatest_privilege":{"type":"string","description":"The highest privilege the account holds, from highest to lowest: `Admin`, `Author & Mod`, `Moderator`, `Author`, `Student`, `Teacher`. `User` when it holds none."},"langid":{"type":"string","description":"The account's preferred language, as one of the [language codes](#api-1/description/language-codes). The site's default language when the account has not set one.","example":"en"},"preferredStoreDomain":{"type":"string","description":"The domain of the store the request is for, for example `ifixit-us`. It describes the request, not the account in the response. To choose the store, send an `x-ifixit-view-locale` header with one of `en-us`, `en-ca`, `fr-ca`, `en-au`, `en-gb`, `en-eu`, `it-it`, `es-es`, `es-us`, `fr-fr`, or `de-de`. Without a valid one, it comes from the signed-in account's saved store, or a guess from where the request came from."},"preferredStoreLocale":{"type":"string","description":"The locale of that store, for example `en-us`. The `x-ifixit-view-locale` header decides it, as described for `preferredStoreDomain`."},"authToken":{"type":"string","description":"A session token. Send it as `Authorization: api AUTH_TOKEN`. Login and registration responses hold it. Other responses don't. It stops working when you log out or the session expires.","example":"0123456789abcdef0123456789abcdef"},"links":{"type":"object","description":"Present only on your own profile. An empty object unless your account has access to the management pages.","properties":{"manage":{"type":"string","description":"Link to the management pages."}},"additionalProperties":{"type":"string"}}}}]}}}},"400":{"description":"The site needs an `X-App-Id` header and yours is missing or not valid.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"401":{"description":"Registration failed. The `message` says why, for example a malformed email, a password under 10 characters, or an invalid `unique_username`.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"403":{"description":"Your account can't register users on this site, or the app ID can't register users.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"422":{"description":"Missing required field or unrecognized field in request body","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/users/{userid}":{"get":{"operationId":"getUser","summary":"Get a user","description":"Returns a user's public profile. When `userid` is your own, the response also includes the fields only you get, as `GET /user` does.","tags":["Users"],"parameters":[{"name":"userid","in":"path","required":true,"description":"The `userid` of the account, from `GET /users`.","schema":{"type":"integer"}}],"responses":{"200":{"description":"User details","content":{"application/json":{"schema":{"type":"object","description":"An account's full profile. When the profile is your own, it also holds `links` and, usually, `unread_notification_count` (how many notifications you haven't read). The count can be missing.","allOf":[{"type":"object","description":"A short public view of an account. Lists of users and search results hold this shape. Full profiles add more fields.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},{"type":"object","properties":{"certification_count":{"type":"integer","description":"How many of the account's certifications are approved."},"badge_counts":{"type":"object","description":"How many badges the account holds at each level.","properties":{"bronze":{"type":"integer","description":"How many bronze badges the account holds."},"silver":{"type":"integer","description":"How many silver badges the account holds."},"gold":{"type":"integer","description":"How many gold badges the account holds."},"total":{"type":"integer","description":"All three levels added together."}}},"summary":{"type":["string","null"],"description":"The short about text from the account's profile."},"about_raw":{"oneOf":[{"type":"string"},{"type":"boolean"}],"description":"The text of the account's about page, in wiki markup. `false` when the account has no about page."},"about_rendered":{"oneOf":[{"type":"string"},{"type":"boolean"}],"description":"The account's about page as HTML. `false` when the account has no about page."},"partner":{"type":["string","null"],"description":"A partner's name, or `null`."},"greatest_privilege":{"type":"string","description":"The highest privilege the account holds, from highest to lowest: `Admin`, `Author & Mod`, `Moderator`, `Author`, `Student`, `Teacher`. `User` when it holds none."},"langid":{"type":"string","description":"The account's preferred language, as one of the [language codes](#api-1/description/language-codes). The site's default language when the account has not set one."},"preferredStoreDomain":{"type":"string","description":"The domain of the store the request is for, for example `ifixit-us`. It describes the request, not the account in the response. To choose the store, send an `x-ifixit-view-locale` header with one of `en-us`, `en-ca`, `fr-ca`, `en-au`, `en-gb`, `en-eu`, `it-it`, `es-es`, `es-us`, `fr-fr`, or `de-de`. Without a valid one, it comes from the signed-in account's saved store, or a guess from where the request came from."},"preferredStoreLocale":{"type":"string","description":"The locale of that store, for example `en-us`. The `x-ifixit-view-locale` header decides it, as described for `preferredStoreDomain`."}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"get"}},"/users/{userid}/badges":{"get":{"operationId":"getUserBadges","summary":"List a user's badges","description":"Lists every enabled badge, with whether the user has earned it. Earned badges come first, most recently earned first, followed by unearned badges ordered by `badgeid`.","tags":["Users"],"parameters":[{"name":"userid","in":"path","required":true,"description":"The `userid` of the account, from `GET /users`.","schema":{"type":"integer"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","enum":["badgeGuide","badgeAnswers","badgeGeneral","badgeWorkbench"]},"description":"Only list badges in this category: `badgeGuide` (guides), `badgeAnswers` (the Answers forum), `badgeWorkbench` (Workbench), or `badgeGeneral` (everything else). Leave it out to list every category."},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The language for badge `name` and `description`, as one of the [language codes](#api-1/description/language-codes). Without it, or with a code the site doesn't have, you get English."}],"responses":{"200":{"description":"The badges.","content":{"application/json":{"schema":{"type":"array","description":"The badges, each with whether the user has earned it. The operation says how the list is ordered.","items":{"type":"object","description":"A badge, with the user's standing on it.","properties":{"earned":{"type":"boolean","description":"Whether the user has earned this badge"},"times_earned":{"type":"integer","description":"How many times the user has earned the badge; 0 when they haven't."},"date":{"type":["integer","null"],"format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the latest time the user earned the badge; `null` when they haven't."},"badge":{"type":"object","description":"A badge people can earn on iFixit.","properties":{"badgeid":{"type":"integer","description":"The badge's ID, as listed by `GET /users/{userid}/badges`."},"name":{"type":"string","description":"The badge's name, in the language you ask for with `langid`."},"type":{"type":"string","enum":["bronze","silver","gold"],"description":"The badge's tier."},"category":{"type":"string","description":"The part of iFixit the badge belongs to: `badgeGuide` (guides), `badgeAnswers` (Answers), `badgeWorkbench` (Workbench), or `badgeGeneral` (everything else)."},"description":{"type":"string","description":"What a user does to earn the badge, in the language you ask for with `langid`."},"multiple":{"type":"boolean","description":"`true` when the badge can be earned more than once. Workbench badges with this set are earned once per item."},"num_users":{"type":"integer","description":"How many times the badge has been awarded, across all users. A badge that can be earned more than once counts every award, so this can be higher than the number of users who hold it."},"icon":{"type":["string","null"],"description":"The name of the badge's Font Awesome icon, such as `id-card`; `null` when the badge has no icon."},"image":{"type":"string","description":"URL of the badge's image; an empty string when the badge has no image."},"secondary_color":{"type":"string","description":"The badge's color, by name, such as `camelot`."}}},"key":{"type":"string","description":"The badge's identifier, such as `WorkbenchBuilder`. It matches `key` in the `badge_changes` of Workbench task responses. Present only when you send `progress`."},"progress":{"description":"How far the user is toward the badge. Present only when you send `progress`. It is `null` for a badge that isn't a Workbench badge, and for a Workbench badge with nothing to count.","oneOf":[{"description":"How far a user is toward a Workbench badge. `kind` says which shape this is. `count`: one count across the account, `now` of `max`. `items`: a count per item, with one award for each item that reaches `max`. `items` holds each item the badge can be earned on, unearned items first and the closest to `max` first among them. `time`: like `items`, but an item must also have been owned for `days` days. `ready_at` is when it has been. `parts`: several counts, all of which must reach their `max`.","oneOf":[{"type":"object","required":["kind","now","max","unit","requires"],"properties":{"kind":{"const":"count"},"now":{"type":"integer","description":"How many steps are done. Never more than `max`."},"max":{"type":"integer","description":"How many steps earn the badge."},"unit":{"type":"string","description":"What one step is. `items` is an item on the Workbench, `repairs` a repair, `repaired_items` an item with a repair, `tasks` a completed task, and `readings` a logged reading. The other values name a kind of completed task, such as `battery_tasks` or `oil_changes`."},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","max","unit","items","requires"],"properties":{"kind":{"const":"items"},"max":{"type":"integer","description":"How many steps on one item earn the badge."},"unit":{"type":"string","description":"What one step is, with the same values as for `count`."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many steps are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."}}}},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","days","max","items"],"properties":{"kind":{"const":"time"},"days":{"type":"integer","description":"How many days an item must have been owned."},"max":{"type":"integer","description":"How many events on one item earn the badge."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned","owned_since","ready_at"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many events are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."},"owned_since":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item was added to the account."},"ready_at":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item has been owned for `days` days. It can be in the past."}}}}}},{"type":"object","required":["kind","parts"],"properties":{"kind":{"const":"parts"},"parts":{"type":"array","description":"The counts that must all reach their `max`.","items":{"type":"object","required":["key","now","max"],"properties":{"key":{"type":"string","enum":["repairs","tasks","items"],"description":"What this count is of, as `unit` describes it."},"now":{"type":"integer","description":"How many are done. Never more than `max`."},"max":{"type":"integer","description":"How many are needed."}}}}}}]},{"type":"null"}]}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"list"}},"/user/badges":{"get":{"operationId":"getCurrentUserBadges","summary":"List the current user's badges","description":"Lists every enabled badge, with whether you have earned it. Earned badges come first, most recently earned first, followed by unearned badges ordered by `badgeid`.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","enum":["badgeGuide","badgeAnswers","badgeGeneral","badgeWorkbench"]},"description":"Only list badges in this category: `badgeGuide` (guides), `badgeAnswers` (the Answers forum), `badgeWorkbench` (Workbench), or `badgeGeneral` (everything else). Leave it out to list every category."},{"name":"progress","in":"query","required":false,"schema":{"type":"boolean"},"description":"Send `?progress=true` to add `key` and `progress` to each badge. Only Workbench badges have a `progress` value."},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The language for badge `name` and `description`, as one of the [language codes](#api-1/description/language-codes). Without it, or with a code the site doesn't have, you get English."}],"responses":{"200":{"description":"The badges.","content":{"application/json":{"schema":{"type":"array","description":"The badges, each with whether the user has earned it. The operation says how the list is ordered.","items":{"type":"object","description":"A badge, with the user's standing on it.","properties":{"earned":{"type":"boolean","description":"Whether the user has earned this badge"},"times_earned":{"type":"integer","description":"How many times the user has earned the badge; 0 when they haven't."},"date":{"type":["integer","null"],"format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the latest time the user earned the badge; `null` when they haven't."},"badge":{"type":"object","description":"A badge people can earn on iFixit.","properties":{"badgeid":{"type":"integer","description":"The badge's ID, as listed by `GET /users/{userid}/badges`."},"name":{"type":"string","description":"The badge's name, in the language you ask for with `langid`."},"type":{"type":"string","enum":["bronze","silver","gold"],"description":"The badge's tier."},"category":{"type":"string","description":"The part of iFixit the badge belongs to: `badgeGuide` (guides), `badgeAnswers` (Answers), `badgeWorkbench` (Workbench), or `badgeGeneral` (everything else)."},"description":{"type":"string","description":"What a user does to earn the badge, in the language you ask for with `langid`."},"multiple":{"type":"boolean","description":"`true` when the badge can be earned more than once. Workbench badges with this set are earned once per item."},"num_users":{"type":"integer","description":"How many times the badge has been awarded, across all users. A badge that can be earned more than once counts every award, so this can be higher than the number of users who hold it."},"icon":{"type":["string","null"],"description":"The name of the badge's Font Awesome icon, such as `id-card`; `null` when the badge has no icon."},"image":{"type":"string","description":"URL of the badge's image; an empty string when the badge has no image."},"secondary_color":{"type":"string","description":"The badge's color, by name, such as `camelot`."}}},"key":{"type":"string","description":"The badge's identifier, such as `WorkbenchBuilder`. It matches `key` in the `badge_changes` of Workbench task responses. Present only when you send `progress`."},"progress":{"description":"How far the user is toward the badge. Present only when you send `progress`. It is `null` for a badge that isn't a Workbench badge, and for a Workbench badge with nothing to count.","oneOf":[{"description":"How far a user is toward a Workbench badge. `kind` says which shape this is. `count`: one count across the account, `now` of `max`. `items`: a count per item, with one award for each item that reaches `max`. `items` holds each item the badge can be earned on, unearned items first and the closest to `max` first among them. `time`: like `items`, but an item must also have been owned for `days` days. `ready_at` is when it has been. `parts`: several counts, all of which must reach their `max`.","oneOf":[{"type":"object","required":["kind","now","max","unit","requires"],"properties":{"kind":{"const":"count"},"now":{"type":"integer","description":"How many steps are done. Never more than `max`."},"max":{"type":"integer","description":"How many steps earn the badge."},"unit":{"type":"string","description":"What one step is. `items` is an item on the Workbench, `repairs` a repair, `repaired_items` an item with a repair, `tasks` a completed task, and `readings` a logged reading. The other values name a kind of completed task, such as `battery_tasks` or `oil_changes`."},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","max","unit","items","requires"],"properties":{"kind":{"const":"items"},"max":{"type":"integer","description":"How many steps on one item earn the badge."},"unit":{"type":"string","description":"What one step is, with the same values as for `count`."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many steps are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."}}}},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","days","max","items"],"properties":{"kind":{"const":"time"},"days":{"type":"integer","description":"How many days an item must have been owned."},"max":{"type":"integer","description":"How many events on one item earn the badge."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned","owned_since","ready_at"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many events are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."},"owned_since":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item was added to the account."},"ready_at":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item has been owned for `days` days. It can be in the past."}}}}}},{"type":"object","required":["kind","parts"],"properties":{"kind":{"const":"parts"},"parts":{"type":"array","description":"The counts that must all reach their `max`.","items":{"type":"object","required":["key","now","max"],"properties":{"key":{"type":"string","enum":["repairs","tasks","items"],"description":"What this count is of, as `unit` describes it."},"now":{"type":"integer","description":"How many are done. Never more than `max`."},"max":{"type":"integer","description":"How many are needed."}}}}}}]},{"type":"null"}]}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"account"}},"/user/badges/workbench":{"get":{"operationId":"getCurrentUserWorkbenchBadges","summary":"List Workbench item badges","description":"Lists the Workbench badges you can earn on one item, with whether you have earned each one there. Only badges eligible for the item's device category are listed. `earned`, `times_earned`, and `date` count only awards on this item. Earned badges come first, most recently earned first, followed by unearned badges ordered by `badgeid`.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbench_itemid","in":"query","required":true,"schema":{"type":"integer"},"description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},{"name":"progress","in":"query","required":false,"schema":{"type":"boolean"},"description":"Send `?progress=true` to add `key` and `progress` to each badge. It needs you to be a member of the item."},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The language for badge `name` and `description`, as one of the [language codes](#api-1/description/language-codes). Without it, or with a code the site doesn't have, you get English."}],"responses":{"200":{"description":"The Workbench badges for the item.","content":{"application/json":{"schema":{"type":"array","description":"The badges, each with whether the user has earned it. The operation says how the list is ordered.","items":{"type":"object","description":"A badge, with the user's standing on it.","properties":{"earned":{"type":"boolean","description":"Whether the user has earned this badge"},"times_earned":{"type":"integer","description":"How many times the user has earned the badge; 0 when they haven't."},"date":{"type":["integer","null"],"format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the latest time the user earned the badge; `null` when they haven't."},"badge":{"type":"object","description":"A badge people can earn on iFixit.","properties":{"badgeid":{"type":"integer","description":"The badge's ID, as listed by `GET /users/{userid}/badges`."},"name":{"type":"string","description":"The badge's name, in the language you ask for with `langid`."},"type":{"type":"string","enum":["bronze","silver","gold"],"description":"The badge's tier."},"category":{"type":"string","description":"The part of iFixit the badge belongs to: `badgeGuide` (guides), `badgeAnswers` (Answers), `badgeWorkbench` (Workbench), or `badgeGeneral` (everything else)."},"description":{"type":"string","description":"What a user does to earn the badge, in the language you ask for with `langid`."},"multiple":{"type":"boolean","description":"`true` when the badge can be earned more than once. Workbench badges with this set are earned once per item."},"num_users":{"type":"integer","description":"How many times the badge has been awarded, across all users. A badge that can be earned more than once counts every award, so this can be higher than the number of users who hold it."},"icon":{"type":["string","null"],"description":"The name of the badge's Font Awesome icon, such as `id-card`; `null` when the badge has no icon."},"image":{"type":"string","description":"URL of the badge's image; an empty string when the badge has no image."},"secondary_color":{"type":"string","description":"The badge's color, by name, such as `camelot`."}}},"key":{"type":"string","description":"The badge's identifier, such as `WorkbenchBuilder`. It matches `key` in the `badge_changes` of Workbench task responses. Present only when you send `progress`."},"progress":{"description":"How far the user is toward the badge. Present only when you send `progress`. It is `null` for a badge that isn't a Workbench badge, and for a Workbench badge with nothing to count.","oneOf":[{"description":"How far a user is toward a Workbench badge. `kind` says which shape this is. `count`: one count across the account, `now` of `max`. `items`: a count per item, with one award for each item that reaches `max`. `items` holds each item the badge can be earned on, unearned items first and the closest to `max` first among them. `time`: like `items`, but an item must also have been owned for `days` days. `ready_at` is when it has been. `parts`: several counts, all of which must reach their `max`.","oneOf":[{"type":"object","required":["kind","now","max","unit","requires"],"properties":{"kind":{"const":"count"},"now":{"type":"integer","description":"How many steps are done. Never more than `max`."},"max":{"type":"integer","description":"How many steps earn the badge."},"unit":{"type":"string","description":"What one step is. `items` is an item on the Workbench, `repairs` a repair, `repaired_items` an item with a repair, `tasks` a completed task, and `readings` a logged reading. The other values name a kind of completed task, such as `battery_tasks` or `oil_changes`."},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","max","unit","items","requires"],"properties":{"kind":{"const":"items"},"max":{"type":"integer","description":"How many steps on one item earn the badge."},"unit":{"type":"string","description":"What one step is, with the same values as for `count`."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many steps are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."}}}},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","days","max","items"],"properties":{"kind":{"const":"time"},"days":{"type":"integer","description":"How many days an item must have been owned."},"max":{"type":"integer","description":"How many events on one item earn the badge."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned","owned_since","ready_at"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many events are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."},"owned_since":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item was added to the account."},"ready_at":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item has been owned for `days` days. It can be in the past."}}}}}},{"type":"object","required":["kind","parts"],"properties":{"kind":{"const":"parts"},"parts":{"type":"array","description":"The counts that must all reach their `max`.","items":{"type":"object","required":["key","now","max"],"properties":{"key":{"type":"string","enum":["repairs","tasks","items"],"description":"What this count is of, as `unit` describes it."},"now":{"type":"integer","description":"How many are done. Never more than `max`."},"max":{"type":"integer","description":"How many are needed."}}}}}}]},{"type":"null"}]}}}}}}},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"You sent `progress` and aren't a member of the item.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"422":{"description":"`workbench_itemid` is missing, zero, or not a number.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"account"}},"/users/{userid}/favorites/guides":{"get":{"operationId":"getUserFavoriteGuides","summary":"List a user's favorite guides","description":"Lists the guides a user has favorited, most recently favorited first. The list isn't paginated. Private guides and guides that exist only as a prerequisite of another guide are left out, so the list can be shorter than the number of guides the user favorited. Guides come back in the site's default language, and favorites with no translation in that language are left out.","tags":["Users"],"parameters":[{"name":"userid","in":"path","required":true,"description":"The `userid` of the account, from `GET /users`.","schema":{"type":"integer"}}],"responses":{"200":{"description":"List of favorited guides","content":{"application/json":{"schema":{"type":"array","description":"List of favorited guide entries","items":{"type":"object","description":"A favorited guide entry.","properties":{"date":{"type":"integer","format":"int64","description":"UNIX timestamp when the user favorited the guide"},"guide":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"list"}},"/user/favorites/guides":{"get":{"operationId":"getCurrentUserFavoriteGuides","summary":"List the current user's favorite guides","description":"Lists the guides you have favorited, most recently favorited first. The list isn't paginated. Unlike `GET /users/{userid}/favorites/guides`, it includes private guides and guides that exist only as a prerequisite of another guide. Guides come back in the site's default language, and favorites with no translation in that language are left out.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"responses":{"200":{"description":"List of favorited guides","content":{"application/json":{"schema":{"type":"array","description":"List of favorited guide entries","items":{"type":"object","description":"A favorited guide entry.","properties":{"date":{"type":"integer","format":"int64","description":"UNIX timestamp when the user favorited the guide"},"guide":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"account"}},"/user/favorites/guides/{guideid}":{"put":{"operationId":"favoriteGuide","summary":"Favorite a guide","description":"Adds a guide to your favorites. The body is optional: send `langid` to favorite a particular translation. Favoriting a guide you already favorited returns 204 and changes nothing, including the stored language and date.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"langid":{"type":"string","description":"The language to favorite the guide in, as one of the [language codes](#api-1/description/language-codes). The guide must have a translation in it. The default is the guide's original language."}}}}}},"responses":{"204":{"description":"The request worked. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The guide doesn't exist, or has no translation in `langid`.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"unfavoriteGuide","summary":"Unfavorite a guide","description":"Removes a guide from your favorites, in every language of the guide. Returns 204 even when the guide wasn't one of your favorites.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}}],"responses":{"204":{"description":"The request worked. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"write"}},"/users/{userid}/guides":{"get":{"operationId":"getUserGuides","summary":"List a user's authored guides","description":"Lists guides the user has written or contributed to through accepted edits. Private guides and guides that exist only as a prerequisite of another guide are left out. A guide appears once for each language contributed to, so the same `guideid` can appear more than once with different `locale` values. Results are ordered by `guideid`, then `locale`; `order` sets the direction.\n`offset` and `limit` count guides before those are left out, so a page can hold fewer than `limit` entries.","tags":["Users"],"parameters":[{"name":"userid","in":"path","required":true,"description":"The `userid` of the account, from `GET /users`.","schema":{"type":"integer"}},{"name":"order","in":"query","description":"Sort direction, `ASC` or `DESC`.","schema":{"type":"string","enum":["ASC","DESC"],"default":"ASC"}},{"name":"offset","in":"query","description":"Number of items to skip from the start of the list. See [paging](#api-1/description/paging).","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","description":"Maximum number of items to return. A value above 200 returns 200 items.","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}}],"responses":{"200":{"description":"List of authored guides","content":{"application/json":{"schema":{"type":"array","description":"List of guide summaries","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"list"}},"/user/guides":{"get":{"operationId":"getCurrentUserGuides","summary":"List the current user's guides","description":"Lists guides you have written or contributed to through accepted edits, including private guides and guides that exist only as a prerequisite of another guide. A guide appears once for each language contributed to, so the same `guideid` can appear more than once with different `locale` values. Results are ordered by `guideid`, then `locale`, not by date; `order` sets the direction.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"order","in":"query","description":"Sort direction, `ASC` or `DESC`.","schema":{"type":"string","enum":["ASC","DESC"],"default":"ASC"}},{"name":"offset","in":"query","description":"Number of items to skip from the start of the list. See [paging](#api-1/description/paging).","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","description":"Maximum number of items to return. A value above 200 returns 200 items.","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}}],"responses":{"200":{"description":"List of authored guides","content":{"application/json":{"schema":{"type":"array","description":"List of guide summaries","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"account"}},"/users/{userid}/completions":{"get":{"operationId":"getUserCompletions","summary":"List a user's completed guides","description":"Lists guides the user has completed, ordered by `guideid`, lowest first. Completion dates aren't returned. Private guides and guides that exist only as a prerequisite of another guide are left out, even from the owner's own view; `GET /user/completions` includes them.\n`offset` and `limit` count completions before those guides are left out, so a page can hold fewer than `limit` entries.","tags":["Users"],"parameters":[{"name":"userid","in":"path","required":true,"description":"The `userid` of the account, from `GET /users`.","schema":{"type":"integer"}},{"name":"offset","in":"query","description":"Number of items to skip from the start of the list. See [paging](#api-1/description/paging).","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","description":"Maximum number of items to return. A value above 200 returns 200 items.","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}}],"responses":{"200":{"description":"List of completed guides","content":{"application/json":{"schema":{"type":"array","description":"List of guide summaries","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"list"}},"/user/completions":{"get":{"operationId":"getCurrentUserCompletions","summary":"List the current user's completed guides","description":"Lists guides you have completed, including private guides and guides that exist only as a prerequisite of another guide. They are ordered by `guideid`, lowest first. Completion dates aren't returned.\n`offset` and `limit` count completions before guides without a translation in the site's default language are left out, so a page can hold fewer than `limit` entries.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"offset","in":"query","description":"Number of items to skip from the start of the list. See [paging](#api-1/description/paging).","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","description":"Maximum number of items to return. A value above 200 returns 200 items.","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}}],"responses":{"200":{"description":"List of completed guides","content":{"application/json":{"schema":{"type":"array","description":"List of guide summaries","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"account"}},"/user/flags":{"get":{"operationId":"getUserFlags","summary":"List the guide flags the current user can change","description":"Lists the flags you can add to guides or remove from them. The response has one key, `guide`, holding an object keyed by `flagid`. A flag that needs a privilege is listed only for accounts that hold it.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"responses":{"200":{"description":"List of flags","content":{"application/json":{"schema":{"type":"object","properties":{"guide":{"type":"object","description":"Map of `flagid` to flag definition","additionalProperties":{"type":"object","properties":{"flagid":{"type":"string","description":"The flag's ID, the same as its key in `guide`. Send it to add or remove the flag on a guide."},"title":{"type":"string","description":"The flag's name."},"text":{"type":"string","description":"Explains what the flag means."},"image":{"type":"string","format":"uri","description":"URL of the flag's icon."},"isFontAwesome":{"type":"boolean","description":"`true` when the flag's icon is a Font Awesome icon rather than an image."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"account"}},"/user/media/images":{"get":{"operationId":"getUserImages","summary":"List the current user's images","description":"Lists images in your media manager, including copies made by cropping or annotating; a copy's `srcid` is the ID of its source image. Results are ordered by source image ID, lowest first, with each copy next to its source.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"ratio","in":"query","description":"Only return images with this aspect ratio: `ONE_ONE` (1:1), `FOUR_THREE` (4:3) or `VARIABLE` (no fixed ratio). `ALL` returns every image, and is the default.","schema":{"type":"string","enum":["ALL","ONE_ONE","FOUR_THREE","VARIABLE"],"default":"ALL"}},{"name":"minHeight","in":"query","description":"Only return images at least this many pixels tall.","schema":{"type":"integer"}},{"name":"minWidth","in":"query","description":"Only return images at least this many pixels wide.","schema":{"type":"integer"}},{"name":"offset","in":"query","description":"Number of items to skip from the start of the list. See [paging](#api-1/description/paging).","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","description":"Maximum number of items to return. A value above 200 returns 200 items.","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}}],"responses":{"200":{"description":"List of images","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"An image's URLs together with its metadata.","properties":{"image":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy, such as a crop. `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels.","example":2420},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels.","example":1815},"ratio":{"type":"string","description":"Shape the image is held to. `ONE_ONE` is square and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"],"example":"FOUR_THREE"},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source, as steps separated by semicolons, such as `crop,1x1,250x250;enhance;`. `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) read from the image, as an object keyed by tag name. An empty array `[]`, not an object, when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"account"},"post":{"operationId":"uploadImage","summary":"Upload an image","description":"Uploads an image to your media manager. Send the raw image file as the request body, with its image type as the `Content-Type`, such as `image/jpeg`. Send its filename in the `file` query parameter. Send a JPEG, GIF, PNG, BMP, TIFF, HEIC, WEBP, or AVIF image. The file must be under 80 MB and at least 50x50 pixels. The response is the image's metadata, and `image.id` is its `imageid`. To upload a video or document, use `POST /user/media/upload`.\n`curl -X POST --data-binary @fan.jpg -H \"Content-Type: image/jpeg\" -H \"Authorization: Bearer $IFIXIT_TOKEN\" \"https://www.ifixit.com/api/2.0/user/media/images?file=fan.jpg\"`\nThe response returns once the image is stored, before every resized version exists.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"file","in":"query","required":true,"description":"The filename of the image, with its extension. The extension sets the file type.","schema":{"type":"string"}},{"name":"cropToRatio","in":"query","description":"Fit the image to this aspect ratio, `ONE_ONE` (1:1) or `FOUR_THREE` (4:3), when it doesn't already match. It is cropped, or padded when a crop would remove more than 10%. A cropped copy replaces the original in your media manager, but the response still describes the original.","schema":{"type":"string","enum":["ONE_ONE","FOUR_THREE"]}}],"requestBody":{"required":true,"content":{"image/*":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"Image uploaded","content":{"application/json":{"schema":{"type":"object","description":"An image's URLs together with its metadata.","properties":{"image":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy, such as a crop. `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels.","example":2420},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels.","example":1815},"ratio":{"type":"string","description":"Shape the image is held to. `ONE_ONE` is square and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"],"example":"FOUR_THREE"},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source, as steps separated by semicolons, such as `crop,1x1,250x250;enhance;`. `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) read from the image, as an object keyed by tag name. An empty array `[]`, not an object, when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}}}}},"400":{"description":"The image was rejected. The body names the file.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"description":"`file` is missing, its extension isn't accepted, the file is over the size limit, or `cropToRatio` isn't valid.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/user/media/images/{image}":{"delete":{"operationId":"deleteImages","summary":"Delete images","description":"Removes images from your media manager. Only the media manager entry is removed; guides and wikis that use the images are unaffected. Send up to 1000 comma-separated IDs; more returns 422. IDs that don't exist or belong to another account are skipped, and the response is 204 however many were removed.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"image","in":"path","required":true,"description":"The `imageid` of each image to delete, from `GET /user/media/images`, comma-separated, at most 1000.","schema":{"type":"string"}}],"responses":{"204":{"description":"The request worked. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"description":"More than 1000 IDs.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"},"post":{"operationId":"copyImageToMediaManager","summary":"Copy an image to the media manager","description":"Copies an image into your media manager and returns the copy's metadata. You can't copy a photo or attachment of a Workbench item or event, or the thumbnail of a PDF or video attached there, unless you're a member of the item.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"image","in":"path","required":true,"description":"The `imageid` or `guid` of the image to copy, from `GET /user/media/images`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Image copied","content":{"application/json":{"schema":{"type":"object","description":"An image's URLs together with its metadata.","properties":{"image":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy, such as a crop. `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels.","example":2420},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels.","example":1815},"ratio":{"type":"string","description":"Shape the image is held to. `ONE_ONE` is square and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"],"example":"FOUR_THREE"},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source, as steps separated by semicolons, such as `crop,1x1,250x250;enhance;`. `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) read from the image, as an object keyed by tag name. An empty array `[]`, not an object, when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The image belongs to a Workbench item or event, and you aren't a member of the item.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"write"}},"/user/media/images/{image}/rotate":{"post":{"operationId":"rotateImageInMediaManager","summary":"Rotate an image in the media manager","description":"Starts a job that makes a rotated copy of an image. When the job succeeds, the copy replaces the original in your media manager. Later edits apply to the rotated image.\nPoll `GET /user/media/images/rotate/{jobID}` with the job's ID until `status` is `complete` or `failed`.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"image","in":"path","required":true,"description":"The `imageid` or `guid` of the image to rotate, from `GET /user/media/images`.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["degrees"],"properties":{"degrees":{"type":"integer","enum":[90,180,270],"description":"How far to turn the image clockwise: `90` is a quarter turn, `180` turns it upside down, and `270` is a quarter turn the other way."},"jobID":{"type":"string","pattern":"^rotateImage_[A-Za-z0-9_-]{16,128}$","description":"A key you make up, starting with `rotateImage_` and then 16 to 128 letters, digits, `_`, or `-`. If you resend the same image, `degrees`, and `jobID`, you get the original job back and no second rotation starts."}}}}}},"responses":{"202":{"description":"Rotation job queued","content":{"application/json":{"schema":{"type":"object","required":["jobID"],"properties":{"jobID":{"type":"string","description":"The ID of the job."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"409":{"description":"That `jobID` was already used for a different rotation.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"422":{"description":"`degrees` or `jobID` isn't valid.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/user/media/images/rotate/{jobID}":{"get":{"operationId":"getRotateImageStatus","summary":"Get a rotate job's status","description":"Returns the state of a rotation job. You can see only jobs you started; any other job ID returns 404.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"jobID","in":"path","required":true,"description":"The `jobID` from `POST /user/media/images/{image}/rotate`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Job status","content":{"application/json":{"schema":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["processing","complete","failed"],"description":"`processing` while the job runs, `complete` when the rotated copy exists, `failed` when it couldn't be made and the original image is unchanged."},"item":{"type":"object","description":"The rotated copy, with its display sizes already made. Present when `status` is `complete`.","properties":{"type":{"type":"string","enum":["GuideImage","CartImage","GuideVideoObject","GuideEmbedObject","Document"],"description":"Kind of item: `GuideImage` is an image, `CartImage` is a product image, `GuideVideoObject` is a video, `GuideEmbedObject` is an embed, and `Document` is a document. Only the product image list returns `CartImage`."},"guid":{"type":"string","description":"String that identifies the item."},"imageid":{"type":["integer","null"],"description":"Image ID for images; thumbnail image ID for videos, documents, and embeds; `null` when there is no thumbnail"},"objectid":{"type":"integer","description":"Present for videos and embeds"},"documentid":{"type":"integer","description":"Present for documents"},"srcid":{"type":["integer","null"],"description":"ID of the source item when this item is a derivative; `null` otherwise"},"ratio":{"type":"string","description":"Shape an image is held to: `ONE_ONE` is square, `FOUR_THREE` is 4:3, and `VARIABLE` is any shape."},"mini":{"type":"string","format":"uri","description":"URL of the item or its thumbnail, up to 56 pixels wide."},"thumbnail":{"type":"string","format":"uri","description":"URL of the item or its thumbnail, up to 96 pixels wide."},"standard":{"type":"string","format":"uri","description":"URL of the item or its thumbnail, up to 300 pixels wide."},"medium":{"type":"string","format":"uri","description":"URL of the item or its thumbnail, up to 592 pixels wide."},"original":{"type":"string","format":"uri","description":"URL of the full-resolution image."},"width":{"type":"integer","description":"Width, in pixels."},"height":{"type":"integer","description":"Height, in pixels."},"filename":{"type":["string","null"],"description":"Original filename, or embed title for embeds"},"date":{"description":"UNIX timestamp, in seconds, of the upload or creation. Images, videos, and embeds can include a fraction of a second."},"filter_state":{"description":"Whether a media item can be attached under the `accepts` filter collection. The API decides, so check this value instead of testing the item yourself. `true` means attach it as is. `\"crop\"` means crop it first. `false` means the collection doesn't accept this kind of item, or the request had no `accepts`. An object with a `message` means the item can't be used as it is, for example because an image is below the collection's minimum resolution or isn't an allowed file type.","oneOf":[{"type":"boolean","description":"`true` when the item can be attached as it is. `false` when the collection doesn't take this kind of item, or the request sent no `accepts`."},{"type":"string","enum":["crop"],"description":"The item must be cropped before it can be attached."},{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"The reason the item can't be attached, for a person to read."}}}]}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"account"}},"/user/media/videos":{"get":{"operationId":"getUserVideos","summary":"List the current user's videos","description":"Lists the videos in your media manager, sorted by `videoid`, not by upload date or filename; `order` sets the direction.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"offset","in":"query","description":"Number of items to skip from the start of the list. See [paging](#api-1/description/paging).","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","description":"Maximum number of items to return. A value above 200 returns 200 items.","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}},{"name":"order","in":"query","description":"Sort direction, `ASC` or `DESC`.","schema":{"type":"string","enum":["ASC","DESC"],"default":"ASC"}}],"responses":{"200":{"description":"List of videos","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"A video, its thumbnail, and its encoded files.","properties":{"videoid":{"type":"integer","description":"The video's ID. Use it with `GET /media/videos/{videoid}`. A guide uses `objectid` instead."},"objectid":{"type":"integer","description":"ID to use this video in a guide. Send it as `objectid` for a guide's intro video, or as `media.data` with `type: object` on a step. The video must be in your media manager."},"srcid":{"type":["integer","null"],"description":"`videoid` of the video this one was made from; `null` for a video that was uploaded."},"filename":{"type":"string","description":"The filename the video was uploaded with."},"duration":{"type":"integer","description":"Length of the video, in milliseconds."},"width":{"type":"integer","description":"Video width in pixels"},"height":{"type":"integer","description":"Video height in pixels"},"image":{"type":["object","null"],"description":"Thumbnail image info, in the same structure as the `/media/images` response. `null` when the video has no thumbnail.","properties":{"image":{"type":"object","description":"Image object with size URLs","additionalProperties":true},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy; `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels."},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels."},"ratio":{"type":"string","description":"Shape the image is held to: `ONE_ONE` is square, `FOUR_THREE` is 4:3, and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"]},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source; `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) of the image, keyed by tag name. An empty array when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}},"meta":{"type":["object","null"],"description":"Technical details of the uploaded video file. `null` when none were recorded, so don't rely on it being there.","properties":{"video_codec":{"type":"string","description":"Name of the video codec, such as `h264`."},"audio_codec":{"type":"string","description":"Name of the audio codec, such as `aac`."},"frame_rate":{"type":"number","description":"Frames per second."},"width":{"type":"integer","description":"Width of the uploaded file, in pixels."},"height":{"type":"integer","description":"Height of the uploaded file, in pixels."},"duration_in_ms":{"type":"integer","description":"Length of the video, in milliseconds."},"file_size_in_bytes":{"type":"integer","description":"Size of the uploaded file, in bytes."},"video_bitrate_in_kbps":{"type":"integer","description":"Video bitrate, in kilobits per second."},"audio_bitrate_in_kbps":{"type":"integer","description":"Audio bitrate, in kilobits per second."},"total_bitrate_in_kbps":{"type":"integer","description":"Video and audio bitrate together, in kilobits per second."},"audio_sample_rate":{"type":"integer","description":"Audio samples per second, in hertz."},"channels":{"type":"string","description":"Number of audio channels, as a string such as `1`."},"format":{"type":"string","description":"Container format of the uploaded file, such as `mpeg4`."},"state":{"type":"string","description":"`finished` when the file's details are complete. `processing` and `failed` mean they aren't.","enum":["finished","processing","failed"]},"md5_checksum":{"type":["string","null"],"description":"MD5 checksum of the uploaded file; `null` when not recorded."},"id":{"type":"integer","description":"An identifier for the recorded details."}}},"encodings":{"type":"array","description":"The encoded versions that exist for the video. The array is empty when none do, for example while the video is still processing. An encoding's `width` and `height` are the size it is labeled with. The file keeps the video's aspect ratio, so its actual size can differ.","items":{"type":"object","properties":{"column":{"type":"string","description":"Name of the encoding, such as `MP4_720`."},"label":{"type":"string","description":"Quality label for people, such as `480p`."},"width":{"type":"integer","description":"Width, in pixels."},"height":{"type":"integer","description":"Height, in pixels."},"codecs":{"type":"string","description":"The codecs in the file, written the way a browser expects them in a `<source>` element's `type`, such as `avc1.4D4029, mp4a.40.2`."},"mime":{"type":"string","description":"The file's MIME type, such as `video/mp4`."},"format":{"type":"string","description":"File format of the encoding, such as `mp4`."},"url":{"type":"string","format":"uri","description":"URL of the encoded video file."},"always_generate":{"type":"boolean","description":"`true` when every video gets this encoding."}}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"account"}},"/user/media/upload":{"post":{"operationId":"uploadMedia","summary":"Upload a media file","description":"Uploads a file to your media manager. Send the raw file as the request body with `Content-Type: application/octet-stream`, and its filename in the `file` query parameter. It accepts images (JPEG, GIF, PNG, BMP, TIFF, HEIC, WEBP, AVIF), videos, PDFs, text (TXT), Markdown, and 3D models. For an image alone, `POST /user/media/images` returns more metadata. An animated GIF is stored as a video. For an unsupported extension, the 422 message lists the accepted ones.\n`curl -X POST --data-binary @manual.pdf -H \"Content-Type: application/octet-stream\" -H \"Authorization: Bearer $IFIXIT_TOKEN\" \"https://www.ifixit.com/api/2.0/user/media/upload?file=manual.pdf\"`\nAn image must be under 80 MB and a document under 150 MB. Videos have a size limit set by the site. The response returns before resized images and video encodings exist.","tags":["Users"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"file","in":"query","required":true,"description":"The filename of the file, with its extension. The extension sets the media type.","schema":{"type":"string"}},{"name":"cropToRatio","in":"query","description":"Fit an image to this aspect ratio, `ONE_ONE` (1:1) or `FOUR_THREE` (4:3). Other files aren't cropped, but any other value returns 422 whatever the file is. A cropped image replaces the original in your media manager, but the response still reports the original's `id` and `guid`.","schema":{"type":"string","enum":["ONE_ONE","FOUR_THREE"]}}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"Media uploaded","content":{"application/json":{"schema":{"type":"object","properties":{"media_type":{"type":"string","enum":["image","video","document"],"description":"The kind of media: `image`, `video`, or `document`. A PDF, text file, or 3D model is a `document`."},"type":{"type":"string","description":"The file's group, set by its extension, such as `image`, `video`, `pdf`, `text`, or `3d_model`."},"id":{"type":["integer","string"],"description":"The `imageid` for an image, the `objectid` for a video, or the `documentid` for a document."},"videoid":{"type":"integer","description":"The video's own ID, as `videoid` in `GET /user/media/videos`. Present for videos only."},"name":{"type":"string","description":"The filename you sent."},"guid":{"type":"string","description":"The stored file's unique `guid`. For an image, you can send it as `{image}` in `/user/media/images/{image}`."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"description":"`file` is missing, the extension isn't accepted, the file is too large or too small, or `cropToRatio` isn't valid.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/guides":{"get":{"operationId":"listGuides","summary":"List guides","description":"Lists guides in the site's default language, sorted by `guideid`. To get specific guides, send up to 50 IDs in `guideids`. The API then ignores the other filters and paging.","tags":["Guides"],"parameters":[{"name":"guideids","in":"query","description":"Comma-separated `guideid`s to return. The API uses only the first 50, and leaves out IDs that don't exist or that are private.","schema":{"type":"string"}},{"name":"filter","in":"query","description":"Returns only guides of these types, separated by commas, such as `repair,replacement`. Ignored when you send `guideids`.","schema":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]}},{"name":"order","in":"query","description":"Sort direction, `ASC` or `DESC`.","schema":{"type":"string","enum":["ASC","DESC"],"default":"ASC"}},{"name":"offset","in":"query","description":"Number of items to skip from the start of the list. See [paging](#api-1/description/paging).","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","description":"Maximum number of items to return. A value above 200 returns 200 items.","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}},{"name":"modifiedSince","in":"query","description":"Returns only items last edited at or after this time, as a UNIX timestamp (seconds since January 1, 1970, UTC), such as `1767225600` for January 1, 2026.","schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"A page of guide summaries.","content":{"application/json":{"schema":{"type":"array","description":"List of guide summaries.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"list"},"post":{"operationId":"createGuide","summary":"Create a guide","description":"Creates a guide. The smallest request is `{\"category\": \"iPhone 14\", \"type\": \"replacement\", \"subject\": \"Battery\"}`. Add steps with `POST /guides/{guideid}/steps`.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["category","type"],"properties":{"category":{"type":"string","description":"The title of the category the guide belongs to, from the keys of `GET /categories`, written exactly as it appears there. If the category doesn't exist, the request returns 422."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"subject":{"type":"string","description":"Free text naming the part or component the guide covers, such as `Battery`. A `replacement`, `installation`, `repair`, or `disassembly` guide needs one, even if you send a `title`. If you don't send a `title`, the API writes one that names the subject. For the other types, leave it out. The response shows it as `subject`."},"title":{"type":"string","description":"The guide's title. If you don't send one, the API writes a title from `category`, `subject`, and `type`."},"introduction":{"type":"string","description":"The guide's introduction, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). It can have up to 3,000 characters and 60 lines. A longer text returns 422."},"conclusion":{"type":"string","description":"The guide's conclusion, in wiki markup. It can have up to 2,000 characters and 30 lines. A generic conclusion is shown if you don't send one."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_min":{"type":"integer","description":"The shortest time the guide takes, in seconds. The API limits it to 0 through 31,556,926 (one year). If it is above `time_required_max`, the API swaps the two."},"time_required_max":{"type":"integer","description":"The longest time the guide takes, in seconds. The API limits it to 0 through 31,556,926 (one year)."},"image":{"type":"integer","description":"The `imageid` of the guide's main image, from `GET /user/media/images`, or upload one with `POST /user/media/images`. The image must be in your media manager and at least 800 pixels wide or 600 pixels tall. The API crops images that aren't 4:3 and converts other formats to JPEG, so the saved `imageid` can differ from the one you sent."},"flags":{"type":"array","items":{"type":"string"},"description":"The `flagid`s to put on the guide, in display order. Send only the flags that `GET /user/flags` lists under `guide`. Any other `flagid` returns 422."},"prerequisites":{"type":"array","items":{"type":"integer"},"description":"The `guideid`s of guides to do first, from `GET /guides`. You must be able to view each guide. A guide can't be its own prerequisite, and prerequisites can't form a loop."},"parts":{"type":"array","description":"The parts the guide needs, in display order. Each is an object with a `name`, such as `{\"name\": \"Replacement battery\", \"quantity\": 1}`.","items":{"type":"object","description":"A tool or part you send to `POST /guides` or `PATCH /guides/{guideid}`. Only `name` is required. The API matches `name` to an item's wiki page and saves the page's title. A name that matches no page creates a new item page from `summary` and `url`. For a name that matches a page, it ignores `summary` and `url`. The response shows the saved values. A list can't hold the same name and `type` twice, whatever the case, and only the first item in a list can be featured. Either returns 422.","required":["name"],"properties":{"name":{"type":"string","description":"The item's name, as the `wiki_title` of the matching item in a guide response. The API saves the title of the item page it matches."},"type":{"type":"string","description":"The variant of the item, such as a size, if the guide names one. Two entries with the same name and `type` count as the same item."},"quantity":{"type":"integer","default":1,"description":"How many of the item the guide needs, above 0."},"notes":{"type":"string","nullable":true,"description":"A note about how this guide uses the item."},"isoptional":{"type":"boolean","description":"Send `true` if the guide can be done without this item."},"featured":{"type":"boolean","description":"Send `true` to mark this as the guide's lead part or tool. Only the first item in the list can be featured."},"summary":{"type":"string","description":"Description for the new item page. Used only when `name` matches no existing item."},"url":{"type":"string","format":"uri","description":"Supplier link for the new item page. Used only when `name` matches no existing item."}}}},"tools":{"type":"array","description":"The tools the guide needs, in display order. Each is an object with a `name`, such as `{\"name\": \"Spudger\", \"quantity\": 1}`.","items":{"type":"object","description":"A tool or part you send to `POST /guides` or `PATCH /guides/{guideid}`. Only `name` is required. The API matches `name` to an item's wiki page and saves the page's title. A name that matches no page creates a new item page from `summary` and `url`. For a name that matches a page, it ignores `summary` and `url`. The response shows the saved values. A list can't hold the same name and `type` twice, whatever the case, and only the first item in a list can be featured. Either returns 422.","required":["name"],"properties":{"name":{"type":"string","description":"The item's name, as the `wiki_title` of the matching item in a guide response. The API saves the title of the item page it matches."},"type":{"type":"string","description":"The variant of the item, such as a size, if the guide names one. Two entries with the same name and `type` count as the same item."},"quantity":{"type":"integer","default":1,"description":"How many of the item the guide needs, above 0."},"notes":{"type":"string","nullable":true,"description":"A note about how this guide uses the item."},"isoptional":{"type":"boolean","description":"Send `true` if the guide can be done without this item."},"featured":{"type":"boolean","description":"Send `true` to mark this as the guide's lead part or tool. Only the first item in the list can be featured."},"summary":{"type":"string","description":"Description for the new item page. Used only when `name` matches no existing item."},"url":{"type":"string","format":"uri","description":"Supplier link for the new item page. Used only when `name` matches no existing item."}}}},"documents":{"type":"array","description":"The `documentid`s of documents to attach to the guide. Each document must be in your media manager. Upload one with `POST /user/media/upload`, which returns its `documentid` as `id`.","items":{"type":"integer"}},"featured_documentid":{"type":"integer","description":"The `documentid` of the document to feature on the guide. It must be one of the guide's `documents`."},"summary":{"type":"string","description":"A short description of the guide, up to 156 characters. A longer text returns 422. Responses don't return it: their `summary` is always an excerpt from the start of the introduction."},"objectid":{"type":["integer","null"],"description":"The `objectid` of the video to show in the introduction, from `GET /user/media/videos`, or upload one with `POST /user/media/upload`, which returns it as `id`. The video must be in your media manager."},"public":{"type":"boolean","description":"`true` makes the guide public. A guide is private unless you send `true`."},"langid":{"type":"string","description":"The language the guide is written in, as one of the [language codes](#api-1/description/language-codes). The default is the site's default language."}}},"examples":{"replacement":{"summary":"Create a private replacement guide","value":{"category":"Acme Toaster 2000","type":"replacement","subject":"Heating Element","title":"Acme Toaster 2000 Heating Element Replacement","introduction":"Replace a heating element that no longer glows.","difficulty":"Moderate","time_required_min":1200,"time_required_max":2400,"tools":[{"name":"Phillips #1 Screwdriver"}],"public":false}}}}}},"responses":{"201":{"description":"The new guide. Its `guideid` is the ID to use in later requests.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"400":{"description":"The content was rejected, or the request body isn't valid JSON.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"The category already has the most guides it can hold. The `message` gives the number.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"422":{"description":"A field is missing or isn't valid. `errors` lists problems with fields.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/guides/{guideid}":{"get":{"operationId":"getGuide","summary":"Get a guide","description":"Returns a guide with its steps, parts, tools, and prerequisites. Without `langid`, you get the guide in the site's default language, and an unknown `langid` returns 422. If the guide has no translation in `langid`, you get it in its original language. Send `videoInfo` to add `video_info`, and `stepComments` to limit each step's `comments` to the first 20. Send either as a query parameter set to `1`, such as `?videoInfo=1&stepComments=1`.","tags":["Guides"],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"excludePrerequisiteSteps","in":"query","description":"Send `1` to leave the steps of prerequisite guides out of `steps`.","schema":{"type":"boolean"}},{"name":"unpatrolled","in":"query","description":"Optional. Leave this out.","schema":{"type":"boolean"}},{"name":"type","in":"query","description":"The format of the response, `JSON` or `XML`. The default is `JSON`. With `XML`, the guide comes back as XML, and so do the errors for a missing guide, a private guide, and an unknown `langid`. This reference doesn't describe the XML.","schema":{"type":"string","enum":["JSON","XML"],"default":"JSON"}},{"name":"langid","in":"query","description":"The language of the content this request reads or changes, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string","pattern":"^[a-z]{2}$","example":"en"}},{"name":"revisionid","in":"query","description":"Returns the guide as it was at one revision in its history. This is not the `revisionid` you send with edits. The request returns 403 or 404 if you can't get that revision. No endpoint lists a guide's history revision IDs. On the website, each snapshot of a guide has its ID as `revisionid` in its web address.","schema":{"type":"integer"}}],"responses":{"200":{"description":"The guide.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You can't view this guide.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"422":{"description":"`langid` isn't a language the site has.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"content","x-badges":[{"name":"Content","color":"#c2e3ff"}]},"patch":{"operationId":"updateGuide","summary":"Update a guide","description":"Changes the fields you send and leaves the others as they are. The smallest request sends the guide's current `revisionid` as a query parameter and one field, such as `{\"title\": \"Replace the battery\"}`. This edits the guide's original-language text, so send the `revisionid` of that version. Use `PATCH /guides/{guideid}/{langid}` to edit a translation. If your values match what is saved, nothing changes and the response holds the current `revisionid`. If your edit waits for review (patrol), `pending_patrol` in the response lists it.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"revisionid","in":"query","description":"Send it in the query string, such as `?revisionid=123`, not in the request body. It is the `revisionid` from the guide or wiki page as you last read it. If someone has edited the page since then, the request returns 409 and the body holds the current guide or page.","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"type":"string","description":"The title of the category to move the guide to, from the keys of `GET /categories`, written exactly as it appears there. If the category doesn't exist, the request returns 422."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"subject":{"type":"string","description":"Free text naming the part or component the guide covers, such as `Battery`. A `replacement`, `installation`, `repair`, or `disassembly` guide must always have one, so send it when you change `type` to one of these. For the other types, leave it out."},"title":{"type":"string","description":"The guide's title."},"introduction":{"type":"string","description":"The guide's introduction, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). It can have up to 3,000 characters and 60 lines."},"conclusion":{"type":"string","description":"The guide's conclusion, in wiki markup. It can have up to 2,000 characters and 30 lines."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required":{"type":"string","maxLength":128,"deprecated":true,"description":"Ignored. Send `time_required_min` and `time_required_max` instead."},"time_required_min":{"type":"integer","description":"The shortest time the guide takes, in seconds. The API limits it to 0 through 31,556,926 (one year). If it is above `time_required_max`, the API swaps the two."},"time_required_max":{"type":"integer","description":"The longest time the guide takes, in seconds. The API limits it to 0 through 31,556,926 (one year)."},"image":{"type":"integer","description":"The `imageid` of the guide's main image, from `GET /user/media/images`, or upload one with `POST /user/media/images`. The image must be in your media manager and at least 800 pixels wide or 600 pixels tall. The API crops images that aren't 4:3 and converts other formats to JPEG, so the saved `imageid` can differ from the one you sent."},"flags":{"type":"array","description":"Replaces the guide's whole list of flags, in display order. Send the `flagid`s from the guide's `flags`, with your changes. The same flags in a new order is a change, and it reorders them on the guide. You can add or remove only the flags that `GET /user/flags` lists under `guide`, and changing any other returns 422. Keep the other flags in the list, though you can move them.","items":{"type":"string"}},"prerequisites":{"type":"array","description":"Replaces the guide's whole list of prerequisites with these `guideid`s, from `GET /guides`. You must be able to view each guide you add. A guide can't be its own prerequisite, and prerequisites can't form a loop.","items":{"type":"integer"}},"parts":{"type":"array","description":"Replaces the guide's whole list of parts, in display order. Each is an object with a `name`, such as `{\"name\": \"Replacement battery\", \"quantity\": 1}`.","items":{"type":"object","description":"A tool or part you send to `POST /guides` or `PATCH /guides/{guideid}`. Only `name` is required. The API matches `name` to an item's wiki page and saves the page's title. A name that matches no page creates a new item page from `summary` and `url`. For a name that matches a page, it ignores `summary` and `url`. The response shows the saved values. A list can't hold the same name and `type` twice, whatever the case, and only the first item in a list can be featured. Either returns 422.","required":["name"],"properties":{"name":{"type":"string","description":"The item's name, as the `wiki_title` of the matching item in a guide response. The API saves the title of the item page it matches."},"type":{"type":"string","description":"The variant of the item, such as a size, if the guide names one. Two entries with the same name and `type` count as the same item."},"quantity":{"type":"integer","default":1,"description":"How many of the item the guide needs, above 0."},"notes":{"type":"string","nullable":true,"description":"A note about how this guide uses the item."},"isoptional":{"type":"boolean","description":"Send `true` if the guide can be done without this item."},"featured":{"type":"boolean","description":"Send `true` to mark this as the guide's lead part or tool. Only the first item in the list can be featured."},"summary":{"type":"string","description":"Description for the new item page. Used only when `name` matches no existing item."},"url":{"type":"string","format":"uri","description":"Supplier link for the new item page. Used only when `name` matches no existing item."}}}},"tools":{"type":"array","description":"Replaces the guide's whole list of tools, in display order. Each is an object with a `name`, such as `{\"name\": \"Spudger\", \"quantity\": 1}`.","items":{"type":"object","description":"A tool or part you send to `POST /guides` or `PATCH /guides/{guideid}`. Only `name` is required. The API matches `name` to an item's wiki page and saves the page's title. A name that matches no page creates a new item page from `summary` and `url`. For a name that matches a page, it ignores `summary` and `url`. The response shows the saved values. A list can't hold the same name and `type` twice, whatever the case, and only the first item in a list can be featured. Either returns 422.","required":["name"],"properties":{"name":{"type":"string","description":"The item's name, as the `wiki_title` of the matching item in a guide response. The API saves the title of the item page it matches."},"type":{"type":"string","description":"The variant of the item, such as a size, if the guide names one. Two entries with the same name and `type` count as the same item."},"quantity":{"type":"integer","default":1,"description":"How many of the item the guide needs, above 0."},"notes":{"type":"string","nullable":true,"description":"A note about how this guide uses the item."},"isoptional":{"type":"boolean","description":"Send `true` if the guide can be done without this item."},"featured":{"type":"boolean","description":"Send `true` to mark this as the guide's lead part or tool. Only the first item in the list can be featured."},"summary":{"type":"string","description":"Description for the new item page. Used only when `name` matches no existing item."},"url":{"type":"string","format":"uri","description":"Supplier link for the new item page. Used only when `name` matches no existing item."}}}},"documents":{"type":"array","description":"Replaces the guide's whole list of documents with these `documentid`s. Each new document must be in your media manager. Upload one with `POST /user/media/upload`, which returns its `documentid` as `id`. A featured document you leave out of the list is no longer featured.","items":{"type":"integer"}},"featured_documentid":{"type":"integer","description":"The `documentid` of the document to feature on the guide. It must be one of the guide's `documents`, including any you send in this request."},"summary":{"type":"string","maxLength":156,"description":"A short description of the guide, up to 156 characters. Responses don't return it: their `summary` is always an excerpt from the start of the introduction."},"objectid":{"type":"integer","nullable":true,"description":"The `objectid` of the video to show in the introduction, from `GET /user/media/videos`, or upload one with `POST /user/media/upload`, which returns it as `id`. The video must be in your media manager. Send `null` to remove the video."},"public":{"type":"boolean","description":"`true` makes the guide public and `false` makes it private. Sending it needs permission to change the guide's privacy, even if the value matches the saved one, or the request returns 403."}}}}}},"responses":{"200":{"description":"The updated guide. Unlike `GET /guides/{guideid}`, `steps` leaves out the steps of prerequisite guides.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"400":{"description":"The server can't process the request as sent. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Invalid parameter: offset must be a non-negative integer"}}}},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"409":{"description":"The `revisionid` is out of date.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"422":{"description":"A field isn't valid, or `revisionid` is missing. `errors` lists problems with fields."}},"x-api-usage-kind":"write"},"delete":{"operationId":"deleteGuide","summary":"Delete a guide","description":"Deletes a guide in every language. Send the guide's current `revisionid` as a query parameter. A guide moderator can bring it back with `POST /guides/{guideid}/{langid}/restore`, one language at a time.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"revisionid","in":"query","description":"Send it in the query string, such as `?revisionid=123`, not in the request body. It is the `revisionid` from the guide or wiki page as you last read it. If someone has edited the page since then, the request returns 409 and the body holds the current guide or page.","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"The request worked. The response has no body."},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"description":"Another account has edited the guide.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"409":{"description":"The `revisionid` is out of date.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"422":{"description":"`revisionid` is missing."}},"x-api-usage-kind":"write"}},"/guides/{guideid}/tags":{"get":{"operationId":"getGuideTags","summary":"List a guide's tags","description":"Lists the guide's tags as strings, sorted alphabetically. Tags that start with `device:`, `product:`, `lang:`, `source:`, or `system:` are left out.","tags":["Guides","Tags"],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}}],"responses":{"200":{"description":"The guide's tags.","content":{"application/json":{"schema":{"type":"array","description":"Tag names, as plain strings.","items":{"type":"string"}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The guide is private, deleted, or doesn't exist. This operation never returns 404. The body is `{\"message\": \"Guide is private.\"}`.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"list"}},"/guides/{guideid}/tag":{"put":{"operationId":"addGuideTag","summary":"Add a tag to a guide","description":"Adds one tag to a guide, and creates the tag if it doesn't exist yet. Send `{\"tag\": \"battery\"}`. The guide's `revisionid` doesn't change, so you don't send one. Requires guide moderator privilege.","tags":["Guides","Tags"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tag"],"properties":{"tag":{"type":"string","description":"The tag to add, up to 32 bytes in UTF-8. A letter outside A to Z takes two to four bytes. If the site lists the tag as a synonym, the API saves its main spelling instead. A tag that starts with `device:`, `product:`, `lang:`, `source:`, or `system:` is saved as a typed tag, and `GET /guides/{guideid}/tags` doesn't list it."}}}}}},"responses":{"200":{"description":"The updated guide. It has no tags field. Call `GET /guides/{guideid}/tags` for the tags.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"400":{"description":"The guide already has this tag.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"422":{"description":"`tag` isn't a string, or it is over 32 bytes.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"removeGuideTag","summary":"Remove a tag from a guide","description":"Removes one tag from a guide. Send `{\"tag\": \"battery\"}`. The guide's `revisionid` doesn't change, so you don't send one. Requires guide moderator privilege.","tags":["Guides","Tags"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tag"],"properties":{"tag":{"type":"string","description":"The tag to remove, spelled as `GET /guides/{guideid}/tags` lists it. The API doesn't look up synonyms here."}}}}}},"responses":{"200":{"description":"The updated guide.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"The guide doesn't exist, or it doesn't have this tag.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"422":{"description":"`tag` isn't a string, or it is over 32 bytes.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/guides/{guideid}/public":{"put":{"operationId":"makeGuidePublic","summary":"Make a guide public","description":"Makes a guide public. Send the guide's current `revisionid` as a query parameter. If the guide is already public, nothing changes and you get the current guide. Requires permission to edit the guide and to change its privacy, which the guide's author and its allowed accounts and teams have. An account with only the student privilege can't change the privacy of a student-owned guide.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"revisionid","in":"query","description":"Send it in the query string, such as `?revisionid=123`, not in the request body. It is the `revisionid` from the guide or wiki page as you last read it. If someone has edited the page since then, the request returns 409 and the body holds the current guide or page.","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"The guide, now public. `steps` leaves out the steps of prerequisite guides.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"description":"The `revisionid` is out of date.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"422":{"description":"`revisionid` is missing."}},"x-api-usage-kind":"write"},"delete":{"operationId":"makeGuidePrivate","summary":"Make a guide private","description":"Makes a guide private. Send the guide's current `revisionid` as a query parameter. If the guide is already private, nothing changes and you get the current guide. Requires permission to edit the guide and to change its privacy, which the guide's author and its allowed accounts and teams have. An account with only the student privilege can't change the privacy of a student-owned guide.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"revisionid","in":"query","description":"Send it in the query string, such as `?revisionid=123`, not in the request body. It is the `revisionid` from the guide or wiki page as you last read it. If someone has edited the page since then, the request returns 409 and the body holds the current guide or page.","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"The guide, now private. `steps` leaves out the steps of prerequisite guides.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"description":"The `revisionid` is out of date.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"422":{"description":"`revisionid` is missing."}},"x-api-usage-kind":"write"}},"/guides/{guideid}/completed":{"put":{"operationId":"markGuideCompleted","summary":"Mark a guide completed","description":"Marks the guide as completed by you. Send no body, or `{\"langid\": \"de\"}` to record the completion against that translation. You can complete a guide once, in any language. A repeat request returns 204 and records nothing. Completing a guide earns reputation for you and for the guide's main contributors.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"langid":{"type":"string","description":"The language of the translation you completed, as one of the [language codes](#api-1/description/language-codes). The guide must have a translation in it. The default is the guide's original language."}}}}}},"responses":{"204":{"description":"The request worked. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"The guide doesn't exist, or it has no translation in `langid`."},"420":{"description":"You've reached a quota: your reputation is too low for this, or you've done it too often. The `message` says which.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"unmarkGuideCompleted","summary":"Mark a guide not completed","description":"Removes your completion mark from the guide and takes back the reputation it earned. The request returns 204 whether or not you had completed the guide.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}}],"responses":{"204":{"description":"The request worked. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"The guide doesn't exist."},"420":{"description":"You've reached a quota: your reputation is too low for this, or you've done it too often. The `message` says which.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/guides/{guideid}/steps":{"post":{"operationId":"createStep","summary":"Create a step","description":"Adds a step to a guide's original-language text. The smallest request is `{\"orderby\": 1, \"lines\": [{\"text\": \"Remove the two screws.\", \"bullet\": \"black\", \"level\": 0}]}`. `orderby` is the new step's position, counting from 1.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["lines","orderby"],"properties":{"lines":{"type":"array","maxItems":8,"description":"The step's lines, in order, up to 8. The first line's `level` must be 0, and each later line's `level` can be at most one more than the line before it.","items":{"type":"object","required":["text","bullet","level"],"properties":{"text":{"type":"string","minLength":1,"maxLength":350,"description":"The line's text, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). It can have 1 to 350 characters."},"bullet":{"type":"string","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"],"description":"The marker in front of the line. A color name, such as `red`, draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin."},"level":{"type":"integer","minimum":0,"maximum":2,"description":"How far the line is indented, from 0 (not indented) to 2."}}}},"orderby":{"type":"integer","minimum":1,"description":"The new step's position, counting from 1. Use a number from 1 to one more than the guide's current number of steps. Any other number returns 422."},"media":{"type":"object","required":["type","data"],"description":"The step's images or video. When `type` is `image`, `data` is a list of up to 3 `imageid`s from `GET /user/media/images`, or upload one with `POST /user/media/images`. Each image must be in your media manager and at least 800 pixels wide or 600 pixels tall. The API crops images that aren't 4:3 and converts other formats to JPEG, so the saved `imageid`s can differ. When `type` is `object`, `data` is one `objectid` from `GET /user/media/videos`, or `null` for none, and the step's images are cleared. Responses use a different format: `type` is `image`, `video`, or `embed`, and `data` holds the details.","properties":{"type":{"type":"string","enum":["image","object"],"description":"`image` sets the step's images, and `object` sets its video or embed."},"data":{"description":"A list of `imageid`s when `type` is `image`. A single `objectid`, or `null`, when it is `object`.","oneOf":[{"type":"array","description":"`imageid`s (for `type=image`)","items":{"type":"integer"}},{"type":["integer","null"],"description":"`objectid` (for `type=object`)"}]}}},"title":{"type":"string","description":"The step's title. The API ignores it for accounts whose only privilege is `Student`. `GET /user` lists your `privileges`."}}}}}},"responses":{"201":{"description":"The guide with the new step. `steps` leaves out the steps of prerequisite guides. The new step is the one in `steps` whose `orderby` is the position you sent. Its `stepid` is there.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"422":{"description":"A field isn't valid, for example a line is over 350 characters or `orderby` is out of range. `errors` lists the problems.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"429":{"description":"You've reached a rate limit. Wait, then try again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Rate limit exceeded. Please try again later."}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying, when the response includes this header."}}}},"x-api-usage-kind":"write"}},"/guides/{guideid}/steps/{stepid}":{"patch":{"operationId":"updateStep","summary":"Update a step","description":"Changes the fields you send and leaves the others as they are. The smallest request sends the step's current `revisionid` as a query parameter and one field, such as `{\"title\": \"Remove the screws\"}`. If your values match what is saved, nothing changes and the response holds the current `revisionid`. If your edit waits for review (patrol), `pending_patrol` in the response lists it.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"stepid","in":"path","required":true,"description":"The `stepid` of the step, from the guide's `steps` in `GET /guides/{guideid}`.","schema":{"type":"integer"}},{"name":"revisionid","in":"query","required":true,"description":"The step's `revisionid` as you last read it, from `steps` in `GET /guides/{guideid}`. It isn't the guide's `revisionid`.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"lines":{"type":"array","maxItems":8,"description":"Replaces all of the step's lines, up to 8. Each line has the same fields and rules as a line in `POST /guides/{guideid}/steps`. Send each line's text as `text`, not `text_raw`.","items":{"type":"object","required":["text","bullet","level"],"properties":{"text":{"type":"string","description":"The line's text, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax), 1 to 350 characters."},"bullet":{"type":"string","description":"The marker in front of the line: one of the colors `black`, `red`, `orange`, `yellow`, `light_blue`, `blue`, `green`, or `violet`, or the icon `icon_note`, `icon_caution`, or `icon_reminder`."},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2."}}}},"media":{"type":"object","required":["type","data"],"description":"Replaces the step's images or video. It has the same format as `media` in `POST /guides/{guideid}/steps`, and `type` can be in any case.","properties":{"type":{"type":"string","enum":["image","object"],"description":"`image` sets the step's images, and `object` sets its video or embed."},"data":{"description":"A list of `imageid`s when `type` is `image`. A single `objectid`, or `null`, when it is `object`.","oneOf":[{"type":"array","items":{"type":"integer"}},{"type":["integer","null"]}]}}},"title":{"type":"string","description":"The step's title. The API ignores it for accounts whose only privilege is `Student`. `GET /user` lists your `privileges`."}}}}}},"responses":{"200":{"description":"The updated step.","content":{"application/json":{"schema":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"The step doesn't exist, or it belongs to another guide.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"409":{"description":"Someone edited the step after you read it. The body holds the current step, not an error.","content":{"application/json":{"schema":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}}}},"422":{"description":"A field isn't valid, or `revisionid` is missing. `errors` lists problems with fields.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"deleteStep","summary":"Delete a step","description":"Deletes a step from a guide. Send the step's current `revisionid` as a query parameter.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"stepid","in":"path","required":true,"description":"The `stepid` of the step, from the guide's `steps` in `GET /guides/{guideid}`.","schema":{"type":"integer"}},{"name":"revisionid","in":"query","required":true,"description":"The step's `revisionid` as you last read it, from `steps` in `GET /guides/{guideid}`. It isn't the guide's `revisionid`.","schema":{"type":"integer"}}],"responses":{"200":{"description":"The guide, without the deleted step. `steps` leaves out the steps of prerequisite guides.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"The guide doesn't exist, or it has no step with this `stepid`.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"409":{"description":"Someone edited the step after you read it. The body holds the current step, not an error.","content":{"application/json":{"schema":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}}}},"422":{"description":"`revisionid` is missing."}},"x-api-usage-kind":"write"}},"/guides/{guideid}/steporder":{"put":{"operationId":"reorderSteps","summary":"Reorder a guide's steps","description":"Sets the order of a guide's steps. Send the guide's current `revisionid` as a query parameter and the new order in `stepids`, such as `{\"stepids\": [12, 10, 11]}`. If the order is the same as the saved one, nothing changes.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"revisionid","in":"query","description":"Send it in the query string, such as `?revisionid=123`, not in the request body. It is the `revisionid` from the guide or wiki page as you last read it. If someone has edited the page since then, the request returns 409 and the body holds the current guide or page.","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["stepids"],"properties":{"stepids":{"type":"array","items":{"type":"integer"},"description":"Every `stepid` in the guide's `steps`, once each, in the order you want."}}}}}},"responses":{"200":{"description":"The guide with its steps in the new order.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"409":{"description":"The `revisionid` is out of date.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"422":{"description":"`stepids` doesn't match the guide's steps, or `revisionid` is missing."}},"x-api-usage-kind":"write"}},"/guides/{guideid}/users":{"get":{"operationId":"getGuideUsers","summary":"List a guide's allowed users","description":"Lists the accounts on a guide's allowed list. An account on the list can see the guide while it is private. The list isn't paged. Requires access to the guide.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}}],"responses":{"200":{"description":"An object whose `users` holds the list of allowed users.","content":{"application/json":{"schema":{"type":"array","description":"A list of accounts, each a short public view.","items":{"type":"object","description":"A short public view of an account. Lists of users and search results hold this shape. Full profiles add more fields.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"list"}},"/guides/{guideid}/users/{userid}":{"put":{"operationId":"addGuideUser","summary":"Add an allowed user to a guide","description":"Adds an account to a guide's allowed list. The account can then see the guide while it is private, and can change the guide's privacy and its allowed lists. Adding an account that is already on the list changes nothing.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"userid","in":"path","required":true,"description":"The `userid` of the account, from `GET /users`.","schema":{"type":"integer"}}],"responses":{"201":{"description":"The account is on the list. The body is an object whose `users` holds the guide's allowed users.","content":{"application/json":{"schema":{"type":"array","description":"A list of accounts, each a short public view.","items":{"type":"object","description":"A short public view of an account. Lists of users and search results hold this shape. Full profiles add more fields.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"The account or the guide doesn't exist.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"removeGuideUser","summary":"Remove an allowed user from a guide","description":"Removes an account from a guide's allowed list. Removing an account that isn't on the list succeeds and changes nothing.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"userid","in":"path","required":true,"description":"The `userid` of the account, from `GET /users`.","schema":{"type":"integer"}}],"responses":{"200":{"description":"The allowed users that remain.","content":{"application/json":{"schema":{"type":"object","properties":{"users":{"type":"array","description":"A list of accounts, each a short public view.","items":{"type":"object","description":"A short public view of an account. Lists of users and search results hold this shape. Full profiles add more fields.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"write"}},"/guides/{guideid}/teams":{"get":{"operationId":"getGuideTeams","summary":"List a guide's allowed teams","description":"Lists the teams on a guide's allowed list. Members of a team on the list can see the guide while it is private. Only active teams are listed, highest team reputation first, and teams with no members come last. The list isn't paged. Requires access to the guide.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}}],"responses":{"200":{"description":"The allowed teams and what you can do with the guide.","content":{"application/json":{"schema":{"type":"object","properties":{"guideTeams":{"type":"array","description":"Array of Team objects.","items":{"type":"object","description":"A team and its member totals.","properties":{"teamid":{"type":"integer","description":"The team's ID."},"name":{"type":"string","description":"The team's name. No two teams share a name."},"owner":{"type":"integer","description":"The `userid` of the team's owner."},"reputation":{"type":"integer","description":"Total reputation of the team's members. Members whose accounts are disabled or banned aren't counted."},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"object","description":"The picture a team with no photo of its own shows: a default avatar for its kind of team, or its school's avatar for a student team. Only the `mini` size exists, and it has no `id` or `guid`.","properties":{"mini":{"type":"string","format":"uri","description":"URL of the avatar, up to 56 pixels wide."}},"required":["mini"],"additionalProperties":false},{"type":"null"}],"description":"The team's own uploaded photo. `GET /teams` returns `null` when the team has no photo. A guide's allowed-team list never returns `null`: a team with no photo holds its default avatar instead, an object with only a `mini` URL."},"member_count":{"type":"integer","description":"Number of members. Members whose accounts are disabled or banned aren't counted."},"description":{"type":"string","description":"The team's description."},"new_member_since":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the most recent join among the counted members. `0` for a team on a guide's allowed-team list that has no counted members."}}}},"canIViewGuide":{"type":"boolean","description":"Whether you can view this guide."},"canIEditGuide":{"type":"boolean","description":"Whether you can edit this guide."},"canIChangeGuidePrivacy":{"type":"boolean","description":"Whether you can change this guide's privacy."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"list"}},"/guides/{guideid}/teams/{teamid}":{"put":{"operationId":"addGuideTeam","summary":"Add an allowed team to a guide","description":"Adds a team to a guide's allowed list. Members of the team can then see the guide while it is private. Adding a team that is already on the list changes nothing.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"teamid","in":"path","required":true,"description":"The `teamid` of the team, from `GET /teams`. Business teams aren't in that list. The `teams` field of a user lists every team the account belongs to, business teams included.","schema":{"type":"integer"}}],"responses":{"201":{"description":"The team is on the list. The body has the same fields as the response to `GET /guides/{guideid}/teams`: `guideTeams` holds the allowed teams, and `canIViewGuide`, `canIEditGuide`, and `canIChangeGuidePrivacy` say what you can do with the guide.","content":{"application/json":{"schema":{"type":"array","description":"Array of Team objects.","items":{"type":"object","description":"A team and its member totals.","properties":{"teamid":{"type":"integer","description":"The team's ID."},"name":{"type":"string","description":"The team's name. No two teams share a name."},"owner":{"type":"integer","description":"The `userid` of the team's owner."},"reputation":{"type":"integer","description":"Total reputation of the team's members. Members whose accounts are disabled or banned aren't counted."},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"object","description":"The picture a team with no photo of its own shows: a default avatar for its kind of team, or its school's avatar for a student team. Only the `mini` size exists, and it has no `id` or `guid`.","properties":{"mini":{"type":"string","format":"uri","description":"URL of the avatar, up to 56 pixels wide."}},"required":["mini"],"additionalProperties":false},{"type":"null"}],"description":"The team's own uploaded photo. `GET /teams` returns `null` when the team has no photo. A guide's allowed-team list never returns `null`: a team with no photo holds its default avatar instead, an object with only a `mini` URL."},"member_count":{"type":"integer","description":"Number of members. Members whose accounts are disabled or banned aren't counted."},"description":{"type":"string","description":"The team's description."},"new_member_since":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the most recent join among the counted members. `0` for a team on a guide's allowed-team list that has no counted members."}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"The guide or the team doesn't exist.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"removeGuideTeam","summary":"Remove an allowed team from a guide","description":"Removes a team from a guide's allowed list. Removing a team that isn't on the list succeeds and changes nothing.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"teamid","in":"path","required":true,"description":"The `teamid` of the team, from `GET /teams`. Business teams aren't in that list. The `teams` field of a user lists every team the account belongs to, business teams included.","schema":{"type":"integer"}}],"responses":{"200":{"description":"The team is off the list. The body has the same fields as the response to `GET /guides/{guideid}/teams`: `guideTeams` holds the allowed teams that remain, and `canIViewGuide`, `canIEditGuide`, and `canIChangeGuidePrivacy` say what you can do with the guide.","content":{"application/json":{"schema":{"type":"array","description":"Array of Team objects.","items":{"type":"object","description":"A team and its member totals.","properties":{"teamid":{"type":"integer","description":"The team's ID."},"name":{"type":"string","description":"The team's name. No two teams share a name."},"owner":{"type":"integer","description":"The `userid` of the team's owner."},"reputation":{"type":"integer","description":"Total reputation of the team's members. Members whose accounts are disabled or banned aren't counted."},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"object","description":"The picture a team with no photo of its own shows: a default avatar for its kind of team, or its school's avatar for a student team. Only the `mini` size exists, and it has no `id` or `guid`.","properties":{"mini":{"type":"string","format":"uri","description":"URL of the avatar, up to 56 pixels wide."}},"required":["mini"],"additionalProperties":false},{"type":"null"}],"description":"The team's own uploaded photo. `GET /teams` returns `null` when the team has no photo. A guide's allowed-team list never returns `null`: a team with no photo holds its default avatar instead, an object with only a `mini` URL."},"member_count":{"type":"integer","description":"Number of members. Members whose accounts are disabled or banned aren't counted."},"description":{"type":"string","description":"The team's description."},"new_member_since":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the most recent join among the counted members. `0` for a team on a guide's allowed-team list that has no counted members."}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}}},"x-api-usage-kind":"write"}},"/guides/{guideid}/{langid}/restore":{"post":{"operationId":"restoreGuide","summary":"Restore a deleted guide","description":"Restores a deleted guide in one language. A deleted guide has to be restored once for each language it had, and this request restores the language in the path. Requires guide moderator privilege.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"langid","in":"path","required":true,"description":"The language of the guide translation, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string"}}],"responses":{"200":{"description":"The guide is restored. `message` confirms it.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","description":"A sentence that confirms the restore."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"No deleted guide has this `guideid` in this language.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/guides/{guideid}/{langid}":{"patch":{"operationId":"updateGuideTranslation","summary":"Update a guide translation","description":"Saves the text of a guide in one language. To start a translation, send `{\"title\": \"Batterie ersetzen\", \"subject\": \"Batterie\"}` to `/guides/{guideid}/de`. After that, send the translation's current `revisionid` as a query parameter with the fields you change. You can send `title`, `introduction`, `conclusion`, `subject`, and `summary`. Any other field returns 422. When `langid` is the guide's original language, this edits the original text. Requires permission to edit the guide, and to translate it for any language other than the original.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"langid","in":"path","required":true,"description":"The language of the guide translation, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string"}},{"name":"revisionid","in":"query","required":false,"description":"Required when the guide already has a translation in `langid`. Send the translation's `revisionid` from the response to your last save to `langid`. If you didn't save it, read it from `GET /guides/{guideid}?langid={langid}` when `locale` in the response is `langid`. Ignored when you start a new translation.","schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"The guide's title. Required to start a new translation."},"introduction":{"type":"string","description":"The guide's introduction, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"conclusion":{"type":"string","description":"The guide's conclusion, in wiki markup."},"subject":{"type":"string","description":"The part or component the guide covers. Required to start a translation of a `replacement`, `installation`, `repair`, or `disassembly` guide."},"summary":{"type":"string","description":"A short description of the guide, up to 156 characters. You can leave it out. Responses don't return it: their `summary` is always an excerpt from the start of the introduction."}}}}}},"responses":{"200":{"description":"The whole guide in `langid`. `accepted` is `true` when the saved text is published and `false` when it waits for review (patrol).","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"409":{"description":"The `revisionid` is out of date. The body holds the current translation.","content":{"application/json":{"schema":{"type":"object","description":"A guide with its steps, parts, tools, and prerequisites. It has every field of a guide in a list, plus the ones below.","allOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"object","properties":{"time_required":{"type":"string","description":"How long the guide takes, as text in the guide's language, such as \"30 minutes\". It reads \"No estimate\", in that language, when none is set."},"time_required_min":{"type":"integer","description":"The shortest the guide takes, in seconds."},"flags":{"type":"array","description":"The flags on the guide, in the order the guide shows them. Unlike in a list, each flag here is an object. Send the `flagid`s back in this order in an update.","items":{"type":"object","description":"A label on a guide that tells readers something about it, such as that it is archived or in progress.","properties":{"title":{"type":"string","description":"Short name of the flag."},"flagid":{"type":"string","description":"The flag's identifier, for example `GUIDE_ARCHIVED`. Send it in `flags` when you create or update a guide. `GET /user/flags` lists the flags your account can add or remove."},"text":{"type":"string","description":"What the flag tells readers."}}}},"conclusion_raw":{"type":"string","description":"The conclusion in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Always empty for a teardown."},"conclusion_rendered":{"type":"string","description":"The conclusion as HTML. Always empty for a teardown."},"introduction_raw":{"type":["string","null"],"description":"The introduction in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"introduction_rendered":{"type":["string","null"],"description":"The introduction as HTML, with absolute links."},"documents":{"type":"array","description":"Documents attached to the guide. Each has a `documentid`, its title or filename as `text`, the document's page as `url`, a `download_url`, its file `extension`, and a `document_type`. `document_type` is empty when the kind is unknown. `icon` is a Font Awesome 4 icon name for the file type.","items":{"type":"object"}},"parts":{"type":"array","description":"The parts the guide needs.","items":{"type":"object","description":"A part the guide needs.","properties":{"type":{"type":"string","description":"The variant of the part, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the part the guide needs.","default":1},"text":{"type":"string","description":"The part's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the part."},"url":{"type":"string","format":"uri","description":"Where to get the part: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the part's Item wiki page. Saving a guide creates the page for any item that lacks one, so every part has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the part's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the part."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this part."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead part. Only the first part in the list can be featured."}}}},"tools":{"type":"array","description":"The tools the guide needs.","items":{"type":"object","description":"A tool the guide needs.","properties":{"type":{"type":"string","description":"The variant of the tool, such as a size, if the guide names one."},"quantity":{"type":"integer","description":"How many of the tool the guide needs.","default":1},"text":{"type":"string","description":"The tool's name as the guide shows it."},"notes":{"type":["string","null"],"description":"A note about how this guide uses the tool."},"url":{"type":"string","format":"uri","description":"Where to get the tool: its store product page, else its supplier's link, else its wiki page."},"wiki_url":{"type":"string","format":"uri","description":"URL of the tool's Item wiki page. Saving a guide creates the page for any item that lacks one, so every tool has one. Unlike `url`, this always points at the wiki."},"wiki_title":{"type":"string","description":"Title of the tool's Item wiki page. `text` is the page's display title, which can differ (\"Clampy - Anti-Clamp\" is displayed for the page titled \"Anti-Clamp\"); writes resolve an item by this title, so send it back rather than `text`."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small picture of the tool."},"isoptional":{"type":"boolean","description":"`true` when the guide can be done without this tool."},"featured":{"type":"boolean","description":"`true` when the guide marks this as its lead tool. Only the first tool in the list can be featured."}}}},"prerequisites":{"type":"array","description":"Guides to do first. Their steps are in `steps` unless you send `excludePrerequisiteSteps`.","items":{"type":"object","description":"A guide to do first. It has the same fields as a guide in a list of guides.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The prerequisite guide's ID."},"locale":{"type":"string","description":"Language code of this version of the prerequisite guide."},"revisionid":{"type":"integer","description":"Changes whenever the prerequisite guide's details or text change."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the prerequisite guide's latest edit."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the prerequisite guide's own prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the prerequisite guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the prerequisite guide belongs to."},"subject":{"type":"string","description":"The part or thing the prerequisite guide works on."},"title":{"type":"string","description":"The prerequisite guide's title."},"difficulty":{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_required_max":{"type":"integer","description":"The longest the prerequisite guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide."},"userid":{"type":"integer","description":"ID of the prerequisite guide's author."},"username":{"type":"string","description":"Username of the prerequisite guide's author."},"flags":{"type":"array","description":"IDs of the flags on the prerequisite guide.","items":{"type":"string"}},"image":{"description":"The prerequisite guide's main image; `null` when it has none.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"steps":{"type":"array","description":"The guide's steps in order. The steps of prerequisite guides come first, unless you send `excludePrerequisiteSteps` to `GET /guides/{guideid}`.","items":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}},"comments":{"type":"array","description":"Public comments on the guide, oldest first. Replies are in each comment's `replies`.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"author":{"type":"object","description":"The guide's author.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"langid":{"type":"string","description":"Language code of this version of the guide, the same as `locale`."},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this translation was made by machine and no person has reviewed it. It is published straight away. A person's review or later edit sets this to `false`. Always `false` for a guide in its original language."},"accepted":{"type":"boolean","description":"Only in the response to a guide translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to the guide that wait for review (patrol). `gm` is the pending change to the guide's details and `gt` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gm` and `gt` query parameters of `POST /guides/patrol/meta/accept` or `POST /guides/patrol/meta/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them. Pending edits to steps are in `pending_patrol` on each step.","properties":{"gm":{"type":["integer","null"],"description":"The pending change to the guide's details, as a revision ID."},"gt":{"type":["integer","null"],"description":"The pending change to the guide's text in this language, as a revision ID."}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was created."},"published_date":{"type":"integer","format":"int64","description":"UNIX timestamp of when the guide was first made public; 0 if it never was."},"patrol_threshold":{"type":"integer","description":"The reputation an account needs to review (patrol) edits to this guide."},"can_edit":{"type":"boolean","description":"`true` when you can edit the guide."},"favorited":{"type":"boolean","description":"`true` when you have favorited the guide."},"completed":{"type":"boolean","description":"`true` when you have marked the guide completed. `false` if you aren't signed in."},"featured_document_embed_url":{"type":"string","description":"URL of the guide's featured document. An empty string when the guide has none."},"featured_document_thumbnail_url":{"type":"string","description":"URL of the featured document's thumbnail. An empty string when the guide has no featured document."},"featured_documentid":{"type":["integer","null"],"description":"The `documentid` of the guide's featured document. `null` when there is none."},"intro_video_url":{"type":["string","null"],"format":"uri","description":"URL of the introduction video. `null` when the guide has none."},"intro_video":{"type":["object","null"],"description":"The guide's introduction video. `null` when the guide has none. The properties below describe a video embedded from another site.","properties":{"embedid":{"type":"integer","description":"The embed's ID on iFixit."},"url":{"type":"string","format":"uri","description":"URL of the embedded content."},"width":{"type":"integer","description":"Width of the embed, in pixels."},"height":{"type":"integer","description":"Height of the embed, in pixels."},"title":{"type":"string","description":"The video's title, from the site it comes from."},"type":{"type":"string","description":"The kind of embed: `VIDEO`, `IMAGE`, `LINK`, or `RICH`. It follows the oEmbed standard (https://oembed.com)."},"provider_url":{"type":"string","description":"Web address of the site the video comes from."},"provider_name":{"type":"string","description":"Name of the site the video comes from."},"html":{"type":"string","description":"The HTML that shows the player."},"author_url":{"type":"string","description":"Web address of the video's author on that site."},"author_name":{"type":"string","description":"Name of the video's author on that site."}}},"video_info":{"type":"object","description":"The video that plays alongside the guide, and which part of it covers each step. Present only when you send `videoInfo` to `GET /guides/{guideid}`.","properties":{"type":{"type":"string","description":"Where the video is hosted: `youtube`, `ifixit`, or `none` when the guide has no video to play.","enum":["none","youtube","ifixit"]},"videoId":{"type":["string","null"],"description":"The YouTube video ID when `type` is `youtube`, the iFixit video ID when it is `ifixit`, and `null` when it is `none`."},"videoUrls":{"type":"object","additionalProperties":{"type":"string","format":"uri"},"description":"Where to download each encoding of the video, by format name. Present only when `type` is `ifixit`."},"videoWidth":{"type":"integer","description":"Width of the video in pixels. Present only when `type` is `ifixit`."},"videoHeight":{"type":"integer","description":"Height of the video in pixels. Present only when `type` is `ifixit`."},"timestamps":{"type":"array","description":"Pairs of a step's `stepid` and its `startTime` and `endTime`, in seconds from the start of the video, in step order. Steps without a time range are left out.","items":{"type":"array","minItems":2,"maxItems":2,"prefixItems":[{"type":"integer","description":"Step ID"},{"type":"object","description":"The part of a guide's video that covers one step, in seconds from the start of the video.","properties":{"startTime":{"type":"number","description":"Where the step starts, in seconds from the start of the video.","minimum":0},"endTime":{"type":"number","description":"Where the step ends, in seconds from the start of the video.","minimum":0}},"required":["startTime","endTime"]}]}}},"required":["type","videoId","timestamps"]},"available_langids":{"type":"array","description":"Language codes of the languages the guide is available in.","items":{"type":"string"}}}}]}}}},"422":{"description":"A field isn't valid, or `title` or `revisionid` is missing. `errors` lists problems with fields.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/guides/{guideid}/steps/{stepid}/{langid}":{"patch":{"operationId":"updateStepTranslation","summary":"Update a step translation","description":"Saves the text of a step in one language. To start a translation, send `{\"lines\": [{\"text\": \"Entfernen Sie die zwei Schrauben.\", \"bullet\": \"black\", \"level\": 0}]}` to `/guides/{guideid}/steps/{stepid}/de`. After that, send the translation's current `revisionid` as a query parameter. You can send `lines`, `title`, or both. Requires permission to edit the guide, and to translate it for any language other than the original.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"guideid","in":"path","required":true,"description":"The `guideid` of the guide, from `GET /guides`.","schema":{"type":"integer"}},{"name":"stepid","in":"path","required":true,"description":"The `stepid` of the step, from the guide's `steps` in `GET /guides/{guideid}`.","schema":{"type":"integer"}},{"name":"langid","in":"path","required":true,"description":"The language of the guide translation, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string"}},{"name":"revisionid","in":"query","required":false,"description":"Required when the step already has a translation in `langid`. Send the translation's `revisionid` from the response to your last save to `langid`. If you didn't save it, read the step's `revisionid` in `steps` from `GET /guides/{guideid}?langid={langid}`. Ignored when you start a new translation.","schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"lines":{"type":"array","description":"Replaces all of the step's lines in this language, up to 8. Every line needs `text`, `bullet`, and `level`, with the same rules as a line in `POST /guides/{guideid}/steps`.","items":{"type":"object"}},"title":{"type":"string","description":"The step's title in this language."}}}}}},"responses":{"200":{"description":"The step in `langid`.","content":{"application/json":{"schema":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"The step doesn't exist, or it belongs to another guide.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"409":{"description":"Someone edited the translation after you read it. The body holds the current step, not an error.","content":{"application/json":{"schema":{"type":"object","description":"A step in a guide.","properties":{"stepid":{"type":"integer","description":"The step's ID. Use it in the step operations."},"guideid":{"type":"integer","description":"The ID of the guide the step belongs to. `GET /guides/{guideid}` also returns the steps of prerequisite guides in `steps`, and for those `guideid` is the prerequisite guide's ID. Send that ID to `PATCH /guides/{guideid}/steps/{stepid}` and `DELETE /guides/{guideid}/steps/{stepid}`."},"orderby":{"type":"integer","description":"The step's position in its own guide, counting from 1. Steps from prerequisite guides are numbered within their own guide, so `orderby` repeats across the `steps` of one response."},"revisionid":{"type":"integer","description":"Changes whenever the step or its text in this language changes. Send it as `revisionid` when you update or delete the step. If the step has changed since, the request returns 409."},"accepted":{"type":"boolean","description":"Only in the response to a step translation update. `true` when the saved text is published, `false` when it waits for review (patrol)."},"pending_patrol":{"type":"object","description":"Edits to this step that wait for review (patrol). `gsr` is the pending change to the step itself and `gst` the pending change to its text. Each is `null` when nothing is pending. Send them as the `gsr` and `gst` query parameters of `POST /guides/patrol/step/accept` or `POST /guides/patrol/step/deny`; either one also settles every earlier pending edit of the same kind. The response to an update holds them.","properties":{"gsr":{"type":["integer","null"],"description":"The pending change to the step itself, as a revision ID."},"gst":{"type":["integer","null"],"description":"The pending change to the step's text in this language, as a revision ID."}}},"title":{"type":"string","description":"The step's title. An empty string when the step has none."},"lines":{"type":"array","description":"The step's lines of text, in order. You can send at most 8 per step.","items":{"type":"object","description":"A line of text in a step.","properties":{"text_raw":{"type":"string","description":"The line in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). When you send a line back in a request, name this field `text`."},"text_rendered":{"type":"string","description":"The line as HTML, with absolute links."},"bullet":{"type":"string","description":"The marker in front of the line. A color draws a dot, and a colored dot pairs the line with the marker of the same color on the step's image. `icon_note` draws an information icon, `icon_caution` a warning triangle, and `icon_reminder` a pin.","enum":["black","red","orange","yellow","light_blue","blue","green","violet","icon_note","icon_caution","icon_reminder"]},"level":{"type":"integer","description":"How far the line is indented, from 0 (not indented) to 2.","minimum":0,"maximum":2},"lineid":{"type":["integer","null"],"description":"Always `null`. Writes ignore it."}},"required":["text_raw","bullet","level"]},"maxItems":8},"media":{"type":"object","description":"The image, video, or embedded video on a step. A step with no media has `type` `image` and an empty `data` array.","properties":{"type":{"type":"string","description":"Which kind of media the step has: `image` for photos, `video` for a video hosted by iFixit, and `embed` for a video from another site.","enum":["image","video","embed"]},"data":{"description":"The media itself: an array of the step's images, or the video or embed object, depending on `type`.","oneOf":[{"type":"array","description":"Array of images when `type` is `image`","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},{"type":"object","description":"Details of the video when `type` is `video`, or of the embed when `type` is `embed`. Holds an `objectid` for the media. To keep a video on a step, send `type` `object` with that `objectid`."}]}},"required":["type","data"]},"comments":{"type":"array","description":"Public comments on this step, oldest first. Replies are in each comment's `replies`. `GET /guides/{guideid}` returns all of them, or only the first 20 comments (not counting replies) if you send `stepComments`. In that case `comment_count` gives the total.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"comment_count":{"type":"integer","description":"How many public comments the step has, replies included. Present only when you send `stepComments` to `GET /guides/{guideid}`. It can be larger than the number of comments in `comments`.","minimum":0}},"required":["stepid","guideid","orderby","revisionid","lines"]}}}},"422":{"description":"A field isn't valid, `langid` isn't a language the site supports, or `revisionid` is missing. `errors` lists problems with fields.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/guides/patrol/meta/accept":{"post":{"operationId":"acceptGuideMetaPatrol","summary":"Accept guide changes","description":"Publishes edits to a guide's details or text that are waiting for review (patrol). Send `gm`, `gt`, or both as query parameters, with no body. Each also accepts every earlier pending edit of the same kind for that guide; for `gt`, only edits in the same language.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"gm","in":"query","schema":{"type":"integer"},"description":"Revision ID of a pending change to the guide's details. Take it from `pending_patrol.gm` on the guide."},{"name":"gt","in":"query","schema":{"type":"integer"},"description":"Revision ID of a pending change to the guide's text. Take it from `pending_patrol.gt` on the guide."},{"name":"gmFirst","in":"query","schema":{"type":"integer"},"description":"Ignored."},{"name":"gtFirst","in":"query","schema":{"type":"integer"},"description":"Ignored."}],"responses":{"204":{"description":"The changes are published. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"Your reputation is below the guide's `patrol_threshold`.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"422":{"description":"You sent neither `gm` nor `gt`, a revision doesn't exist or isn't pending, or the revisions belong to different guides.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/guides/patrol/meta/deny":{"post":{"operationId":"denyGuideMetaPatrol","summary":"Deny guide changes","description":"Rejects edits to a guide's details or text that are waiting for review (patrol). Send `gm`, `gt`, or both as query parameters. Each also denies every earlier pending edit of the same kind for that guide; for `gt`, only edits in the same language. You can add a `reason` and an `explanation` in the JSON body. They are saved with the denial and included in the notice the authors get.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"gm","in":"query","schema":{"type":"integer"},"description":"Revision ID of a pending change to the guide's details. Take it from `pending_patrol.gm` on the guide."},{"name":"gt","in":"query","schema":{"type":"integer"},"description":"Revision ID of a pending change to the guide's text. Take it from `pending_patrol.gt` on the guide."},{"name":"gmFirst","in":"query","schema":{"type":"integer"},"description":"Ignored."},{"name":"gtFirst","in":"query","schema":{"type":"integer"},"description":"Ignored."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","enum":["spam_vandalism","incorrect_unverifiable","low_quality","off_topic","incomplete_translation","machine_translated","wrong_language","not_translated","other"],"description":"Why you are denying the edit. The author sees it in the notice they get. `spam_vandalism` is spam or vandalism, `incorrect_unverifiable` is incorrect or unverifiable, and `incomplete_translation` is an incomplete or incorrect translation."},"explanation":{"type":"string","maxLength":512,"description":"A message to the author. Spaces at either end don't count toward the limit."}}}}}},"responses":{"204":{"description":"The changes are denied. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"Your reputation is below the guide's `patrol_threshold`.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"422":{"description":"You sent neither `gm` nor `gt`, a revision doesn't exist or isn't pending, the revisions belong to different guides, or `reason` or `explanation` is invalid.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/guides/patrol/step/accept":{"post":{"operationId":"acceptGuideStepPatrol","summary":"Accept step changes","description":"Publishes edits to a guide step that are waiting for review (patrol). Send `gsr`, `gst`, or both as query parameters, with no body. Each also accepts every earlier pending edit of the same kind for that step; for `gst`, only edits in the same language.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"gsr","in":"query","schema":{"type":"integer"},"description":"Revision ID of a pending change to the step itself. Take it from `pending_patrol.gsr` on the step."},{"name":"gst","in":"query","schema":{"type":"integer"},"description":"Revision ID of a pending change to the step's text. Take it from `pending_patrol.gst` on the step."},{"name":"gsrFirst","in":"query","schema":{"type":"integer"},"description":"Ignored."},{"name":"gstFirst","in":"query","schema":{"type":"integer"},"description":"Ignored."}],"responses":{"204":{"description":"The changes are published. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"Your reputation is below the `patrol_threshold` of the guide the step belongs to.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"422":{"description":"You sent neither `gsr` nor `gst`, a revision doesn't exist or isn't pending, or the revisions belong to different steps.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/guides/patrol/step/deny":{"post":{"operationId":"denyGuideStepPatrol","summary":"Deny step changes","description":"Rejects edits to a guide step that are waiting for review (patrol). Send `gsr`, `gst`, or both as query parameters. Each also denies every earlier pending edit of the same kind for that step; for `gst`, only edits in the same language. You can add a `reason` and an `explanation` in the JSON body. They are saved with the denial and included in the notice the authors get.","tags":["Guides"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"gsr","in":"query","schema":{"type":"integer"},"description":"Revision ID of a pending change to the step itself. Take it from `pending_patrol.gsr` on the step."},{"name":"gst","in":"query","schema":{"type":"integer"},"description":"Revision ID of a pending change to the step's text. Take it from `pending_patrol.gst` on the step."},{"name":"gsrFirst","in":"query","schema":{"type":"integer"},"description":"Ignored."},{"name":"gstFirst","in":"query","schema":{"type":"integer"},"description":"Ignored."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","enum":["spam_vandalism","incorrect_unverifiable","low_quality","off_topic","incomplete_translation","machine_translated","wrong_language","not_translated","other"],"description":"Why you are denying the edit. The author sees it in the notice they get. The values and their meanings are the same as `reason` in `POST /guides/patrol/meta/deny`."},"explanation":{"type":"string","maxLength":512,"description":"A message to the author. Spaces at either end don't count toward the limit."}}}}}},"responses":{"204":{"description":"The changes are denied. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"Your reputation is below the `patrol_threshold` of the guide the step belongs to.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"422":{"description":"You sent neither `gsr` nor `gst`, a revision doesn't exist or isn't pending, the revisions belong to different steps, or `reason` or `explanation` is invalid.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/wikis/CATEGORY/{title}/topic_variants":{"get":{"operationId":"listTopicVariants","summary":"List a category's model variants","description":"Returns the model variants of a category, with how many products, schematics, and Workbench items use each one.","tags":["Wikis"],"parameters":[{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}}],"responses":{"200":{"description":"The category's variants","content":{"application/json":{"schema":{"type":"object","required":["topic_variants"],"properties":{"topic_variants":{"type":"array","description":"The category's model variants.","items":{"type":"object","description":"A model variant of a category.","required":["name","variantid","products","schematics","workbench"],"properties":{"name":{"type":"string","description":"The variant's name, such as a model number."},"variantid":{"type":"integer","description":"The variant's ID, from `GET /wikis/CATEGORY/{title}/topic_variants`."},"products":{"type":"integer","description":"Number of products for this variant enabled in the US store."},"schematics":{"type":"integer","description":"Number of schematics for this variant that aren't deleted."},"workbench":{"type":"integer","description":"Number of times this variant is on someone's Workbench."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"list"}},"/wikis/{namespace}":{"get":{"operationId":"listWikis","summary":"List wikis","description":"Returns a page of the wikis in one namespace, as short summaries. To get a whole wiki, call `GET /wikis/{namespace}/{title}`. The list is sorted by title, A to Z. Private and deleted wikis are left out.\nWith `modifiedSince`, the list holds only wikis with a revision at or after that time, and is sorted by last edit, the oldest first, instead of by title. With `langid`, each wiki is in that language when it has an approved translation, and in its original language when it doesn't. If you don't send `langid`, each wiki is in its original language.\nEvery wiki has a `wikiid`, which you find on any wiki you read or list, such as a device's `CATEGORY` wiki. Put a `wikiid` in place of the namespace, as in `/wikis/123`, to get that one wiki, the same as `GET /wikis/{namespace}/{title}`.","tags":["Wikis"],"parameters":[{"name":"namespace","in":"path","required":true,"description":"The kind of page. `CATEGORY` is a device or category page, `USER` is an account's page, and `TEAM` is a team's page. `WIKI` is a general wiki page, such as a troubleshooting page. `ITEM` is the page for a tool or part that guides list. `INFO` is a page of information about the site, such as the list of flags.","schema":{"type":"string","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]}},{"name":"modifiedSince","in":"query","description":"Returns only items last edited at or after this time, as a UNIX timestamp (seconds since January 1, 1970, UTC), such as `1767225600` for January 1, 2026.","schema":{"type":"integer","format":"int64"}},{"name":"offset","in":"query","description":"Number of items to skip from the start of the list. See [paging](#api-1/description/paging).","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","description":"Maximum number of items to return. A value above 200 returns 200 items.","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}},{"name":"langid","in":"query","description":"The language of the content this request reads or changes, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string","pattern":"^[a-z]{2}$","example":"en"}}],"responses":{"200":{"description":"A page of wiki summaries.","content":{"application/json":{"schema":{"type":"array","description":"A list of wikis in their short form.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"list"}},"/wikis":{"post":{"operationId":"createWiki","summary":"Create a wiki","description":"Creates a wiki page. Send `namespace`, `title`, and `contents`. All other fields are optional. If a deleted wiki has that namespace and title, this request creates it again.\nTo translate an existing wiki, send its `namespace` and `title` with `source_revisionid`. The translation starts in the language of the host you call, such as German on `de.ifixit.com`.\nA `CATEGORY` wiki can be created under a `parent` in the same request. The parent must pass the same checks as `PUT /wikis/CATEGORY/{title}/parent`. If it doesn't, no wiki is created. A translation or a deleted wiki that is created again can't take a `parent`. You can create only your own `USER` page, and the `TEAM` page of a team you're on. Requires permission to create pages in the namespace.","tags":["Wikis"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["namespace","title","contents"],"properties":{"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The page's title, as it appears in the page's web address. For a `USER` or `TEAM` page, the `userid` or `teamid`."},"contents":{"type":"string","description":"The page's text, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"image":{"type":"integer","description":"The `imageid` of the page's main image. The image must be in your media manager. Upload one with `POST /user/media/images`."},"display_title":{"type":"string","description":"The name shown for the page."},"repairability_score":{"type":"integer","minimum":0,"maximum":10,"description":"How repairable the device is, from 0 to 10, where 10 is the easiest to repair. `CATEGORY` wikis only."},"source_revisionid":{"type":"integer","description":"Starts a translation. The `revisionid` of the existing wiki's revision to translate from."},"parent":{"type":"string","description":"The `title` of the existing `CATEGORY` wiki to create this one under. Only for a new `CATEGORY` wiki."},"flags":{"type":"array","description":"The IDs of the flags to show on the page, which replace its current flags. They show in the order you send. Send the `flagid` of a flag on a wiki you read in `flags`. `GET /user/flags` lists guide flags, so its IDs don't apply here. A flag you add that isn't a wiki flag returns 422.","items":{"type":"string"}},"description":{"type":"string","description":"A short description. Only `CATEGORY` and `ITEM` wikis have one."},"suppliers":{"type":"array","description":"Where to buy the part. Each entry can have `part_#` (the supplier's part number), `supplier` (its name), `url` (the part's web address), and `type`, all text. `type` is a comma-separated list of the kinds of part the supplier sells, and a part of a matching kind ranks this supplier higher. A `url` without `http://` or `https://` gets `http://`. `ITEM` wikis only.","items":{"type":"object"}},"info":{"type":"array","description":"Facts about the device or part, as `name` and `value` pairs. `CATEGORY` and `ITEM` wikis only.","items":{"type":"object","properties":{"name":{"type":"string","description":"What the fact is about, such as `manufacturer`."},"value":{"type":"string","description":"The fact itself."}}}},"documents":{"type":"array","description":"The documents to put on the page. Each document must be in your media manager. Upload one with `POST /user/media/upload`, which returns its `documentid` as `id`.","items":{"type":"object","properties":{"documentid":{"type":"integer","description":"The document's ID."}}}}}},"examples":{"category":{"summary":"Create a device category page","value":{"namespace":"CATEGORY","title":"Acme_Toaster_2000","display_title":"Acme Toaster 2000","contents":"== Common problems ==\nThe lever won't stay down. Check that the toaster is plugged in.","description":"Two-slot toaster sold from 2020 to 2024."}}}}}},"responses":{"201":{"description":"The new wiki.","content":{"application/json":{"schema":{"type":"object","description":"A complete wiki with its content. It doesn't have `dataType`, `url`, `summary`, or `text`. Its short summary is in `description`. Fields marked with a namespace are returned only for that kind of wiki.","allOf":[{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}},{"type":"object","properties":{"contents_raw":{"type":"string","description":"The content in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Flags are in `flags`, not in the markup."},"contents_rendered":{"type":"string","description":"The content as HTML."},"linked_wikis":{"type":"array","description":"The existing wikis the content links to, each listed once, in the order its first link appears. Links to pages that don't exist are left out.","items":{"type":"object","description":"An existing wiki that another wiki's content links to","required":["wikiid","namespace","title"],"properties":{"wikiid":{"type":"integer","description":"The linked wiki's ID."},"namespace":{"type":"string","description":"The kind of page the linked wiki is, in uppercase, as `namespace` on a wiki."},"title":{"type":"string","description":"The title as written in the link. It can differ from the wiki's `title`, for example by using underscores for spaces."}}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the wiki was created."},"ancestors":{"type":"array","description":"The category pages above this wiki, closest parent first. Empty when it has none. Pages with no version in this wiki's language are left out.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"is_troubleshooting":{"type":"boolean","description":"`true` when the wiki is a troubleshooting page."},"authors":{"type":"array","description":"Up to 10 contributors, with the most edits first. The wiki's author comes first when they are among them.","items":{"type":"object","description":"One contributor to a wiki. `userid` is `null` and `username` is empty when the contributor's account no longer exists.","properties":{"userid":{"type":["integer","null"],"description":"The contributor's `userid`. `GET /users/{userid}` returns the account."},"percent":{"type":"number","description":"The share of this version's accepted revisions this person made, from 0 to 100, rounded to 2 decimal places."},"username":{"type":"string","description":"The contributor's username."},"avatar_url":{"type":["string","null"],"format":"uri","description":"Web address of the contributor's picture. `null` when the account no longer exists."},"profile_url":{"type":"string","format":"uri","description":"Web address of the contributor's profile."}}}},"tags":{"type":"array","description":"The wiki's ordinary tags, as text. Tags with a type, such as `device:iPhone`, are left out.","items":{"type":"string"}},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this version is a machine translation that no person has reviewed. Always `false` for a wiki in its original language."},"description":{"type":"string","description":"The short description of the wiki. Returned for `WIKI`, `INFO`, `CATEGORY`, and `ITEM` wikis."},"flags":{"description":"Notices shown on the page, such as a warning. When you read a wiki, an object keyed by `flagid`. Each value holds `flagid`, `title`, `text`, and an `image` URL or icon fields. When you update a wiki, an array of `flagid` strings that replaces all its flags. Each flag you add or remove needs the privilege that flag asks for. They show in the order you send."},"repairability_score":{"type":["integer","null"],"description":"How repairable the device is, from 0 to 10, where 10 is the easiest to repair. `null` when it has no score. `CATEGORY` wikis only.","minimum":0,"maximum":10},"source_revisionid":{"type":["integer","null"],"description":"For a translation, the `revisionid` of the original version it was translated from."},"info":{"type":"array","description":"Facts about the device or part, as name and value pairs. It includes those the wiki's ancestors set. `CATEGORY` and `ITEM` wikis only.","items":{"type":"object","properties":{"name":{"type":"string","description":"What the fact is about, such as `manufacturer`."},"value":{"type":"string","description":"The fact itself."}}}},"suppliers":{"type":"array","description":"Where to buy the part, one entry per supplier. `ITEM` wikis only.","items":{"type":"object","properties":{"part_#":{"type":"string","description":"The supplier's part number."},"type":{"type":"string","description":"A comma-separated list of the kinds of part the supplier sells. A part of a matching kind ranks this supplier higher."},"supplier":{"type":"string","description":"The supplier's name."},"url":{"type":"string","format":"uri","description":"Web address of the part at the supplier."}}}},"documents":{"type":"array","description":"Documents placed on the wiki page.","items":{"type":"object","properties":{"documentid":{"type":"integer","description":"The document's ID."}}}},"guides":{"type":"array","description":"Guides for the device or category. `CATEGORY` wikis only.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}},"children":{"type":"array","description":"The categories directly below this one, except those listed in `category_lists`. `CATEGORY` wikis only.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"parent":{"type":["string","null"],"description":"Never returned. The first entry of `ancestors` is the parent."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"available_langids":{"type":"array","description":"Two-letter codes of the languages this wiki has a version in. Send one as `langid` to read that version.","items":{"type":"string"}},"can_edit":{"type":"boolean","description":"`true` when your account can edit this wiki."},"page_title":{"type":["string","null"],"description":"The full title of the page, as shown in the browser tab."},"solutions_url":{"type":"string","format":"uri","description":"Web address of the category's Answers page. `CATEGORY` wikis only."},"contents_json":{"type":"object","description":"The content as a JSON structure.","additionalProperties":true},"category_info":{"type":"object","description":"Facts about the device, such as its manufacturer. `CATEGORY` wikis only.","additionalProperties":true},"category_lists":{"type":"object","description":"The category's lists of related categories, as an object. Each key is a list's title, such as `iPhone Repair`, and its value is a list of wiki summaries. It is `{}` when there are none. `CATEGORY` wikis only.","additionalProperties":true},"related_wikis":{"type":"array","description":"Wikis related to this one, each in the short form of a wiki. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"featured_guides":{"type":"array","description":"Guides picked to feature on the category's page. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"diagrams":{"type":"array","description":"The category's interactive diagrams. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"parts":{"type":"object","description":"Parts for the device. It holds `url`, the web address of all the device's parts, and `categories`. `CATEGORY` wikis only.","additionalProperties":true},"tools":{"type":"array","description":"Tools for the device. Each holds `title`, `target_url`, `image_url`, and `itemcode`. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"422":{"description":"A required field is missing, a field is unknown or doesn't apply to the namespace, or a wiki with that namespace and title exists."}},"x-api-usage-kind":"write"}},"/wikis/{namespace}/{title}":{"get":{"operationId":"getWiki","summary":"Get a wiki","description":"Returns one wiki: its text and the fields that go with its namespace.\nWith `langid`, the wiki is in that language when it has a translation, and in its original language when it doesn't. If you don't send `langid`, it is in the language of the host you call, English on `www.ifixit.com`, with the same fallback. `related_wikis` follows the same language, and an entry with no translation in it is in the site's default language. In English, the troubleshooting entries in `related_wikis` stop at 8.","tags":["Wikis"],"parameters":[{"name":"namespace","in":"path","required":true,"description":"The kind of page. `CATEGORY` is a device or category page, `USER` is an account's page, and `TEAM` is a team's page. `WIKI` is a general wiki page, such as a troubleshooting page. `ITEM` is the page for a tool or part that guides list. `INFO` is a page of information about the site, such as the list of flags.","schema":{"type":"string","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]}},{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}},{"name":"unpatrolled","in":"query","description":"Optional. Leave this out.","schema":{"type":"boolean"}},{"name":"langid","in":"query","description":"The language of the content this request reads or changes, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string","pattern":"^[a-z]{2}$","example":"en"}}],"responses":{"200":{"description":"The wiki.","content":{"application/json":{"schema":{"type":"object","description":"A complete wiki with its content. It doesn't have `dataType`, `url`, `summary`, or `text`. Its short summary is in `description`. Fields marked with a namespace are returned only for that kind of wiki.","allOf":[{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}},{"type":"object","properties":{"contents_raw":{"type":"string","description":"The content in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Flags are in `flags`, not in the markup."},"contents_rendered":{"type":"string","description":"The content as HTML."},"linked_wikis":{"type":"array","description":"The existing wikis the content links to, each listed once, in the order its first link appears. Links to pages that don't exist are left out.","items":{"type":"object","description":"An existing wiki that another wiki's content links to","required":["wikiid","namespace","title"],"properties":{"wikiid":{"type":"integer","description":"The linked wiki's ID."},"namespace":{"type":"string","description":"The kind of page the linked wiki is, in uppercase, as `namespace` on a wiki."},"title":{"type":"string","description":"The title as written in the link. It can differ from the wiki's `title`, for example by using underscores for spaces."}}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the wiki was created."},"ancestors":{"type":"array","description":"The category pages above this wiki, closest parent first. Empty when it has none. Pages with no version in this wiki's language are left out.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"is_troubleshooting":{"type":"boolean","description":"`true` when the wiki is a troubleshooting page."},"authors":{"type":"array","description":"Up to 10 contributors, with the most edits first. The wiki's author comes first when they are among them.","items":{"type":"object","description":"One contributor to a wiki. `userid` is `null` and `username` is empty when the contributor's account no longer exists.","properties":{"userid":{"type":["integer","null"],"description":"The contributor's `userid`. `GET /users/{userid}` returns the account."},"percent":{"type":"number","description":"The share of this version's accepted revisions this person made, from 0 to 100, rounded to 2 decimal places."},"username":{"type":"string","description":"The contributor's username."},"avatar_url":{"type":["string","null"],"format":"uri","description":"Web address of the contributor's picture. `null` when the account no longer exists."},"profile_url":{"type":"string","format":"uri","description":"Web address of the contributor's profile."}}}},"tags":{"type":"array","description":"The wiki's ordinary tags, as text. Tags with a type, such as `device:iPhone`, are left out.","items":{"type":"string"}},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this version is a machine translation that no person has reviewed. Always `false` for a wiki in its original language."},"description":{"type":"string","description":"The short description of the wiki. Returned for `WIKI`, `INFO`, `CATEGORY`, and `ITEM` wikis."},"flags":{"description":"Notices shown on the page, such as a warning. When you read a wiki, an object keyed by `flagid`. Each value holds `flagid`, `title`, `text`, and an `image` URL or icon fields. When you update a wiki, an array of `flagid` strings that replaces all its flags. Each flag you add or remove needs the privilege that flag asks for. They show in the order you send."},"repairability_score":{"type":["integer","null"],"description":"How repairable the device is, from 0 to 10, where 10 is the easiest to repair. `null` when it has no score. `CATEGORY` wikis only.","minimum":0,"maximum":10},"source_revisionid":{"type":["integer","null"],"description":"For a translation, the `revisionid` of the original version it was translated from."},"info":{"type":"array","description":"Facts about the device or part, as name and value pairs. It includes those the wiki's ancestors set. `CATEGORY` and `ITEM` wikis only.","items":{"type":"object","properties":{"name":{"type":"string","description":"What the fact is about, such as `manufacturer`."},"value":{"type":"string","description":"The fact itself."}}}},"suppliers":{"type":"array","description":"Where to buy the part, one entry per supplier. `ITEM` wikis only.","items":{"type":"object","properties":{"part_#":{"type":"string","description":"The supplier's part number."},"type":{"type":"string","description":"A comma-separated list of the kinds of part the supplier sells. A part of a matching kind ranks this supplier higher."},"supplier":{"type":"string","description":"The supplier's name."},"url":{"type":"string","format":"uri","description":"Web address of the part at the supplier."}}}},"documents":{"type":"array","description":"Documents placed on the wiki page.","items":{"type":"object","properties":{"documentid":{"type":"integer","description":"The document's ID."}}}},"guides":{"type":"array","description":"Guides for the device or category. `CATEGORY` wikis only.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}},"children":{"type":"array","description":"The categories directly below this one, except those listed in `category_lists`. `CATEGORY` wikis only.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"parent":{"type":["string","null"],"description":"Never returned. The first entry of `ancestors` is the parent."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"available_langids":{"type":"array","description":"Two-letter codes of the languages this wiki has a version in. Send one as `langid` to read that version.","items":{"type":"string"}},"can_edit":{"type":"boolean","description":"`true` when your account can edit this wiki."},"page_title":{"type":["string","null"],"description":"The full title of the page, as shown in the browser tab."},"solutions_url":{"type":"string","format":"uri","description":"Web address of the category's Answers page. `CATEGORY` wikis only."},"contents_json":{"type":"object","description":"The content as a JSON structure.","additionalProperties":true},"category_info":{"type":"object","description":"Facts about the device, such as its manufacturer. `CATEGORY` wikis only.","additionalProperties":true},"category_lists":{"type":"object","description":"The category's lists of related categories, as an object. Each key is a list's title, such as `iPhone Repair`, and its value is a list of wiki summaries. It is `{}` when there are none. `CATEGORY` wikis only.","additionalProperties":true},"related_wikis":{"type":"array","description":"Wikis related to this one, each in the short form of a wiki. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"featured_guides":{"type":"array","description":"Guides picked to feature on the category's page. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"diagrams":{"type":"array","description":"The category's interactive diagrams. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"parts":{"type":"object","description":"Parts for the device. It holds `url`, the web address of all the device's parts, and `categories`. `CATEGORY` wikis only.","additionalProperties":true},"tools":{"type":"array","description":"Tools for the device. Each holds `title`, `target_url`, `image_url`, and `itemcode`. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"content","x-badges":[{"name":"Content","color":"#c2e3ff"}]},"patch":{"operationId":"updateWiki","summary":"Update a wiki","description":"Changes a wiki. Send only the fields you want to change, which can be just `contents`. Fields you leave out stay the same. Read the current text from `contents_raw` in `GET /wikis/{namespace}/{title}`, and send the edited text as `contents`.\nIf an edit is waiting for review, your edit goes on top of it, and `revisionid` must be that edit's revision.\n`langid` picks the translation to edit. If you don't send it, you edit the language of the host you call, English on `www.ifixit.com`. Editing a language with no translation starts one.\nIf your values match what is saved, no revision is created and the response holds the current `revisionid`. Requires permission to edit the wiki, which `can_edit` on the wiki you read tells you.","tags":["Wikis"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"namespace","in":"path","required":true,"description":"The kind of page. `CATEGORY` is a device or category page, `USER` is an account's page, and `TEAM` is a team's page. `WIKI` is a general wiki page, such as a troubleshooting page. `ITEM` is the page for a tool or part that guides list. `INFO` is a page of information about the site, such as the list of flags.","schema":{"type":"string","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]}},{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}},{"name":"revisionid","in":"query","description":"Send it in the query string, such as `?revisionid=123`, not in the request body. It is the `revisionid` from the guide or wiki page as you last read it. If someone has edited the page since then, the request returns 409 and the body holds the current guide or page.","required":true,"schema":{"type":"integer"}},{"name":"langid","in":"query","description":"The language of the content this request reads or changes, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string","pattern":"^[a-z]{2}$","example":"en"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"contents":{"type":"string","description":"The page's text, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"image":{"type":"integer","description":"The `imageid` of the page's main image. The image must be in your media manager. Upload one with `POST /user/media/images`. `null` removes the image. A translation uses the original's image, so this is ignored for one."},"display_title":{"type":"string","description":"The name shown for the page."},"page_title":{"type":"string","maxLength":255,"description":"The heading at the top of the page and its browser-tab title. It is separate from `display_title`. Only administrators, or anyone editing a translation, can send it. For anyone else the request returns 422. An empty string clears it, and it then reads back as `null`. If you change `display_title` and don't send `page_title`, it may be adjusted to follow the new display title. Applies to `WIKI`, `INFO`, and `CATEGORY` wikis."},"repairability_score":{"type":"integer","minimum":0,"maximum":10,"description":"How repairable the device is, from 0 to 10, where 10 is the easiest to repair. `null` removes the score. `CATEGORY` wikis only."},"source_revisionid":{"type":"integer","description":"For a translation, the `revisionid` of the original-language revision it translates."},"flags":{"type":"array","description":"The IDs of the flags to show on the page, which replace its current flags. They show in the order you send. Send the `flagid` of a flag on a wiki you read in `flags`. `GET /user/flags` lists guide flags, so its IDs don't apply here. A flag you add that isn't a wiki flag returns 422.","items":{"type":"string"}},"description":{"type":"string","description":"A short description. Only `CATEGORY` and `ITEM` wikis have one."},"suppliers":{"type":"array","description":"Where to buy the part. The list replaces the current one, so include every supplier you want to keep. Each entry can have `part_#` (the supplier's part number), `supplier` (its name), `url` (the part's web address), and `type`, all text. `type` is a comma-separated list of the kinds of part the supplier sells, and a part of a matching kind ranks this supplier higher. A `url` without `http://` or `https://` gets `http://`. `ITEM` wikis only.","items":{"type":"object"}},"info":{"type":"array","description":"Facts about the device or part, as `name` and `value` pairs. The list replaces the page's current facts, so include every pair you want to keep. Each is an object with a `name`, what the fact is about, such as `manufacturer`, and a `value`, the fact itself. `CATEGORY` and `ITEM` wikis only.","items":{"type":"object"}},"documents":{"type":"array","description":"The documents on the page. The list replaces the current one, so include every document you want to keep. `[]` removes them all. Each entry has a `documentid` and can have a `title` of up to 255 characters, and the filename is the title without one. A document you add must be in your media manager. Upload one with `POST /user/media/upload`, which returns its `documentid` as `id`.","items":{"type":"object"}},"maintenance_schedule":{"type":"array","description":"The wiki's own maintenance tasks, each with the triggers that\nmake it due (`CATEGORY` wikis only). The list replaces the\nsaved tasks: a saved task you don't send is deleted, and\nsending the saved tasks again changes nothing. Send only the\nwiki's own tasks. A row that has the ID of an inherited task is\nskipped, because the wiki already suggests that task.\n","items":{"type":"object","required":["task"],"properties":{"wiki_maintenance_scheduleid":{"type":"integer","description":"ID of the saved task this row updates, as `GET /wikis/maintenance/CATEGORY/{title}` returns it. If you don't send it, the saved task with the same name, ignoring case, is updated, and if there is none a task is created."},"task":{"type":"string","description":"What to do, in a few words, such as `Replace the air filter`."},"status":{"type":"string","enum":["active","muted","archived","done"],"description":"Whether the task is passed on to people who own the device. `active`, the default, passes it on. `muted`, `archived`, and `done` keep the task on the wiki and don't pass it on."},"triggers":{"type":"array","description":"What makes the task due. It is due when the first trigger fires.","items":{"type":"object","description":"Says when a maintenance task is due. A task with several triggers is\ndue when the first of them fires.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What makes the task due:\n- `usage`: an amount of use\n- `time`: calendar time\n- `condition`: a measured value crossing a threshold\n"},"metric":{"type":"string","description":"What is measured. The name says what, such as `coolant_ph` for the\ncoolant's pH. It must match `trigger_type`:\n- `usage`: `usage`\n- `time`: `elapsed_time`\n- `condition`: `battery_cycle_count`, `battery_health_percent`,\n  `belt_wear`, `brake_pad_thickness_mm`, `controller_runtime_hours`,\n  `coolant_ph`, `filter_life_percent`, `filter_pressure_drop`,\n  `oil_life`, `oil_life_percent`, `temperature_celsius`,\n  `tire_tread_depth_mm`, `visible_wear`, or `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage.\n"},"unit":{"type":"string","description":"The unit of the intervals or threshold. It must match `trigger_type`:\n- `usage`: `miles`, `kilometers`, `hours`, `pages`, or `cycles`\n- `time`: `days`, `weeks`, `months`, or `years`\n- `condition`: `%`, `percent`, `score`, `hours`, `miles`,\n  `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`,\n  or `count`\n\nFor a `condition` trigger, use the unit the metric is measured in. For\nexample, `ph` for `coolant_ph`, `mm` for `tire_tread_depth_mm`, `%`\nor `percent` for `filter_life_percent`, `celsius` for\n`temperature_celsius`, `hours` for `controller_runtime_hours`, `score`\nfor `visible_wear`, and `count` for `battery_cycle_count`. `score` is a\nplain number: use the same scale for every threshold and reading of that\nmetric.\n"},"first_interval":{"type":["string","null"],"description":"How long until the first occurrence, in `unit`, when that differs\nfrom `repeat_interval`. For example, a timing belt first due at\n90,000 miles. `null` means `repeat_interval` applies from the start.\nMonths and years take whole numbers.\n"},"repeat_interval":{"type":["string","null"],"description":"How long between later occurrences, in `unit`, such as an oil change\nevery 5,000 miles. It must be above 0. A `usage` or `time` trigger\nneeds this or `first_interval`. Months and years take whole numbers.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric to `threshold`: `<=`, `>=`, or `==`. Required for `condition` triggers."},"threshold":{"type":["string","null"],"description":"The value the metric is compared against, in `unit`. Required for `condition` triggers."}}}},"guideid":{"type":["integer","null"],"description":"The `guideid` of a guide that shows how to do the task, from `GET /guides`. A guide that doesn't exist returns 422. `null` means none."},"parts":{"type":["array","null"],"description":"The parts the task suggests replacing.","items":{"type":"object","properties":{"name":{"type":"string","description":"The part's name, such as `Air filter`."}}}}}}},"maintenance_task_switches":{"type":"array","description":"Switches maintenance tasks the wiki inherits on or off for\nthe wiki and every wiki below it (`CATEGORY` wikis only).\nThe closest switch up the tree decides, so a wiki can\nswitch back on a task an ancestor switched off. A wiki\nkeeps a switch only where it differs from what it\ninherits: setting a task to what the wiki above it says\nremoves the wiki's switch. Tasks left out keep their\nswitch. Only moderators can change a switch, and a task\nthe wiki doesn't inherit is rejected.\n","items":{"type":"object","required":["wiki_maintenance_scheduleid","on"],"properties":{"wiki_maintenance_scheduleid":{"type":"integer","description":"ID of the inherited task, as `GET /wikis/maintenance/CATEGORY/{title}` lists it in `schedules` or `notSuggested`"},"on":{"type":"boolean","description":"Whether the wiki and the wikis below it suggest the task"},"rationale":{"type":["string","null"],"maxLength":4000,"description":"Why this wiki turns the task on or off. The saved explanation stays if you don't send one; `null` or a blank string clears it. Removing the switch removes its explanation too."}}}}}},"examples":{"contents":{"summary":"Replace a page's text and description","value":{"contents":"== Common problems ==\nThe lever won't stay down. Check that the toaster is plugged in, then clean the crumb tray.","description":"Two-slot toaster sold from 2020 to 2024."}}}}}},"responses":{"200":{"description":"The wiki after the change.","content":{"application/json":{"schema":{"type":"object","description":"A complete wiki with its content. It doesn't have `dataType`, `url`, `summary`, or `text`. Its short summary is in `description`. Fields marked with a namespace are returned only for that kind of wiki.","allOf":[{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}},{"type":"object","properties":{"contents_raw":{"type":"string","description":"The content in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Flags are in `flags`, not in the markup."},"contents_rendered":{"type":"string","description":"The content as HTML."},"linked_wikis":{"type":"array","description":"The existing wikis the content links to, each listed once, in the order its first link appears. Links to pages that don't exist are left out.","items":{"type":"object","description":"An existing wiki that another wiki's content links to","required":["wikiid","namespace","title"],"properties":{"wikiid":{"type":"integer","description":"The linked wiki's ID."},"namespace":{"type":"string","description":"The kind of page the linked wiki is, in uppercase, as `namespace` on a wiki."},"title":{"type":"string","description":"The title as written in the link. It can differ from the wiki's `title`, for example by using underscores for spaces."}}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the wiki was created."},"ancestors":{"type":"array","description":"The category pages above this wiki, closest parent first. Empty when it has none. Pages with no version in this wiki's language are left out.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"is_troubleshooting":{"type":"boolean","description":"`true` when the wiki is a troubleshooting page."},"authors":{"type":"array","description":"Up to 10 contributors, with the most edits first. The wiki's author comes first when they are among them.","items":{"type":"object","description":"One contributor to a wiki. `userid` is `null` and `username` is empty when the contributor's account no longer exists.","properties":{"userid":{"type":["integer","null"],"description":"The contributor's `userid`. `GET /users/{userid}` returns the account."},"percent":{"type":"number","description":"The share of this version's accepted revisions this person made, from 0 to 100, rounded to 2 decimal places."},"username":{"type":"string","description":"The contributor's username."},"avatar_url":{"type":["string","null"],"format":"uri","description":"Web address of the contributor's picture. `null` when the account no longer exists."},"profile_url":{"type":"string","format":"uri","description":"Web address of the contributor's profile."}}}},"tags":{"type":"array","description":"The wiki's ordinary tags, as text. Tags with a type, such as `device:iPhone`, are left out.","items":{"type":"string"}},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this version is a machine translation that no person has reviewed. Always `false` for a wiki in its original language."},"description":{"type":"string","description":"The short description of the wiki. Returned for `WIKI`, `INFO`, `CATEGORY`, and `ITEM` wikis."},"flags":{"description":"Notices shown on the page, such as a warning. When you read a wiki, an object keyed by `flagid`. Each value holds `flagid`, `title`, `text`, and an `image` URL or icon fields. When you update a wiki, an array of `flagid` strings that replaces all its flags. Each flag you add or remove needs the privilege that flag asks for. They show in the order you send."},"repairability_score":{"type":["integer","null"],"description":"How repairable the device is, from 0 to 10, where 10 is the easiest to repair. `null` when it has no score. `CATEGORY` wikis only.","minimum":0,"maximum":10},"source_revisionid":{"type":["integer","null"],"description":"For a translation, the `revisionid` of the original version it was translated from."},"info":{"type":"array","description":"Facts about the device or part, as name and value pairs. It includes those the wiki's ancestors set. `CATEGORY` and `ITEM` wikis only.","items":{"type":"object","properties":{"name":{"type":"string","description":"What the fact is about, such as `manufacturer`."},"value":{"type":"string","description":"The fact itself."}}}},"suppliers":{"type":"array","description":"Where to buy the part, one entry per supplier. `ITEM` wikis only.","items":{"type":"object","properties":{"part_#":{"type":"string","description":"The supplier's part number."},"type":{"type":"string","description":"A comma-separated list of the kinds of part the supplier sells. A part of a matching kind ranks this supplier higher."},"supplier":{"type":"string","description":"The supplier's name."},"url":{"type":"string","format":"uri","description":"Web address of the part at the supplier."}}}},"documents":{"type":"array","description":"Documents placed on the wiki page.","items":{"type":"object","properties":{"documentid":{"type":"integer","description":"The document's ID."}}}},"guides":{"type":"array","description":"Guides for the device or category. `CATEGORY` wikis only.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}},"children":{"type":"array","description":"The categories directly below this one, except those listed in `category_lists`. `CATEGORY` wikis only.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"parent":{"type":["string","null"],"description":"Never returned. The first entry of `ancestors` is the parent."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"available_langids":{"type":"array","description":"Two-letter codes of the languages this wiki has a version in. Send one as `langid` to read that version.","items":{"type":"string"}},"can_edit":{"type":"boolean","description":"`true` when your account can edit this wiki."},"page_title":{"type":["string","null"],"description":"The full title of the page, as shown in the browser tab."},"solutions_url":{"type":"string","format":"uri","description":"Web address of the category's Answers page. `CATEGORY` wikis only."},"contents_json":{"type":"object","description":"The content as a JSON structure.","additionalProperties":true},"category_info":{"type":"object","description":"Facts about the device, such as its manufacturer. `CATEGORY` wikis only.","additionalProperties":true},"category_lists":{"type":"object","description":"The category's lists of related categories, as an object. Each key is a list's title, such as `iPhone Repair`, and its value is a list of wiki summaries. It is `{}` when there are none. `CATEGORY` wikis only.","additionalProperties":true},"related_wikis":{"type":"array","description":"Wikis related to this one, each in the short form of a wiki. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"featured_guides":{"type":"array","description":"Guides picked to feature on the category's page. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"diagrams":{"type":"array","description":"The category's interactive diagrams. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"parts":{"type":"object","description":"Parts for the device. It holds `url`, the web address of all the device's parts, and `categories`. `CATEGORY` wikis only.","additionalProperties":true},"tools":{"type":"array","description":"Tools for the device. Each holds `title`, `target_url`, `image_url`, and `itemcode`. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"409":{"description":"The `revisionid` is out of date.","content":{"application/json":{"schema":{"type":"object","description":"A complete wiki with its content. It doesn't have `dataType`, `url`, `summary`, or `text`. Its short summary is in `description`. Fields marked with a namespace are returned only for that kind of wiki.","allOf":[{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}},{"type":"object","properties":{"contents_raw":{"type":"string","description":"The content in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Flags are in `flags`, not in the markup."},"contents_rendered":{"type":"string","description":"The content as HTML."},"linked_wikis":{"type":"array","description":"The existing wikis the content links to, each listed once, in the order its first link appears. Links to pages that don't exist are left out.","items":{"type":"object","description":"An existing wiki that another wiki's content links to","required":["wikiid","namespace","title"],"properties":{"wikiid":{"type":"integer","description":"The linked wiki's ID."},"namespace":{"type":"string","description":"The kind of page the linked wiki is, in uppercase, as `namespace` on a wiki."},"title":{"type":"string","description":"The title as written in the link. It can differ from the wiki's `title`, for example by using underscores for spaces."}}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the wiki was created."},"ancestors":{"type":"array","description":"The category pages above this wiki, closest parent first. Empty when it has none. Pages with no version in this wiki's language are left out.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"is_troubleshooting":{"type":"boolean","description":"`true` when the wiki is a troubleshooting page."},"authors":{"type":"array","description":"Up to 10 contributors, with the most edits first. The wiki's author comes first when they are among them.","items":{"type":"object","description":"One contributor to a wiki. `userid` is `null` and `username` is empty when the contributor's account no longer exists.","properties":{"userid":{"type":["integer","null"],"description":"The contributor's `userid`. `GET /users/{userid}` returns the account."},"percent":{"type":"number","description":"The share of this version's accepted revisions this person made, from 0 to 100, rounded to 2 decimal places."},"username":{"type":"string","description":"The contributor's username."},"avatar_url":{"type":["string","null"],"format":"uri","description":"Web address of the contributor's picture. `null` when the account no longer exists."},"profile_url":{"type":"string","format":"uri","description":"Web address of the contributor's profile."}}}},"tags":{"type":"array","description":"The wiki's ordinary tags, as text. Tags with a type, such as `device:iPhone`, are left out.","items":{"type":"string"}},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this version is a machine translation that no person has reviewed. Always `false` for a wiki in its original language."},"description":{"type":"string","description":"The short description of the wiki. Returned for `WIKI`, `INFO`, `CATEGORY`, and `ITEM` wikis."},"flags":{"description":"Notices shown on the page, such as a warning. When you read a wiki, an object keyed by `flagid`. Each value holds `flagid`, `title`, `text`, and an `image` URL or icon fields. When you update a wiki, an array of `flagid` strings that replaces all its flags. Each flag you add or remove needs the privilege that flag asks for. They show in the order you send."},"repairability_score":{"type":["integer","null"],"description":"How repairable the device is, from 0 to 10, where 10 is the easiest to repair. `null` when it has no score. `CATEGORY` wikis only.","minimum":0,"maximum":10},"source_revisionid":{"type":["integer","null"],"description":"For a translation, the `revisionid` of the original version it was translated from."},"info":{"type":"array","description":"Facts about the device or part, as name and value pairs. It includes those the wiki's ancestors set. `CATEGORY` and `ITEM` wikis only.","items":{"type":"object","properties":{"name":{"type":"string","description":"What the fact is about, such as `manufacturer`."},"value":{"type":"string","description":"The fact itself."}}}},"suppliers":{"type":"array","description":"Where to buy the part, one entry per supplier. `ITEM` wikis only.","items":{"type":"object","properties":{"part_#":{"type":"string","description":"The supplier's part number."},"type":{"type":"string","description":"A comma-separated list of the kinds of part the supplier sells. A part of a matching kind ranks this supplier higher."},"supplier":{"type":"string","description":"The supplier's name."},"url":{"type":"string","format":"uri","description":"Web address of the part at the supplier."}}}},"documents":{"type":"array","description":"Documents placed on the wiki page.","items":{"type":"object","properties":{"documentid":{"type":"integer","description":"The document's ID."}}}},"guides":{"type":"array","description":"Guides for the device or category. `CATEGORY` wikis only.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}},"children":{"type":"array","description":"The categories directly below this one, except those listed in `category_lists`. `CATEGORY` wikis only.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"parent":{"type":["string","null"],"description":"Never returned. The first entry of `ancestors` is the parent."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"available_langids":{"type":"array","description":"Two-letter codes of the languages this wiki has a version in. Send one as `langid` to read that version.","items":{"type":"string"}},"can_edit":{"type":"boolean","description":"`true` when your account can edit this wiki."},"page_title":{"type":["string","null"],"description":"The full title of the page, as shown in the browser tab."},"solutions_url":{"type":"string","format":"uri","description":"Web address of the category's Answers page. `CATEGORY` wikis only."},"contents_json":{"type":"object","description":"The content as a JSON structure.","additionalProperties":true},"category_info":{"type":"object","description":"Facts about the device, such as its manufacturer. `CATEGORY` wikis only.","additionalProperties":true},"category_lists":{"type":"object","description":"The category's lists of related categories, as an object. Each key is a list's title, such as `iPhone Repair`, and its value is a list of wiki summaries. It is `{}` when there are none. `CATEGORY` wikis only.","additionalProperties":true},"related_wikis":{"type":"array","description":"Wikis related to this one, each in the short form of a wiki. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"featured_guides":{"type":"array","description":"Guides picked to feature on the category's page. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"diagrams":{"type":"array","description":"The category's interactive diagrams. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"parts":{"type":"object","description":"Parts for the device. It holds `url`, the web address of all the device's parts, and `categories`. `CATEGORY` wikis only.","additionalProperties":true},"tools":{"type":"array","description":"Tools for the device. Each holds `title`, `target_url`, `image_url`, and `itemcode`. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}}}}]}}}},"422":{"description":"The body has an unknown field or one you can't edit, or a value is invalid."}},"x-api-usage-kind":"write"},"delete":{"operationId":"deleteWiki","summary":"Delete a wiki","description":"Deletes a wiki. Its history is kept, and sending `POST /wikis` with the same namespace and title creates it again.\n`langid` picks the translation to delete and defaults to the wiki's original language, not the site's default. Deleting a translation removes only that translation. Deleting the original language also deletes every translation. A `CATEGORY` wiki that still has children can't be deleted in its original language. Requires permission to edit and delete the wiki.","tags":["Wikis"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"namespace","in":"path","required":true,"description":"The kind of page. `CATEGORY` is a device or category page, `USER` is an account's page, and `TEAM` is a team's page. `WIKI` is a general wiki page, such as a troubleshooting page. `ITEM` is the page for a tool or part that guides list. `INFO` is a page of information about the site, such as the list of flags.","schema":{"type":"string","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]}},{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}},{"name":"revisionid","in":"query","description":"Send it in the query string, such as `?revisionid=123`, not in the request body. It is the `revisionid` from the guide or wiki page as you last read it. If someone has edited the page since then, the request returns 409 and the body holds the current guide or page.","required":true,"schema":{"type":"integer"}},{"name":"langid","in":"query","description":"The language of the content this request reads or changes, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string","pattern":"^[a-z]{2}$","example":"en"}}],"responses":{"204":{"description":"The request worked. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"409":{"description":"The `revisionid` is out of date.","content":{"application/json":{"schema":{"type":"object","description":"A complete wiki with its content. It doesn't have `dataType`, `url`, `summary`, or `text`. Its short summary is in `description`. Fields marked with a namespace are returned only for that kind of wiki.","allOf":[{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}},{"type":"object","properties":{"contents_raw":{"type":"string","description":"The content in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Flags are in `flags`, not in the markup."},"contents_rendered":{"type":"string","description":"The content as HTML."},"linked_wikis":{"type":"array","description":"The existing wikis the content links to, each listed once, in the order its first link appears. Links to pages that don't exist are left out.","items":{"type":"object","description":"An existing wiki that another wiki's content links to","required":["wikiid","namespace","title"],"properties":{"wikiid":{"type":"integer","description":"The linked wiki's ID."},"namespace":{"type":"string","description":"The kind of page the linked wiki is, in uppercase, as `namespace` on a wiki."},"title":{"type":"string","description":"The title as written in the link. It can differ from the wiki's `title`, for example by using underscores for spaces."}}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the wiki was created."},"ancestors":{"type":"array","description":"The category pages above this wiki, closest parent first. Empty when it has none. Pages with no version in this wiki's language are left out.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"is_troubleshooting":{"type":"boolean","description":"`true` when the wiki is a troubleshooting page."},"authors":{"type":"array","description":"Up to 10 contributors, with the most edits first. The wiki's author comes first when they are among them.","items":{"type":"object","description":"One contributor to a wiki. `userid` is `null` and `username` is empty when the contributor's account no longer exists.","properties":{"userid":{"type":["integer","null"],"description":"The contributor's `userid`. `GET /users/{userid}` returns the account."},"percent":{"type":"number","description":"The share of this version's accepted revisions this person made, from 0 to 100, rounded to 2 decimal places."},"username":{"type":"string","description":"The contributor's username."},"avatar_url":{"type":["string","null"],"format":"uri","description":"Web address of the contributor's picture. `null` when the account no longer exists."},"profile_url":{"type":"string","format":"uri","description":"Web address of the contributor's profile."}}}},"tags":{"type":"array","description":"The wiki's ordinary tags, as text. Tags with a type, such as `device:iPhone`, are left out.","items":{"type":"string"}},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this version is a machine translation that no person has reviewed. Always `false` for a wiki in its original language."},"description":{"type":"string","description":"The short description of the wiki. Returned for `WIKI`, `INFO`, `CATEGORY`, and `ITEM` wikis."},"flags":{"description":"Notices shown on the page, such as a warning. When you read a wiki, an object keyed by `flagid`. Each value holds `flagid`, `title`, `text`, and an `image` URL or icon fields. When you update a wiki, an array of `flagid` strings that replaces all its flags. Each flag you add or remove needs the privilege that flag asks for. They show in the order you send."},"repairability_score":{"type":["integer","null"],"description":"How repairable the device is, from 0 to 10, where 10 is the easiest to repair. `null` when it has no score. `CATEGORY` wikis only.","minimum":0,"maximum":10},"source_revisionid":{"type":["integer","null"],"description":"For a translation, the `revisionid` of the original version it was translated from."},"info":{"type":"array","description":"Facts about the device or part, as name and value pairs. It includes those the wiki's ancestors set. `CATEGORY` and `ITEM` wikis only.","items":{"type":"object","properties":{"name":{"type":"string","description":"What the fact is about, such as `manufacturer`."},"value":{"type":"string","description":"The fact itself."}}}},"suppliers":{"type":"array","description":"Where to buy the part, one entry per supplier. `ITEM` wikis only.","items":{"type":"object","properties":{"part_#":{"type":"string","description":"The supplier's part number."},"type":{"type":"string","description":"A comma-separated list of the kinds of part the supplier sells. A part of a matching kind ranks this supplier higher."},"supplier":{"type":"string","description":"The supplier's name."},"url":{"type":"string","format":"uri","description":"Web address of the part at the supplier."}}}},"documents":{"type":"array","description":"Documents placed on the wiki page.","items":{"type":"object","properties":{"documentid":{"type":"integer","description":"The document's ID."}}}},"guides":{"type":"array","description":"Guides for the device or category. `CATEGORY` wikis only.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}},"children":{"type":"array","description":"The categories directly below this one, except those listed in `category_lists`. `CATEGORY` wikis only.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"parent":{"type":["string","null"],"description":"Never returned. The first entry of `ancestors` is the parent."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"available_langids":{"type":"array","description":"Two-letter codes of the languages this wiki has a version in. Send one as `langid` to read that version.","items":{"type":"string"}},"can_edit":{"type":"boolean","description":"`true` when your account can edit this wiki."},"page_title":{"type":["string","null"],"description":"The full title of the page, as shown in the browser tab."},"solutions_url":{"type":"string","format":"uri","description":"Web address of the category's Answers page. `CATEGORY` wikis only."},"contents_json":{"type":"object","description":"The content as a JSON structure.","additionalProperties":true},"category_info":{"type":"object","description":"Facts about the device, such as its manufacturer. `CATEGORY` wikis only.","additionalProperties":true},"category_lists":{"type":"object","description":"The category's lists of related categories, as an object. Each key is a list's title, such as `iPhone Repair`, and its value is a list of wiki summaries. It is `{}` when there are none. `CATEGORY` wikis only.","additionalProperties":true},"related_wikis":{"type":"array","description":"Wikis related to this one, each in the short form of a wiki. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"featured_guides":{"type":"array","description":"Guides picked to feature on the category's page. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"diagrams":{"type":"array","description":"The category's interactive diagrams. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"parts":{"type":"object","description":"Parts for the device. It holds `url`, the web address of all the device's parts, and `categories`. `CATEGORY` wikis only.","additionalProperties":true},"tools":{"type":"array","description":"Tools for the device. Each holds `title`, `target_url`, `image_url`, and `itemcode`. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}}}}]}}}},"422":{"description":"You're deleting a `CATEGORY` wiki's original language, and it still has children."}},"x-api-usage-kind":"write"}},"/wikis/{namespace}/{title}/revert":{"post":{"operationId":"revertWiki","summary":"Revert a wiki","description":"Restores an earlier revision of a wiki's text by saving it as a new revision. The wiki keeps its current title and namespace, even if the earlier revision had others.\n`to_revisionid` is the revision to restore. `revisionid` is the wiki's current revision, which this request replaces. If an edit is waiting for review, `revisionid` must be that edit's revision. `to_revisionid` must be another revision of the same wiki and language, and neither revision can be one that review denied. Requires permission to edit the wiki.","tags":["Wikis"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"namespace","in":"path","required":true,"description":"The kind of page. `CATEGORY` is a device or category page, `USER` is an account's page, and `TEAM` is a team's page. `WIKI` is a general wiki page, such as a troubleshooting page. `ITEM` is the page for a tool or part that guides list. `INFO` is a page of information about the site, such as the list of flags.","schema":{"type":"string","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]}},{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}},{"name":"revisionid","in":"query","description":"Send it in the query string, such as `?revisionid=123`, not in the request body. It is the `revisionid` from the guide or wiki page as you last read it. If someone has edited the page since then, the request returns 409 and the body holds the current guide or page.","required":true,"schema":{"type":"integer"}},{"name":"to_revisionid","in":"query","required":true,"description":"The revision to restore: a different revision of the same wiki and language. No endpoint lists a wiki's earlier revisions, so use a `revisionid` you saved from an earlier read or edit of the wiki.","schema":{"type":"integer"}}],"responses":{"200":{"description":"The wiki after the revert.","content":{"application/json":{"schema":{"type":"object","description":"A complete wiki with its content. It doesn't have `dataType`, `url`, `summary`, or `text`. Its short summary is in `description`. Fields marked with a namespace are returned only for that kind of wiki.","allOf":[{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}},{"type":"object","properties":{"contents_raw":{"type":"string","description":"The content in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Flags are in `flags`, not in the markup."},"contents_rendered":{"type":"string","description":"The content as HTML."},"linked_wikis":{"type":"array","description":"The existing wikis the content links to, each listed once, in the order its first link appears. Links to pages that don't exist are left out.","items":{"type":"object","description":"An existing wiki that another wiki's content links to","required":["wikiid","namespace","title"],"properties":{"wikiid":{"type":"integer","description":"The linked wiki's ID."},"namespace":{"type":"string","description":"The kind of page the linked wiki is, in uppercase, as `namespace` on a wiki."},"title":{"type":"string","description":"The title as written in the link. It can differ from the wiki's `title`, for example by using underscores for spaces."}}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the wiki was created."},"ancestors":{"type":"array","description":"The category pages above this wiki, closest parent first. Empty when it has none. Pages with no version in this wiki's language are left out.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"is_troubleshooting":{"type":"boolean","description":"`true` when the wiki is a troubleshooting page."},"authors":{"type":"array","description":"Up to 10 contributors, with the most edits first. The wiki's author comes first when they are among them.","items":{"type":"object","description":"One contributor to a wiki. `userid` is `null` and `username` is empty when the contributor's account no longer exists.","properties":{"userid":{"type":["integer","null"],"description":"The contributor's `userid`. `GET /users/{userid}` returns the account."},"percent":{"type":"number","description":"The share of this version's accepted revisions this person made, from 0 to 100, rounded to 2 decimal places."},"username":{"type":"string","description":"The contributor's username."},"avatar_url":{"type":["string","null"],"format":"uri","description":"Web address of the contributor's picture. `null` when the account no longer exists."},"profile_url":{"type":"string","format":"uri","description":"Web address of the contributor's profile."}}}},"tags":{"type":"array","description":"The wiki's ordinary tags, as text. Tags with a type, such as `device:iPhone`, are left out.","items":{"type":"string"}},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this version is a machine translation that no person has reviewed. Always `false` for a wiki in its original language."},"description":{"type":"string","description":"The short description of the wiki. Returned for `WIKI`, `INFO`, `CATEGORY`, and `ITEM` wikis."},"flags":{"description":"Notices shown on the page, such as a warning. When you read a wiki, an object keyed by `flagid`. Each value holds `flagid`, `title`, `text`, and an `image` URL or icon fields. When you update a wiki, an array of `flagid` strings that replaces all its flags. Each flag you add or remove needs the privilege that flag asks for. They show in the order you send."},"repairability_score":{"type":["integer","null"],"description":"How repairable the device is, from 0 to 10, where 10 is the easiest to repair. `null` when it has no score. `CATEGORY` wikis only.","minimum":0,"maximum":10},"source_revisionid":{"type":["integer","null"],"description":"For a translation, the `revisionid` of the original version it was translated from."},"info":{"type":"array","description":"Facts about the device or part, as name and value pairs. It includes those the wiki's ancestors set. `CATEGORY` and `ITEM` wikis only.","items":{"type":"object","properties":{"name":{"type":"string","description":"What the fact is about, such as `manufacturer`."},"value":{"type":"string","description":"The fact itself."}}}},"suppliers":{"type":"array","description":"Where to buy the part, one entry per supplier. `ITEM` wikis only.","items":{"type":"object","properties":{"part_#":{"type":"string","description":"The supplier's part number."},"type":{"type":"string","description":"A comma-separated list of the kinds of part the supplier sells. A part of a matching kind ranks this supplier higher."},"supplier":{"type":"string","description":"The supplier's name."},"url":{"type":"string","format":"uri","description":"Web address of the part at the supplier."}}}},"documents":{"type":"array","description":"Documents placed on the wiki page.","items":{"type":"object","properties":{"documentid":{"type":"integer","description":"The document's ID."}}}},"guides":{"type":"array","description":"Guides for the device or category. `CATEGORY` wikis only.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}},"children":{"type":"array","description":"The categories directly below this one, except those listed in `category_lists`. `CATEGORY` wikis only.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"parent":{"type":["string","null"],"description":"Never returned. The first entry of `ancestors` is the parent."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"available_langids":{"type":"array","description":"Two-letter codes of the languages this wiki has a version in. Send one as `langid` to read that version.","items":{"type":"string"}},"can_edit":{"type":"boolean","description":"`true` when your account can edit this wiki."},"page_title":{"type":["string","null"],"description":"The full title of the page, as shown in the browser tab."},"solutions_url":{"type":"string","format":"uri","description":"Web address of the category's Answers page. `CATEGORY` wikis only."},"contents_json":{"type":"object","description":"The content as a JSON structure.","additionalProperties":true},"category_info":{"type":"object","description":"Facts about the device, such as its manufacturer. `CATEGORY` wikis only.","additionalProperties":true},"category_lists":{"type":"object","description":"The category's lists of related categories, as an object. Each key is a list's title, such as `iPhone Repair`, and its value is a list of wiki summaries. It is `{}` when there are none. `CATEGORY` wikis only.","additionalProperties":true},"related_wikis":{"type":"array","description":"Wikis related to this one, each in the short form of a wiki. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"featured_guides":{"type":"array","description":"Guides picked to feature on the category's page. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"diagrams":{"type":"array","description":"The category's interactive diagrams. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"parts":{"type":"object","description":"Parts for the device. It holds `url`, the web address of all the device's parts, and `categories`. `CATEGORY` wikis only.","additionalProperties":true},"tools":{"type":"array","description":"Tools for the device. Each holds `title`, `target_url`, `image_url`, and `itemcode`. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"description":"`revisionid` isn't the revision of the edit waiting for review.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"409":{"description":"The `revisionid` is out of date.","content":{"application/json":{"schema":{"type":"object","description":"A complete wiki with its content. It doesn't have `dataType`, `url`, `summary`, or `text`. Its short summary is in `description`. Fields marked with a namespace are returned only for that kind of wiki.","allOf":[{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}},{"type":"object","properties":{"contents_raw":{"type":"string","description":"The content in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Flags are in `flags`, not in the markup."},"contents_rendered":{"type":"string","description":"The content as HTML."},"linked_wikis":{"type":"array","description":"The existing wikis the content links to, each listed once, in the order its first link appears. Links to pages that don't exist are left out.","items":{"type":"object","description":"An existing wiki that another wiki's content links to","required":["wikiid","namespace","title"],"properties":{"wikiid":{"type":"integer","description":"The linked wiki's ID."},"namespace":{"type":"string","description":"The kind of page the linked wiki is, in uppercase, as `namespace` on a wiki."},"title":{"type":"string","description":"The title as written in the link. It can differ from the wiki's `title`, for example by using underscores for spaces."}}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the wiki was created."},"ancestors":{"type":"array","description":"The category pages above this wiki, closest parent first. Empty when it has none. Pages with no version in this wiki's language are left out.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"is_troubleshooting":{"type":"boolean","description":"`true` when the wiki is a troubleshooting page."},"authors":{"type":"array","description":"Up to 10 contributors, with the most edits first. The wiki's author comes first when they are among them.","items":{"type":"object","description":"One contributor to a wiki. `userid` is `null` and `username` is empty when the contributor's account no longer exists.","properties":{"userid":{"type":["integer","null"],"description":"The contributor's `userid`. `GET /users/{userid}` returns the account."},"percent":{"type":"number","description":"The share of this version's accepted revisions this person made, from 0 to 100, rounded to 2 decimal places."},"username":{"type":"string","description":"The contributor's username."},"avatar_url":{"type":["string","null"],"format":"uri","description":"Web address of the contributor's picture. `null` when the account no longer exists."},"profile_url":{"type":"string","format":"uri","description":"Web address of the contributor's profile."}}}},"tags":{"type":"array","description":"The wiki's ordinary tags, as text. Tags with a type, such as `device:iPhone`, are left out.","items":{"type":"string"}},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this version is a machine translation that no person has reviewed. Always `false` for a wiki in its original language."},"description":{"type":"string","description":"The short description of the wiki. Returned for `WIKI`, `INFO`, `CATEGORY`, and `ITEM` wikis."},"flags":{"description":"Notices shown on the page, such as a warning. When you read a wiki, an object keyed by `flagid`. Each value holds `flagid`, `title`, `text`, and an `image` URL or icon fields. When you update a wiki, an array of `flagid` strings that replaces all its flags. Each flag you add or remove needs the privilege that flag asks for. They show in the order you send."},"repairability_score":{"type":["integer","null"],"description":"How repairable the device is, from 0 to 10, where 10 is the easiest to repair. `null` when it has no score. `CATEGORY` wikis only.","minimum":0,"maximum":10},"source_revisionid":{"type":["integer","null"],"description":"For a translation, the `revisionid` of the original version it was translated from."},"info":{"type":"array","description":"Facts about the device or part, as name and value pairs. It includes those the wiki's ancestors set. `CATEGORY` and `ITEM` wikis only.","items":{"type":"object","properties":{"name":{"type":"string","description":"What the fact is about, such as `manufacturer`."},"value":{"type":"string","description":"The fact itself."}}}},"suppliers":{"type":"array","description":"Where to buy the part, one entry per supplier. `ITEM` wikis only.","items":{"type":"object","properties":{"part_#":{"type":"string","description":"The supplier's part number."},"type":{"type":"string","description":"A comma-separated list of the kinds of part the supplier sells. A part of a matching kind ranks this supplier higher."},"supplier":{"type":"string","description":"The supplier's name."},"url":{"type":"string","format":"uri","description":"Web address of the part at the supplier."}}}},"documents":{"type":"array","description":"Documents placed on the wiki page.","items":{"type":"object","properties":{"documentid":{"type":"integer","description":"The document's ID."}}}},"guides":{"type":"array","description":"Guides for the device or category. `CATEGORY` wikis only.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}},"children":{"type":"array","description":"The categories directly below this one, except those listed in `category_lists`. `CATEGORY` wikis only.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"parent":{"type":["string","null"],"description":"Never returned. The first entry of `ancestors` is the parent."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"available_langids":{"type":"array","description":"Two-letter codes of the languages this wiki has a version in. Send one as `langid` to read that version.","items":{"type":"string"}},"can_edit":{"type":"boolean","description":"`true` when your account can edit this wiki."},"page_title":{"type":["string","null"],"description":"The full title of the page, as shown in the browser tab."},"solutions_url":{"type":"string","format":"uri","description":"Web address of the category's Answers page. `CATEGORY` wikis only."},"contents_json":{"type":"object","description":"The content as a JSON structure.","additionalProperties":true},"category_info":{"type":"object","description":"Facts about the device, such as its manufacturer. `CATEGORY` wikis only.","additionalProperties":true},"category_lists":{"type":"object","description":"The category's lists of related categories, as an object. Each key is a list's title, such as `iPhone Repair`, and its value is a list of wiki summaries. It is `{}` when there are none. `CATEGORY` wikis only.","additionalProperties":true},"related_wikis":{"type":"array","description":"Wikis related to this one, each in the short form of a wiki. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"featured_guides":{"type":"array","description":"Guides picked to feature on the category's page. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"diagrams":{"type":"array","description":"The category's interactive diagrams. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"parts":{"type":"object","description":"Parts for the device. It holds `url`, the web address of all the device's parts, and `categories`. `CATEGORY` wikis only.","additionalProperties":true},"tools":{"type":"array","description":"Tools for the device. Each holds `title`, `target_url`, `image_url`, and `itemcode`. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}}}}]}}}},"422":{"description":"A revision doesn't exist, `to_revisionid` is missing, is the same as `revisionid`, or belongs to another wiki or language, or review denied one of the revisions."}},"x-api-usage-kind":"write"}},"/wikis/{namespace}/{title}/documents":{"post":{"operationId":"addWikiDocuments","summary":"Attach existing documents to a category wiki","description":"Attaches manuals that already exist on the site to a `CATEGORY` wiki. The wiki's text and its existing attachments stay as they are. Documents that are already attached are skipped. When nothing new is added, the current wiki comes back and no revision is saved. Returns 404 if you can't get a document. Attached documents appear in the wiki's `documents` array. Admins only.","tags":["Wikis"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"namespace","in":"path","required":true,"description":"The kind of page. Only `CATEGORY` works here.","schema":{"type":"string","enum":["CATEGORY"]}},{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}},{"name":"revisionid","in":"query","description":"Send it in the query string, such as `?revisionid=123`, not in the request body. It is the `revisionid` from the guide or wiki page as you last read it. If someone has edited the page since then, the request returns 409 and the body holds the current guide or page.","required":true,"schema":{"type":"integer"}},{"name":"langid","in":"query","description":"The language of the content this request reads or changes, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string","pattern":"^[a-z]{2}$","example":"en"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["documentids"],"properties":{"documentids":{"type":"array","description":"The `documentid` of each document to attach, 1 to 100 of them. Duplicates are ignored.","minItems":1,"maxItems":100,"items":{"type":"integer"}}}}}}},"responses":{"200":{"description":"The wiki with the documents attached.","content":{"application/json":{"schema":{"type":"object","description":"A complete wiki with its content. It doesn't have `dataType`, `url`, `summary`, or `text`. Its short summary is in `description`. Fields marked with a namespace are returned only for that kind of wiki.","allOf":[{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}},{"type":"object","properties":{"contents_raw":{"type":"string","description":"The content in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Flags are in `flags`, not in the markup."},"contents_rendered":{"type":"string","description":"The content as HTML."},"linked_wikis":{"type":"array","description":"The existing wikis the content links to, each listed once, in the order its first link appears. Links to pages that don't exist are left out.","items":{"type":"object","description":"An existing wiki that another wiki's content links to","required":["wikiid","namespace","title"],"properties":{"wikiid":{"type":"integer","description":"The linked wiki's ID."},"namespace":{"type":"string","description":"The kind of page the linked wiki is, in uppercase, as `namespace` on a wiki."},"title":{"type":"string","description":"The title as written in the link. It can differ from the wiki's `title`, for example by using underscores for spaces."}}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the wiki was created."},"ancestors":{"type":"array","description":"The category pages above this wiki, closest parent first. Empty when it has none. Pages with no version in this wiki's language are left out.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"is_troubleshooting":{"type":"boolean","description":"`true` when the wiki is a troubleshooting page."},"authors":{"type":"array","description":"Up to 10 contributors, with the most edits first. The wiki's author comes first when they are among them.","items":{"type":"object","description":"One contributor to a wiki. `userid` is `null` and `username` is empty when the contributor's account no longer exists.","properties":{"userid":{"type":["integer","null"],"description":"The contributor's `userid`. `GET /users/{userid}` returns the account."},"percent":{"type":"number","description":"The share of this version's accepted revisions this person made, from 0 to 100, rounded to 2 decimal places."},"username":{"type":"string","description":"The contributor's username."},"avatar_url":{"type":["string","null"],"format":"uri","description":"Web address of the contributor's picture. `null` when the account no longer exists."},"profile_url":{"type":"string","format":"uri","description":"Web address of the contributor's profile."}}}},"tags":{"type":"array","description":"The wiki's ordinary tags, as text. Tags with a type, such as `device:iPhone`, are left out.","items":{"type":"string"}},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this version is a machine translation that no person has reviewed. Always `false` for a wiki in its original language."},"description":{"type":"string","description":"The short description of the wiki. Returned for `WIKI`, `INFO`, `CATEGORY`, and `ITEM` wikis."},"flags":{"description":"Notices shown on the page, such as a warning. When you read a wiki, an object keyed by `flagid`. Each value holds `flagid`, `title`, `text`, and an `image` URL or icon fields. When you update a wiki, an array of `flagid` strings that replaces all its flags. Each flag you add or remove needs the privilege that flag asks for. They show in the order you send."},"repairability_score":{"type":["integer","null"],"description":"How repairable the device is, from 0 to 10, where 10 is the easiest to repair. `null` when it has no score. `CATEGORY` wikis only.","minimum":0,"maximum":10},"source_revisionid":{"type":["integer","null"],"description":"For a translation, the `revisionid` of the original version it was translated from."},"info":{"type":"array","description":"Facts about the device or part, as name and value pairs. It includes those the wiki's ancestors set. `CATEGORY` and `ITEM` wikis only.","items":{"type":"object","properties":{"name":{"type":"string","description":"What the fact is about, such as `manufacturer`."},"value":{"type":"string","description":"The fact itself."}}}},"suppliers":{"type":"array","description":"Where to buy the part, one entry per supplier. `ITEM` wikis only.","items":{"type":"object","properties":{"part_#":{"type":"string","description":"The supplier's part number."},"type":{"type":"string","description":"A comma-separated list of the kinds of part the supplier sells. A part of a matching kind ranks this supplier higher."},"supplier":{"type":"string","description":"The supplier's name."},"url":{"type":"string","format":"uri","description":"Web address of the part at the supplier."}}}},"documents":{"type":"array","description":"Documents placed on the wiki page.","items":{"type":"object","properties":{"documentid":{"type":"integer","description":"The document's ID."}}}},"guides":{"type":"array","description":"Guides for the device or category. `CATEGORY` wikis only.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}},"children":{"type":"array","description":"The categories directly below this one, except those listed in `category_lists`. `CATEGORY` wikis only.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"parent":{"type":["string","null"],"description":"Never returned. The first entry of `ancestors` is the parent."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"available_langids":{"type":"array","description":"Two-letter codes of the languages this wiki has a version in. Send one as `langid` to read that version.","items":{"type":"string"}},"can_edit":{"type":"boolean","description":"`true` when your account can edit this wiki."},"page_title":{"type":["string","null"],"description":"The full title of the page, as shown in the browser tab."},"solutions_url":{"type":"string","format":"uri","description":"Web address of the category's Answers page. `CATEGORY` wikis only."},"contents_json":{"type":"object","description":"The content as a JSON structure.","additionalProperties":true},"category_info":{"type":"object","description":"Facts about the device, such as its manufacturer. `CATEGORY` wikis only.","additionalProperties":true},"category_lists":{"type":"object","description":"The category's lists of related categories, as an object. Each key is a list's title, such as `iPhone Repair`, and its value is a list of wiki summaries. It is `{}` when there are none. `CATEGORY` wikis only.","additionalProperties":true},"related_wikis":{"type":"array","description":"Wikis related to this one, each in the short form of a wiki. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"featured_guides":{"type":"array","description":"Guides picked to feature on the category's page. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"diagrams":{"type":"array","description":"The category's interactive diagrams. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"parts":{"type":"object","description":"Parts for the device. It holds `url`, the web address of all the device's parts, and `categories`. `CATEGORY` wikis only.","additionalProperties":true},"tools":{"type":"array","description":"Tools for the device. Each holds `title`, `target_url`, `image_url`, and `itemcode`. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"409":{"description":"The `revisionid` is out of date.","content":{"application/json":{"schema":{"type":"object","description":"A complete wiki with its content. It doesn't have `dataType`, `url`, `summary`, or `text`. Its short summary is in `description`. Fields marked with a namespace are returned only for that kind of wiki.","allOf":[{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}},{"type":"object","properties":{"contents_raw":{"type":"string","description":"The content in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Flags are in `flags`, not in the markup."},"contents_rendered":{"type":"string","description":"The content as HTML."},"linked_wikis":{"type":"array","description":"The existing wikis the content links to, each listed once, in the order its first link appears. Links to pages that don't exist are left out.","items":{"type":"object","description":"An existing wiki that another wiki's content links to","required":["wikiid","namespace","title"],"properties":{"wikiid":{"type":"integer","description":"The linked wiki's ID."},"namespace":{"type":"string","description":"The kind of page the linked wiki is, in uppercase, as `namespace` on a wiki."},"title":{"type":"string","description":"The title as written in the link. It can differ from the wiki's `title`, for example by using underscores for spaces."}}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the wiki was created."},"ancestors":{"type":"array","description":"The category pages above this wiki, closest parent first. Empty when it has none. Pages with no version in this wiki's language are left out.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"is_troubleshooting":{"type":"boolean","description":"`true` when the wiki is a troubleshooting page."},"authors":{"type":"array","description":"Up to 10 contributors, with the most edits first. The wiki's author comes first when they are among them.","items":{"type":"object","description":"One contributor to a wiki. `userid` is `null` and `username` is empty when the contributor's account no longer exists.","properties":{"userid":{"type":["integer","null"],"description":"The contributor's `userid`. `GET /users/{userid}` returns the account."},"percent":{"type":"number","description":"The share of this version's accepted revisions this person made, from 0 to 100, rounded to 2 decimal places."},"username":{"type":"string","description":"The contributor's username."},"avatar_url":{"type":["string","null"],"format":"uri","description":"Web address of the contributor's picture. `null` when the account no longer exists."},"profile_url":{"type":"string","format":"uri","description":"Web address of the contributor's profile."}}}},"tags":{"type":"array","description":"The wiki's ordinary tags, as text. Tags with a type, such as `device:iPhone`, are left out.","items":{"type":"string"}},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this version is a machine translation that no person has reviewed. Always `false` for a wiki in its original language."},"description":{"type":"string","description":"The short description of the wiki. Returned for `WIKI`, `INFO`, `CATEGORY`, and `ITEM` wikis."},"flags":{"description":"Notices shown on the page, such as a warning. When you read a wiki, an object keyed by `flagid`. Each value holds `flagid`, `title`, `text`, and an `image` URL or icon fields. When you update a wiki, an array of `flagid` strings that replaces all its flags. Each flag you add or remove needs the privilege that flag asks for. They show in the order you send."},"repairability_score":{"type":["integer","null"],"description":"How repairable the device is, from 0 to 10, where 10 is the easiest to repair. `null` when it has no score. `CATEGORY` wikis only.","minimum":0,"maximum":10},"source_revisionid":{"type":["integer","null"],"description":"For a translation, the `revisionid` of the original version it was translated from."},"info":{"type":"array","description":"Facts about the device or part, as name and value pairs. It includes those the wiki's ancestors set. `CATEGORY` and `ITEM` wikis only.","items":{"type":"object","properties":{"name":{"type":"string","description":"What the fact is about, such as `manufacturer`."},"value":{"type":"string","description":"The fact itself."}}}},"suppliers":{"type":"array","description":"Where to buy the part, one entry per supplier. `ITEM` wikis only.","items":{"type":"object","properties":{"part_#":{"type":"string","description":"The supplier's part number."},"type":{"type":"string","description":"A comma-separated list of the kinds of part the supplier sells. A part of a matching kind ranks this supplier higher."},"supplier":{"type":"string","description":"The supplier's name."},"url":{"type":"string","format":"uri","description":"Web address of the part at the supplier."}}}},"documents":{"type":"array","description":"Documents placed on the wiki page.","items":{"type":"object","properties":{"documentid":{"type":"integer","description":"The document's ID."}}}},"guides":{"type":"array","description":"Guides for the device or category. `CATEGORY` wikis only.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}},"children":{"type":"array","description":"The categories directly below this one, except those listed in `category_lists`. `CATEGORY` wikis only.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"parent":{"type":["string","null"],"description":"Never returned. The first entry of `ancestors` is the parent."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"available_langids":{"type":"array","description":"Two-letter codes of the languages this wiki has a version in. Send one as `langid` to read that version.","items":{"type":"string"}},"can_edit":{"type":"boolean","description":"`true` when your account can edit this wiki."},"page_title":{"type":["string","null"],"description":"The full title of the page, as shown in the browser tab."},"solutions_url":{"type":"string","format":"uri","description":"Web address of the category's Answers page. `CATEGORY` wikis only."},"contents_json":{"type":"object","description":"The content as a JSON structure.","additionalProperties":true},"category_info":{"type":"object","description":"Facts about the device, such as its manufacturer. `CATEGORY` wikis only.","additionalProperties":true},"category_lists":{"type":"object","description":"The category's lists of related categories, as an object. Each key is a list's title, such as `iPhone Repair`, and its value is a list of wiki summaries. It is `{}` when there are none. `CATEGORY` wikis only.","additionalProperties":true},"related_wikis":{"type":"array","description":"Wikis related to this one, each in the short form of a wiki. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"featured_guides":{"type":"array","description":"Guides picked to feature on the category's page. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"diagrams":{"type":"array","description":"The category's interactive diagrams. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"parts":{"type":"object","description":"Parts for the device. It holds `url`, the web address of all the device's parts, and `categories`. `CATEGORY` wikis only.","additionalProperties":true},"tools":{"type":"array","description":"Tools for the device. Each holds `title`, `target_url`, `image_url`, and `itemcode`. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}}}}]}}}},"422":{"description":"The namespace is not `CATEGORY`, or `documentids` is missing, empty, longer than 100, or holds something other than positive integers."}},"x-api-usage-kind":"write"}},"/wikis/{namespace}/{title}/tags":{"get":{"operationId":"getWikiTags","summary":"List a wiki's tags","description":"Returns the wiki's tags, sorted alphabetically. Tags that start with `device:`, `product:`, `lang:`, `source:`, or `system:` are left out. Returns 403 for a page you can't edit, such as an `INFO` page, another account's `USER` page, or a `TEAM` page you aren't on.","tags":["Wikis","Tags"],"parameters":[{"name":"namespace","in":"path","required":true,"description":"The kind of page. `CATEGORY` is a device or category page, `USER` is an account's page, and `TEAM` is a team's page. `WIKI` is a general wiki page, such as a troubleshooting page. `ITEM` is the page for a tool or part that guides list. `INFO` is a page of information about the site, such as the list of flags.","schema":{"type":"string","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]}},{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}}],"responses":{"200":{"description":"The wiki's tags.","content":{"application/json":{"schema":{"type":"array","description":"Tag names, as plain strings.","items":{"type":"string"}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"list"}},"/wikis/{namespace}/{title}/tag":{"put":{"operationId":"addWikiTag","summary":"Add a tag to a wiki","description":"Adds a tag to a wiki, and creates the tag if it doesn't exist. Send the tag as `tag`. The tag is stored under its main spelling when the site lists it as a synonym, so the stored tag can differ from the text you sent. A tag that starts with `device:`, `product:`, `lang:`, `source:`, or `system:` is stored as a typed tag and doesn't appear in the wiki's `tags`. A tag must start with a letter or digit. Requires permission to edit the wiki and 500 reputation. Only moderators can tag `ITEM`, `USER`, and `TEAM` pages.","tags":["Wikis","Tags"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"namespace","in":"path","required":true,"description":"The kind of page. `CATEGORY` is a device or category page, `USER` is an account's page, and `TEAM` is a team's page. `WIKI` is a general wiki page, such as a troubleshooting page. `ITEM` is the page for a tool or part that guides list. `INFO` is a page of information about the site, such as the list of flags.","schema":{"type":"string","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]}},{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tag"],"properties":{"tag":{"type":"string","description":"The tag, at most 32 characters."}}}}}},"responses":{"200":{"description":"The wiki with its updated tags.","content":{"application/json":{"schema":{"type":"object","description":"A complete wiki with its content. It doesn't have `dataType`, `url`, `summary`, or `text`. Its short summary is in `description`. Fields marked with a namespace are returned only for that kind of wiki.","allOf":[{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}},{"type":"object","properties":{"contents_raw":{"type":"string","description":"The content in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Flags are in `flags`, not in the markup."},"contents_rendered":{"type":"string","description":"The content as HTML."},"linked_wikis":{"type":"array","description":"The existing wikis the content links to, each listed once, in the order its first link appears. Links to pages that don't exist are left out.","items":{"type":"object","description":"An existing wiki that another wiki's content links to","required":["wikiid","namespace","title"],"properties":{"wikiid":{"type":"integer","description":"The linked wiki's ID."},"namespace":{"type":"string","description":"The kind of page the linked wiki is, in uppercase, as `namespace` on a wiki."},"title":{"type":"string","description":"The title as written in the link. It can differ from the wiki's `title`, for example by using underscores for spaces."}}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the wiki was created."},"ancestors":{"type":"array","description":"The category pages above this wiki, closest parent first. Empty when it has none. Pages with no version in this wiki's language are left out.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"is_troubleshooting":{"type":"boolean","description":"`true` when the wiki is a troubleshooting page."},"authors":{"type":"array","description":"Up to 10 contributors, with the most edits first. The wiki's author comes first when they are among them.","items":{"type":"object","description":"One contributor to a wiki. `userid` is `null` and `username` is empty when the contributor's account no longer exists.","properties":{"userid":{"type":["integer","null"],"description":"The contributor's `userid`. `GET /users/{userid}` returns the account."},"percent":{"type":"number","description":"The share of this version's accepted revisions this person made, from 0 to 100, rounded to 2 decimal places."},"username":{"type":"string","description":"The contributor's username."},"avatar_url":{"type":["string","null"],"format":"uri","description":"Web address of the contributor's picture. `null` when the account no longer exists."},"profile_url":{"type":"string","format":"uri","description":"Web address of the contributor's profile."}}}},"tags":{"type":"array","description":"The wiki's ordinary tags, as text. Tags with a type, such as `device:iPhone`, are left out.","items":{"type":"string"}},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this version is a machine translation that no person has reviewed. Always `false` for a wiki in its original language."},"description":{"type":"string","description":"The short description of the wiki. Returned for `WIKI`, `INFO`, `CATEGORY`, and `ITEM` wikis."},"flags":{"description":"Notices shown on the page, such as a warning. When you read a wiki, an object keyed by `flagid`. Each value holds `flagid`, `title`, `text`, and an `image` URL or icon fields. When you update a wiki, an array of `flagid` strings that replaces all its flags. Each flag you add or remove needs the privilege that flag asks for. They show in the order you send."},"repairability_score":{"type":["integer","null"],"description":"How repairable the device is, from 0 to 10, where 10 is the easiest to repair. `null` when it has no score. `CATEGORY` wikis only.","minimum":0,"maximum":10},"source_revisionid":{"type":["integer","null"],"description":"For a translation, the `revisionid` of the original version it was translated from."},"info":{"type":"array","description":"Facts about the device or part, as name and value pairs. It includes those the wiki's ancestors set. `CATEGORY` and `ITEM` wikis only.","items":{"type":"object","properties":{"name":{"type":"string","description":"What the fact is about, such as `manufacturer`."},"value":{"type":"string","description":"The fact itself."}}}},"suppliers":{"type":"array","description":"Where to buy the part, one entry per supplier. `ITEM` wikis only.","items":{"type":"object","properties":{"part_#":{"type":"string","description":"The supplier's part number."},"type":{"type":"string","description":"A comma-separated list of the kinds of part the supplier sells. A part of a matching kind ranks this supplier higher."},"supplier":{"type":"string","description":"The supplier's name."},"url":{"type":"string","format":"uri","description":"Web address of the part at the supplier."}}}},"documents":{"type":"array","description":"Documents placed on the wiki page.","items":{"type":"object","properties":{"documentid":{"type":"integer","description":"The document's ID."}}}},"guides":{"type":"array","description":"Guides for the device or category. `CATEGORY` wikis only.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}},"children":{"type":"array","description":"The categories directly below this one, except those listed in `category_lists`. `CATEGORY` wikis only.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"parent":{"type":["string","null"],"description":"Never returned. The first entry of `ancestors` is the parent."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"available_langids":{"type":"array","description":"Two-letter codes of the languages this wiki has a version in. Send one as `langid` to read that version.","items":{"type":"string"}},"can_edit":{"type":"boolean","description":"`true` when your account can edit this wiki."},"page_title":{"type":["string","null"],"description":"The full title of the page, as shown in the browser tab."},"solutions_url":{"type":"string","format":"uri","description":"Web address of the category's Answers page. `CATEGORY` wikis only."},"contents_json":{"type":"object","description":"The content as a JSON structure.","additionalProperties":true},"category_info":{"type":"object","description":"Facts about the device, such as its manufacturer. `CATEGORY` wikis only.","additionalProperties":true},"category_lists":{"type":"object","description":"The category's lists of related categories, as an object. Each key is a list's title, such as `iPhone Repair`, and its value is a list of wiki summaries. It is `{}` when there are none. `CATEGORY` wikis only.","additionalProperties":true},"related_wikis":{"type":"array","description":"Wikis related to this one, each in the short form of a wiki. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"featured_guides":{"type":"array","description":"Guides picked to feature on the category's page. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"diagrams":{"type":"array","description":"The category's interactive diagrams. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"parts":{"type":"object","description":"Parts for the device. It holds `url`, the web address of all the device's parts, and `categories`. `CATEGORY` wikis only.","additionalProperties":true},"tools":{"type":"array","description":"Tools for the device. Each holds `title`, `target_url`, `image_url`, and `itemcode`. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"description":"The wiki already has the tag.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"420":{"description":"You've reached a quota: your reputation is too low for this, or you've done it too often. The `message` says which.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"removeWikiTag","summary":"Remove a tag from a wiki","description":"Removes a tag from a wiki. Send the tag as `tag`, spelled exactly as it appears on the wiki. A synonym of the tag doesn't match, and a tag the wiki doesn't have returns 404. A tag must start with a letter or digit. Requires permission to edit the wiki and 500 reputation. Only moderators can untag `ITEM`, `USER`, and `TEAM` pages.","tags":["Wikis","Tags"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"namespace","in":"path","required":true,"description":"The kind of page. `CATEGORY` is a device or category page, `USER` is an account's page, and `TEAM` is a team's page. `WIKI` is a general wiki page, such as a troubleshooting page. `ITEM` is the page for a tool or part that guides list. `INFO` is a page of information about the site, such as the list of flags.","schema":{"type":"string","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]}},{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tag"],"properties":{"tag":{"type":"string","description":"The tag, at most 32 characters."}}}}}},"responses":{"200":{"description":"The wiki with its updated tags.","content":{"application/json":{"schema":{"type":"object","description":"A complete wiki with its content. It doesn't have `dataType`, `url`, `summary`, or `text`. Its short summary is in `description`. Fields marked with a namespace are returned only for that kind of wiki.","allOf":[{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}},{"type":"object","properties":{"contents_raw":{"type":"string","description":"The content in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Flags are in `flags`, not in the markup."},"contents_rendered":{"type":"string","description":"The content as HTML."},"linked_wikis":{"type":"array","description":"The existing wikis the content links to, each listed once, in the order its first link appears. Links to pages that don't exist are left out.","items":{"type":"object","description":"An existing wiki that another wiki's content links to","required":["wikiid","namespace","title"],"properties":{"wikiid":{"type":"integer","description":"The linked wiki's ID."},"namespace":{"type":"string","description":"The kind of page the linked wiki is, in uppercase, as `namespace` on a wiki."},"title":{"type":"string","description":"The title as written in the link. It can differ from the wiki's `title`, for example by using underscores for spaces."}}}},"created_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the wiki was created."},"ancestors":{"type":"array","description":"The category pages above this wiki, closest parent first. Empty when it has none. Pages with no version in this wiki's language are left out.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"is_troubleshooting":{"type":"boolean","description":"`true` when the wiki is a troubleshooting page."},"authors":{"type":"array","description":"Up to 10 contributors, with the most edits first. The wiki's author comes first when they are among them.","items":{"type":"object","description":"One contributor to a wiki. `userid` is `null` and `username` is empty when the contributor's account no longer exists.","properties":{"userid":{"type":["integer","null"],"description":"The contributor's `userid`. `GET /users/{userid}` returns the account."},"percent":{"type":"number","description":"The share of this version's accepted revisions this person made, from 0 to 100, rounded to 2 decimal places."},"username":{"type":"string","description":"The contributor's username."},"avatar_url":{"type":["string","null"],"format":"uri","description":"Web address of the contributor's picture. `null` when the account no longer exists."},"profile_url":{"type":"string","format":"uri","description":"Web address of the contributor's profile."}}}},"tags":{"type":"array","description":"The wiki's ordinary tags, as text. Tags with a type, such as `device:iPhone`, are left out.","items":{"type":"string"}},"unreviewed_machine_translation":{"type":"boolean","description":"`true` when this version is a machine translation that no person has reviewed. Always `false` for a wiki in its original language."},"description":{"type":"string","description":"The short description of the wiki. Returned for `WIKI`, `INFO`, `CATEGORY`, and `ITEM` wikis."},"flags":{"description":"Notices shown on the page, such as a warning. When you read a wiki, an object keyed by `flagid`. Each value holds `flagid`, `title`, `text`, and an `image` URL or icon fields. When you update a wiki, an array of `flagid` strings that replaces all its flags. Each flag you add or remove needs the privilege that flag asks for. They show in the order you send."},"repairability_score":{"type":["integer","null"],"description":"How repairable the device is, from 0 to 10, where 10 is the easiest to repair. `null` when it has no score. `CATEGORY` wikis only.","minimum":0,"maximum":10},"source_revisionid":{"type":["integer","null"],"description":"For a translation, the `revisionid` of the original version it was translated from."},"info":{"type":"array","description":"Facts about the device or part, as name and value pairs. It includes those the wiki's ancestors set. `CATEGORY` and `ITEM` wikis only.","items":{"type":"object","properties":{"name":{"type":"string","description":"What the fact is about, such as `manufacturer`."},"value":{"type":"string","description":"The fact itself."}}}},"suppliers":{"type":"array","description":"Where to buy the part, one entry per supplier. `ITEM` wikis only.","items":{"type":"object","properties":{"part_#":{"type":"string","description":"The supplier's part number."},"type":{"type":"string","description":"A comma-separated list of the kinds of part the supplier sells. A part of a matching kind ranks this supplier higher."},"supplier":{"type":"string","description":"The supplier's name."},"url":{"type":"string","format":"uri","description":"Web address of the part at the supplier."}}}},"documents":{"type":"array","description":"Documents placed on the wiki page.","items":{"type":"object","properties":{"documentid":{"type":"integer","description":"The document's ID."}}}},"guides":{"type":"array","description":"Guides for the device or category. `CATEGORY` wikis only.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}},"children":{"type":"array","description":"The categories directly below this one, except those listed in `category_lists`. `CATEGORY` wikis only.","items":{"type":"object","description":"A short form of a wiki, used in lists and for the `ancestors` and `children` of a full wiki.","properties":{"dataType":{"type":"string","const":"wiki","description":"Tells a wiki apart from other items in a mixed list."},"wikiid":{"type":"integer","description":"The wiki's ID."},"namespace":{"type":"string","description":"The kind of page a wiki is:\n- `CATEGORY`: a device page, or a page for a category of devices\n- `ITEM`: a part or tool\n- `TEAM`: a team's about page. Its `title` is the numeric `teamid`.\n- `USER`: a person's about page. Its `title` is the numeric `userid`.\n- `INFO`: a page of information about the site\n- `WIKI`: a general page\n","enum":["WIKI","CATEGORY","INFO","ITEM","USER","TEAM"]},"title":{"type":"string","description":"The wiki's title, with spaces where the page's web address has underscores, such as `iPhone 4`. In a path, send either."},"display_title":{"type":"string","description":"The title to show people, which can differ from `title`. When a wiki has none, a list item uses `title` with commas replaced by spaces. A full `USER` or `TEAM` wiki doesn't have this field."},"revisionid":{"type":"integer","description":"The revision of the version returned. Only a full wiki has it."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the wiki's latest revision."},"langid":{"type":"string","description":"Language of this version, as one of the [language codes](#api-1/description/language-codes). In a list, it is the wiki's original language when the wiki has no version in the language you asked for."},"url":{"type":"string","format":"uri","description":"Web address of the wiki's page."},"summary":{"type":"string","description":"The summary stored with the wiki. It has no value when the wiki has none. Use `text` to always get a summary."},"text":{"type":"string","description":"The summary to show for the wiki, or a generated one when it has none."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"image":{"description":"The wiki's main image. A full wiki returns `null` when it has none. A list item without one holds only the `mini`, `thumbnail`, `standard`, and `medium` URLs of a substitute image, or `null` when there is no substitute.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]}}}},"parent":{"type":["string","null"],"description":"Never returned. The first entry of `ancestors` is the parent."},"author":{"type":"integer","description":"The `userid` of the wiki's author. `GET /users/{userid}` returns the account."},"available_langids":{"type":"array","description":"Two-letter codes of the languages this wiki has a version in. Send one as `langid` to read that version.","items":{"type":"string"}},"can_edit":{"type":"boolean","description":"`true` when your account can edit this wiki."},"page_title":{"type":["string","null"],"description":"The full title of the page, as shown in the browser tab."},"solutions_url":{"type":"string","format":"uri","description":"Web address of the category's Answers page. `CATEGORY` wikis only."},"contents_json":{"type":"object","description":"The content as a JSON structure.","additionalProperties":true},"category_info":{"type":"object","description":"Facts about the device, such as its manufacturer. `CATEGORY` wikis only.","additionalProperties":true},"category_lists":{"type":"object","description":"The category's lists of related categories, as an object. Each key is a list's title, such as `iPhone Repair`, and its value is a list of wiki summaries. It is `{}` when there are none. `CATEGORY` wikis only.","additionalProperties":true},"related_wikis":{"type":"array","description":"Wikis related to this one, each in the short form of a wiki. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"featured_guides":{"type":"array","description":"Guides picked to feature on the category's page. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"diagrams":{"type":"array","description":"The category's interactive diagrams. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}},"parts":{"type":"object","description":"Parts for the device. It holds `url`, the web address of all the device's parts, and `categories`. `CATEGORY` wikis only.","additionalProperties":true},"tools":{"type":"array","description":"Tools for the device. Each holds `title`, `target_url`, `image_url`, and `itemcode`. `CATEGORY` wikis only.","items":{"type":"object","additionalProperties":true}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"420":{"description":"You've reached a quota: your reputation is too low for this, or you've done it too often. The `message` says which.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/wikis/CATEGORY/{title}/children":{"get":{"operationId":"getWikiChildren","summary":"List a wiki's children","description":"Returns the wikis directly under a `CATEGORY` wiki, sorted by title. All of them come back in one response. Each child is in the site's default language, or in its original language when it has no translation in it. Private wikis are left out.","tags":["Wikis","Categories"],"parameters":[{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}}],"responses":{"200":{"description":"The child wikis.","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","description":"The child's title."},"display_title":{"type":"string","description":"The name shown for the child."},"summary":{"type":"string","description":"The child's summary. A generated summary is returned when the wiki has none."},"image":{"type":"string","format":"uri","description":"URL of the child's main image at standard size. A placeholder URL is returned when the wiki has no image."}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"list"}},"/wikis/CATEGORY/{title}/parent":{"put":{"operationId":"setWikiParent","summary":"Set a wiki's parent","description":"Moves a `CATEGORY` wiki under another `CATEGORY` wiki. Send the parent's `title`. The parent must exist and be part of the category hierarchy, and it can't be the wiki itself or its current parent. The move can wait for an administrator to accept it in patrol, the queue of edits waiting for review. The response is 204 whether the move has applied or is waiting.","tags":["Wikis","Categories"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["parent"],"properties":{"parent":{"type":"string","description":"The `title` of the existing `CATEGORY` wiki to set as the parent."}}}}}},"responses":{"204":{"description":"The request worked. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You need 100 reputation to move a wiki, or you can't edit this wiki.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"422":{"description":"The parent doesn't exist, isn't in the hierarchy, is the wiki itself, or is already its parent."}},"x-api-usage-kind":"write"}},"/wikis/maintenance/CATEGORY/{title}":{"get":{"operationId":"getWikiMaintenance","summary":"Get a wiki's maintenance schedule","description":"Returns the maintenance tasks a `CATEGORY` wiki suggests: its own, then every task its ancestors suggest, closest ancestor first. A wiki can switch off a task it inherits. The task is then left out for that wiki and the wikis below it, and the closest switch decides. Each task's `inheritedFrom` names the ancestor it comes from, and is `null` for the wiki's own tasks. Tasks are in `langid`, or in English when the wiki has none in that language. If you don't send `langid`, you get English. If no wiki in the chain has tasks, `schedules` is an empty array.","tags":["Wikis"],"parameters":[{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}},{"name":"langid","in":"query","description":"The language of the content this request reads or changes, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string","pattern":"^[a-z]{2}$","example":"en"}}],"responses":{"200":{"description":"The wiki's maintenance tasks.","content":{"application/json":{"schema":{"type":"object","description":"The maintenance tasks a wiki suggests: its own, then every ancestor's, closest ancestor first. It leaves out inherited tasks that a switch turned off and tasks a closer task repeats by name.","properties":{"schedules":{"type":"array","description":"The tasks the wiki suggests.","items":{"description":"A maintenance task in a wiki's list, with the wiki it comes from and whether the wiki suggests it","allOf":[{"type":"object","description":"A maintenance task and the triggers that make it due","properties":{"wiki_maintenance_scheduleid":{"type":"integer","description":"The task's ID. Send it back unchanged when you edit the task so it keeps its identity. Workbench copies of the task point at it."},"task":{"type":"string","description":"What to do, in a few words, such as `Replace the air filter`."},"status":{"type":"string","enum":["active","muted","archived","done"],"description":"Whether the task is passed on to people who own the device. `active`, the default, passes it on. `muted`, `archived`, and `done` keep the task on the wiki without passing it on, and they behave the same way."},"triggers":{"type":"array","description":"What makes the task due. It is due when the first trigger fires, for\nexample an oil change at 5,000 miles or 6 months.\n","items":{"type":"object","description":"Says when a maintenance task is due. A task with several triggers is\ndue when the first of them fires.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What makes the task due:\n- `usage`: an amount of use\n- `time`: calendar time\n- `condition`: a measured value crossing a threshold\n"},"metric":{"type":"string","description":"What is measured. The name says what, such as `coolant_ph` for the\ncoolant's pH. It must match `trigger_type`:\n- `usage`: `usage`\n- `time`: `elapsed_time`\n- `condition`: `battery_cycle_count`, `battery_health_percent`,\n  `belt_wear`, `brake_pad_thickness_mm`, `controller_runtime_hours`,\n  `coolant_ph`, `filter_life_percent`, `filter_pressure_drop`,\n  `oil_life`, `oil_life_percent`, `temperature_celsius`,\n  `tire_tread_depth_mm`, `visible_wear`, or `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage.\n"},"unit":{"type":"string","description":"The unit of the intervals or threshold. It must match `trigger_type`:\n- `usage`: `miles`, `kilometers`, `hours`, `pages`, or `cycles`\n- `time`: `days`, `weeks`, `months`, or `years`\n- `condition`: `%`, `percent`, `score`, `hours`, `miles`,\n  `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`,\n  or `count`\n\nFor a `condition` trigger, use the unit the metric is measured in. For\nexample, `ph` for `coolant_ph`, `mm` for `tire_tread_depth_mm`, `%`\nor `percent` for `filter_life_percent`, `celsius` for\n`temperature_celsius`, `hours` for `controller_runtime_hours`, `score`\nfor `visible_wear`, and `count` for `battery_cycle_count`. `score` is a\nplain number: use the same scale for every threshold and reading of that\nmetric.\n"},"first_interval":{"type":["string","null"],"description":"How long until the first occurrence, in `unit`, when that differs\nfrom `repeat_interval`. For example, a timing belt first due at\n90,000 miles. `null` means `repeat_interval` applies from the start.\nMonths and years take whole numbers.\n"},"repeat_interval":{"type":["string","null"],"description":"How long between later occurrences, in `unit`, such as an oil change\nevery 5,000 miles. It must be above 0. A `usage` or `time` trigger\nneeds this or `first_interval`. Months and years take whole numbers.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric to `threshold`: `<=`, `>=`, or `==`. Required for `condition` triggers."},"threshold":{"type":["string","null"],"description":"The value the metric is compared against, in `unit`. Required for `condition` triggers."}}}},"guideid":{"type":["integer","null"],"description":"The `guideid` of a guide that shows how to do the task, from `GET /guides`. `null` when there is none."},"parts":{"type":["array","null"],"description":"The parts the task suggests replacing, each with a `name`.","items":{"type":"object","properties":{"name":{"type":"string","description":"The part's name."}}}}}},{"type":"object","properties":{"inheritedFrom":{"type":["string","null"],"description":"Title of the ancestor wiki the task comes from. `null` for the wiki's own tasks."},"switchedBy":{"type":["string","null"],"description":"For an inherited task, the title of the wiki whose switch decides whether this wiki suggests it: this wiki, or an ancestor below the task's own wiki. `null` when no wiki switches the task, so it is on."},"repeatedBy":{"type":["string","null"],"description":"For an inherited task the switches leave on, the title of the wiki whose task with the same name is suggested in its place: this wiki, or an ancestor no farther than the task's own wiki. `null` when no closer task has its name."},"rationale":{"type":["string","null"],"maxLength":4000,"description":"The explanation saved with the switch named by `switchedBy`. `null` when there is no switch or it has no explanation."},"inheritedOn":{"type":["boolean","null"],"description":"Whether the ancestors' switches leave this task on, not counting the requested wiki's own switch. A closer task with the same name doesn't change it. `null` for the wiki's own tasks."}}}]}},"notSuggested":{"type":"array","description":"Tasks an ancestor suggests that this wiki doesn't, because this wiki or one between them switched them off, or because a closer task has the same name.","items":{"description":"A maintenance task in a wiki's list, with the wiki it comes from and whether the wiki suggests it","allOf":[{"type":"object","description":"A maintenance task and the triggers that make it due","properties":{"wiki_maintenance_scheduleid":{"type":"integer","description":"The task's ID. Send it back unchanged when you edit the task so it keeps its identity. Workbench copies of the task point at it."},"task":{"type":"string","description":"What to do, in a few words, such as `Replace the air filter`."},"status":{"type":"string","enum":["active","muted","archived","done"],"description":"Whether the task is passed on to people who own the device. `active`, the default, passes it on. `muted`, `archived`, and `done` keep the task on the wiki without passing it on, and they behave the same way."},"triggers":{"type":"array","description":"What makes the task due. It is due when the first trigger fires, for\nexample an oil change at 5,000 miles or 6 months.\n","items":{"type":"object","description":"Says when a maintenance task is due. A task with several triggers is\ndue when the first of them fires.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What makes the task due:\n- `usage`: an amount of use\n- `time`: calendar time\n- `condition`: a measured value crossing a threshold\n"},"metric":{"type":"string","description":"What is measured. The name says what, such as `coolant_ph` for the\ncoolant's pH. It must match `trigger_type`:\n- `usage`: `usage`\n- `time`: `elapsed_time`\n- `condition`: `battery_cycle_count`, `battery_health_percent`,\n  `belt_wear`, `brake_pad_thickness_mm`, `controller_runtime_hours`,\n  `coolant_ph`, `filter_life_percent`, `filter_pressure_drop`,\n  `oil_life`, `oil_life_percent`, `temperature_celsius`,\n  `tire_tread_depth_mm`, `visible_wear`, or `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage.\n"},"unit":{"type":"string","description":"The unit of the intervals or threshold. It must match `trigger_type`:\n- `usage`: `miles`, `kilometers`, `hours`, `pages`, or `cycles`\n- `time`: `days`, `weeks`, `months`, or `years`\n- `condition`: `%`, `percent`, `score`, `hours`, `miles`,\n  `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`,\n  or `count`\n\nFor a `condition` trigger, use the unit the metric is measured in. For\nexample, `ph` for `coolant_ph`, `mm` for `tire_tread_depth_mm`, `%`\nor `percent` for `filter_life_percent`, `celsius` for\n`temperature_celsius`, `hours` for `controller_runtime_hours`, `score`\nfor `visible_wear`, and `count` for `battery_cycle_count`. `score` is a\nplain number: use the same scale for every threshold and reading of that\nmetric.\n"},"first_interval":{"type":["string","null"],"description":"How long until the first occurrence, in `unit`, when that differs\nfrom `repeat_interval`. For example, a timing belt first due at\n90,000 miles. `null` means `repeat_interval` applies from the start.\nMonths and years take whole numbers.\n"},"repeat_interval":{"type":["string","null"],"description":"How long between later occurrences, in `unit`, such as an oil change\nevery 5,000 miles. It must be above 0. A `usage` or `time` trigger\nneeds this or `first_interval`. Months and years take whole numbers.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric to `threshold`: `<=`, `>=`, or `==`. Required for `condition` triggers."},"threshold":{"type":["string","null"],"description":"The value the metric is compared against, in `unit`. Required for `condition` triggers."}}}},"guideid":{"type":["integer","null"],"description":"The `guideid` of a guide that shows how to do the task, from `GET /guides`. `null` when there is none."},"parts":{"type":["array","null"],"description":"The parts the task suggests replacing, each with a `name`.","items":{"type":"object","properties":{"name":{"type":"string","description":"The part's name."}}}}}},{"type":"object","properties":{"inheritedFrom":{"type":["string","null"],"description":"Title of the ancestor wiki the task comes from. `null` for the wiki's own tasks."},"switchedBy":{"type":["string","null"],"description":"For an inherited task, the title of the wiki whose switch decides whether this wiki suggests it: this wiki, or an ancestor below the task's own wiki. `null` when no wiki switches the task, so it is on."},"repeatedBy":{"type":["string","null"],"description":"For an inherited task the switches leave on, the title of the wiki whose task with the same name is suggested in its place: this wiki, or an ancestor no farther than the task's own wiki. `null` when no closer task has its name."},"rationale":{"type":["string","null"],"maxLength":4000,"description":"The explanation saved with the switch named by `switchedBy`. `null` when there is no switch or it has no explanation."},"inheritedOn":{"type":["boolean","null"],"description":"Whether the ancestors' switches leave this task on, not counting the requested wiki's own switch. A closer task with the same name doesn't change it. `null` for the wiki's own tasks."}}}]}},"inheritedFrom":{"type":["string","null"],"description":"Title of the ancestor wiki the first inherited task comes from, when the wiki has no tasks of its own. `null` when the wiki has tasks of its own, or when nothing is suggested. Each task also has its own `inheritedFrom`."},"langid":{"type":"string","description":"Language of the wiki's own tasks, or of its first inherited task when it has none. It is `en` when the wiki has tasks only in English, even if you asked for another language."},"revisionid":{"type":["integer","null"],"description":"The `revisionid` of the requested wiki's latest version in `langid`. `null` when the wiki has no version in that language."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"422":{"description":"`langid` isn't a known language."}},"x-api-usage-kind":"get"}},"/wikis/CATEGORY/{title}/identification":{"get":{"operationId":"getWikiIdentification","summary":"Get a wiki's identification section","description":"Returns the HTML of a device page's Identification section. With `langid`, you get that language when it has an Identification section, and the English wiki otherwise. `langid` in the response says which language you got. If the wiki or its Identification section doesn't exist, the response is 200 with an empty `content` string, not 404.","tags":["Wikis","Categories"],"parameters":[{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}},{"name":"langid","in":"query","description":"The language of the content this request reads or changes, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string","pattern":"^[a-z]{2}$","example":"en"}},{"name":"unpatrolled","in":"query","description":"Optional. Leave this out.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"The Identification section.","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","description":"HTML of the Identification section body, without the section heading."},"langid":{"type":"string","description":"Language of the returned content; `en` when the English fallback was used."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"description":"The title isn't valid, or `langid` isn't a known language."}},"x-api-usage-kind":"get"}},"/wikis/CATEGORY/{title}/workbench_guides":{"get":{"operationId":"getWorkbenchGuides","summary":"List workbench guides","description":"Returns the guides for a `CATEGORY` wiki in one list, in the order the device page shows them. Guides are grouped by guide type, then listed OEM guides first and by short title within each type. Archived guides, non-public guides, guides that are only prerequisites, guides still in progress, and guides you can't view are left out. Items have no `time_required` or `time_required_min`. With `langid`, you get guides for that language, in the original language when the wiki has no translation. A guide with no translation in it is in the site's default language. If you don't send `langid`, you get the site's default language, English on `www.ifixit.com`.","tags":["Wikis","Categories"],"parameters":[{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}},{"name":"langid","in":"query","description":"The language of the content this request reads or changes, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string","pattern":"^[a-z]{2}$","example":"en"}}],"responses":{"200":{"description":"The guides, in display order.","content":{"application/json":{"schema":{"type":"object","properties":{"guides":{"type":"array","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"422":{"description":"The title isn't valid, or `langid` isn't a known language."}},"x-api-usage-kind":"list"}},"/wikis/patrol/accept":{"post":{"operationId":"acceptWikiPatrol","summary":"Accept wiki changes","description":"Publishes a wiki edit that is waiting for review (patrol). Send its `revisionid` as a query parameter, with no body. The edit becomes the wiki's current content in its language. Earlier pending edits of that wiki in the same language are marked accepted, but only the edit you name is published.","tags":["Wikis"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"revisionid","in":"query","required":true,"schema":{"type":"integer"},"description":"Revision ID of the pending wiki edit. The current version's revision ID returns 422 here."}],"responses":{"204":{"description":"The edit is published. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You can't publish your own edits to this wiki without review.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"422":{"description":"`revisionid` is missing, doesn't exist, or isn't pending.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/wikis/patrol/deny":{"post":{"operationId":"denyWikiPatrol","summary":"Deny wiki changes","description":"Rejects a wiki edit that is waiting for review (patrol). Send its `revisionid` as a query parameter. Earlier pending edits of that wiki in the same language are denied too. The wiki's current content doesn't change.","tags":["Wikis"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"revisionid","in":"query","required":true,"schema":{"type":"integer"},"description":"Revision ID of the pending wiki edit. The current version's revision ID returns 422 here."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","enum":["spam_vandalism","incorrect_unverifiable","low_quality","off_topic","incomplete_translation","machine_translated","wrong_language","not_translated","other"],"description":"Why you are denying the edit. The author sees it in the notice they get. The values and their meanings are the same as `reason` in `POST /guides/patrol/meta/deny`."},"explanation":{"type":"string","maxLength":512,"description":"A message to the author. Spaces at either end don't count toward the limit."}}}}}},"responses":{"204":{"description":"The edit is denied. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You can't publish your own edits to this wiki without review.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"422":{"description":"`revisionid` is missing, doesn't exist, or isn't pending, or `reason` or `explanation` is invalid.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/wiki_areas/patrol/accept":{"post":{"operationId":"acceptWikiAreaPatrol","summary":"Accept wiki area changes","description":"Publishes a change to where a wiki sits in the category hierarchy, when the change is waiting for review (patrol). Send its `revisionid` as a query parameter, with no body. Earlier pending changes for that wiki are marked accepted, but only the change you name is applied.","tags":["Wikis"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"revisionid","in":"query","required":true,"schema":{"type":"integer"},"description":"Revision ID of the pending hierarchy change. No endpoint lists pending hierarchy changes. The change's patrol page on the website sends this ID when you accept or deny it."}],"responses":{"204":{"description":"The change is applied. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You can't publish your own changes to where this wiki sits in the hierarchy without review.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"422":{"description":"`revisionid` is missing, doesn't exist, or isn't pending.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/wiki_areas/patrol/deny":{"post":{"operationId":"denyWikiAreaPatrol","summary":"Deny wiki area changes","description":"Rejects a change to where a wiki sits in the category hierarchy, when the change is waiting for review (patrol). Send its `revisionid` as a query parameter. Earlier pending changes for that wiki are denied too.","tags":["Wikis"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"revisionid","in":"query","required":true,"schema":{"type":"integer"},"description":"Revision ID of the pending hierarchy change. No endpoint lists pending hierarchy changes. The change's patrol page on the website sends this ID when you accept or deny it."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","enum":["spam_vandalism","incorrect_unverifiable","low_quality","off_topic","incomplete_translation","machine_translated","wrong_language","not_translated","other"],"description":"Why you are denying the edit. The author sees it in the notice they get. The values and their meanings are the same as `reason` in `POST /guides/patrol/meta/deny`."},"explanation":{"type":"string","maxLength":512,"description":"A message to the author. Spaces at either end don't count toward the limit."}}}}}},"responses":{"204":{"description":"The change is denied. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You can't publish your own changes to where this wiki sits in the hierarchy without review.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"422":{"description":"`revisionid` is missing, doesn't exist, or isn't pending, or `reason` or `explanation` is invalid.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/categories":{"get":{"operationId":"listCategories","summary":"List category tree","description":"Returns every device category as a tree. Each key is a category's title, in its original language, and each value holds that category's subcategories, or is `null` when it has none. The top-level categories are the keys of the object. A category change can take up to 10 minutes to appear.","tags":["Categories"],"responses":{"200":{"description":"The category tree.","content":{"application/json":{"schema":{"type":"object","description":"The categories, keyed by title.","additionalProperties":{"oneOf":[{"type":"object","additionalProperties":true},{"type":"null"}]},"example":{"iPhone":{"iPhone 4":null,"iPhone 5":null},"Mac":{"MacBook Pro":null,"iMac":null}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"list"}},"/comments":{"get":{"operationId":"listComments","summary":"List comments","description":"Returns comments sorted by `commentid`. A reply is a separate item in the list as well as inside its parent's `replies`. [Paging](#api-1/description/paging) has the rule for this list. `modifiedSince` returns only comments that someone has edited.","tags":["Comments"],"parameters":[{"name":"modifiedSince","in":"query","description":"Returns only items last edited at or after this time, as a UNIX timestamp (seconds since January 1, 1970, UTC), such as `1767225600` for January 1, 2026.","schema":{"type":"integer","format":"int64"}},{"name":"context","in":"query","description":"Returns only comments on this kind of content. Without it, comments on all kinds are returned.","schema":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]}},{"name":"langid","in":"query","description":"Returns only comments whose `locale` is this [language code](#api-1/description/language-codes). Comments with no detected language never match. Without it, comments in all languages are returned.","schema":{"type":"string"}},{"name":"order","in":"query","description":"Sort direction, `ASC` or `DESC`.","schema":{"type":"string","enum":["ASC","DESC"],"default":"ASC"}},{"name":"offset","in":"query","description":"Number of items to skip from the start of the list. See [paging](#api-1/description/paging).","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","description":"Maximum number of items to return. A value above 200 returns 200 items.","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}}],"responses":{"200":{"description":"A page of comments.","content":{"application/json":{"schema":{"type":"array","description":"A list of comments.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"list"}},"/comments/{commentid}":{"get":{"operationId":"getComment","summary":"Get a comment","description":"Returns one comment with its replies.","tags":["Comments"],"parameters":[{"name":"commentid","in":"path","required":true,"description":"The `commentid` of the comment, from `GET /comments`.","schema":{"type":"integer"}}],"responses":{"200":{"description":"The comment, with its replies.","content":{"application/json":{"schema":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The comment is on a guide or step you can't view.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"404":{"description":"The comment doesn't exist, or it was deleted.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"422":{"description":"`commentid` isn't a positive integer.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"get"},"patch":{"operationId":"updateComment","summary":"Update a comment","description":"Replaces the text of a comment. Send the new `text`. You can edit your own comment for 5 minutes after you post it. The API can adjust the wording and markup you send, so read the saved text from `text_raw` in the response.","tags":["Comments"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"commentid","in":"path","required":true,"description":"The `commentid` of the comment, from `GET /comments`.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","minLength":12,"maxLength":4096,"description":"The new comment, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Send 12 to 4096 UTF-8 bytes, counting the markup."}}}}}},"responses":{"200":{"description":"The updated comment.","content":{"application/json":{"schema":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The comment isn't yours, you posted it more than 5 minutes ago, or it is on a guide you can't view.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"422":{"description":"`commentid` isn't a positive integer, or `text` is missing or the wrong length.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"deleteComment","summary":"Delete a comment","description":"Deletes a comment you posted, along with its replies.","tags":["Comments"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"commentid","in":"path","required":true,"description":"The `commentid` of the comment, from `GET /comments`.","schema":{"type":"integer"}}],"responses":{"204":{"description":"The request worked. The response has no body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The comment isn't yours, or it is on a guide you can't view.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"422":{"description":"`commentid` isn't a positive integer.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/comments/{context}/{contextid}":{"post":{"operationId":"createComment","summary":"Create a comment","description":"Posts a comment on a piece of content. Send `text`, and add `parentid` to reply to a comment. A comment can't hold an image. Commenting on a wiki page also subscribes you to emails about new comments on that page.","tags":["Comments"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"context","in":"path","required":true,"description":"The kind of content to comment on. `info` returns 422 here.","schema":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]}},{"name":"contextid","in":"path","required":true,"description":"The ID of the item to comment on, matching `context`. For `guide` it is a `guideid` from `GET /guides`. For `step` it is a `stepid` from the `steps` of `GET /guides/{guideid}`. For `wiki` it is a `wikiid` from `GET /wikis/{namespace}/{title}`. For `story` it is a `storyid` from `GET /stories`. For `post` it is the `postid` of a question or answer, and a question's is in its `GET /search/{search}` result. No endpoint lists answers or news posts, so for an answer or a `wp_post` you need an ID you already have.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","minLength":12,"maxLength":4096,"description":"The comment, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax). Send 12 to 4096 UTF-8 bytes, counting the markup."},"parentid":{"type":"integer","description":"The `commentid` of a top-level comment to reply to. A reply to a reply returns 403. Leave it out for a new top-level comment."},"langid":{"type":"string","description":"Ignored."}}},"examples":{"comment":{"summary":"Leave a comment","value":{"text":"This worked for me, but I needed a smaller screwdriver than the one listed."}}}}}},"responses":{"201":{"description":"The new comment, with an empty `replies` array.","content":{"application/json":{"schema":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}}},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"description":"You can't view the guide, `parentid` is a reply, or the comment repeats your most recent one (same text, same item).","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"404":{"description":"The item `contextid` names doesn't exist, or `parentid` doesn't.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"422":{"description":"`context` or `contextid` isn't valid, `text` is missing or the wrong length, or the content was rejected.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/tags":{"get":{"operationId":"listTags","summary":"List tags","description":"Lists tag names, oldest first, or newest first with `order=DESC`. Only ordinary tags are listed. Device, product, language, source, and system tags are left out. In the default order, new tags are added at the end, so they don't move the pages before them. A new tag can take up to a minute to appear.","tags":["Tags"],"parameters":[{"name":"offset","in":"query","description":"Number of items to skip from the start of the list. See [paging](#api-1/description/paging).","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","description":"Maximum number of items to return. A value above 200 returns 200 items.","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}},{"name":"order","in":"query","description":"Sort direction, `ASC` or `DESC`.","schema":{"type":"string","enum":["ASC","DESC"],"default":"ASC"}}],"responses":{"200":{"description":"An array of tag names. It is empty when `offset` is past the last tag.","content":{"application/json":{"schema":{"type":"array","description":"Tag names, as plain strings.","items":{"type":"string"}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"list"}},"/teams":{"get":{"operationId":"listTeams","summary":"List teams","description":"Lists teams, ordered by `teamid`. `order` sets the direction. Business teams, deleted teams, and teams with no enabled, non-banned member aren't listed. `reputation`, `member_count`, and `new_member_since` count only enabled, non-banned members. A new team or member can take up to 5 minutes to appear.","tags":["Teams"],"parameters":[{"name":"offset","in":"query","description":"Number of items to skip from the start of the list. See [paging](#api-1/description/paging).","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","description":"Maximum number of items to return. A value above 200 returns 200 items.","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}},{"name":"order","in":"query","description":"Sort direction, `ASC` or `DESC`.","schema":{"type":"string","enum":["ASC","DESC"],"default":"ASC"}},{"name":"newMemberSince","in":"query","description":"A UNIX timestamp (seconds since January 1, 1970, UTC), such as `1767225600` for January 1, 2026. With it, only teams with a member who joined at or after that time are listed, and the counts cover only those members.","schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"A page of teams.","content":{"application/json":{"schema":{"type":"array","description":"Array of Team objects.","items":{"type":"object","description":"A team and its member totals.","properties":{"teamid":{"type":"integer","description":"The team's ID."},"name":{"type":"string","description":"The team's name. No two teams share a name."},"owner":{"type":"integer","description":"The `userid` of the team's owner."},"reputation":{"type":"integer","description":"Total reputation of the team's members. Members whose accounts are disabled or banned aren't counted."},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"object","description":"The picture a team with no photo of its own shows: a default avatar for its kind of team, or its school's avatar for a student team. Only the `mini` size exists, and it has no `id` or `guid`.","properties":{"mini":{"type":"string","format":"uri","description":"URL of the avatar, up to 56 pixels wide."}},"required":["mini"],"additionalProperties":false},{"type":"null"}],"description":"The team's own uploaded photo. `GET /teams` returns `null` when the team has no photo. A guide's allowed-team list never returns `null`: a team with no photo holds its default avatar instead, an object with only a `mini` URL."},"member_count":{"type":"integer","description":"Number of members. Members whose accounts are disabled or banned aren't counted."},"description":{"type":"string","description":"The team's description."},"new_member_since":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the most recent join among the counted members. `0` for a team on a guide's allowed-team list that has no counted members."}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"list"}},"/teams/{teamid}":{"get":{"operationId":"getTeam","summary":"List a team's members","description":"Lists the accounts on a team, sorted by `userid`. `order` sets the direction. The list isn't paginated. Disabled and banned accounts aren't listed.","tags":["Teams"],"parameters":[{"name":"teamid","in":"path","required":true,"description":"The `teamid` of the team, from `GET /teams`. Business teams aren't in that list. The `teams` field of a user lists every team the account belongs to, business teams included.","schema":{"type":"integer"}},{"name":"order","in":"query","description":"Sort direction, `ASC` or `DESC`.","schema":{"type":"string","enum":["ASC","DESC"],"default":"ASC"}}],"responses":{"200":{"description":"List of team members","content":{"application/json":{"schema":{"type":"array","description":"A list of accounts, each a short public view.","items":{"type":"object","description":"A short public view of an account. Lists of users and search results hold this shape. Full profiles add more fields.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"list"}},"/teams/{teamid}/users/{userid}":{"put":{"operationId":"addTeamMember","summary":"Add a team member","description":"Adds an account to a team. To join a team yourself, send your own `userid`, and the team's `join_code` if it has one. Adding another account requires an admin, and that account gets an invitation email unless it's already on the team.","tags":["Teams"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"teamid","in":"path","required":true,"description":"The `teamid` of the team, from `GET /teams`. Business teams aren't in that list. The `teams` field of a user lists every team the account belongs to, business teams included.","schema":{"type":"integer"}},{"name":"userid","in":"path","required":true,"description":"The `userid` of the account, from `GET /users`.","schema":{"type":"integer"}},{"name":"join_code","in":"query","description":"The team's join code, which only private teams have. It must match exactly. Without a code, you can join only a team that is open to join. Ignored if you're adding another account.","schema":{"type":"string"}}],"responses":{"200":{"description":"The team's members, ordered by `userid`.","content":{"application/json":{"schema":{"type":"array","description":"A list of accounts, each a short public view.","items":{"type":"object","description":"A short public view of an account. Lists of users and search results hold this shape. Full profiles add more fields.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The `join_code` is wrong, the team isn't open for you to join, or you aren't an admin and you're adding another account.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"removeTeamMember","summary":"Remove a team member","description":"Removes an account from a team. You can remove yourself. To remove another account, you must be the team's owner or an admin. If the owner is removed, the member who joined earliest becomes the owner. If no members remain, the team is deleted.","tags":["Teams"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"teamid","in":"path","required":true,"description":"The `teamid` of the team, from `GET /teams`. Business teams aren't in that list. The `teams` field of a user lists every team the account belongs to, business teams included.","schema":{"type":"integer"}},{"name":"userid","in":"path","required":true,"description":"The `userid` of the account, from `GET /users`.","schema":{"type":"integer"}}],"responses":{"200":{"description":"The remaining members, ordered by `userid`.","content":{"application/json":{"schema":{"type":"array","description":"A list of accounts, each a short public view.","items":{"type":"object","description":"A short public view of an account. Lists of users and search results hold this shape. Full profiles add more fields.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You can't remove this account from this team.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"write"}},"/teams/{teamid}/repair_services":{"get":{"operationId":"listRepairServices","summary":"List repair services","description":"Lists the device wikis a business team offers repair services for, in display order. You must be the team's owner or, on a private team, a member.","tags":["Teams"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"teamid","in":"path","required":true,"description":"The `teamid` of the team, from `GET /teams`. Business teams aren't in that list. The `teams` field of a user lists every team the account belongs to, business teams included.","schema":{"type":"integer"}}],"responses":{"200":{"description":"The team's repair services","content":{"application/json":{"schema":{"type":"array","description":"A business team's repair services, in display order","items":{"type":"object","description":"A device wiki a business team offers repair services for","properties":{"wikiid":{"type":"integer","description":"The device wiki's `wikiid`."},"displayTitle":{"type":"string","description":"The device's title, as the site shows it."},"url":{"type":"string","format":"uri","description":"URL of the device wiki's page on the site."}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You can't manage this team's repair services.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"account"},"post":{"operationId":"addRepairService","summary":"Add a repair service","description":"Adds a device's wiki to the end of a business team's repair services. You must be the team's owner or, on a private team, a member.","tags":["Teams"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"teamid","in":"path","required":true,"description":"The `teamid` of the team, from `GET /teams`. Business teams aren't in that list. The `teams` field of a user lists every team the account belongs to, business teams included.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["wikiid"],"properties":{"wikiid":{"type":"integer","description":"The `wikiid` of the device's wiki, from `GET /wikis/CATEGORY` with `display=leaves`."}}}}}},"responses":{"200":{"description":"The updated repair services","content":{"application/json":{"schema":{"type":"array","description":"A business team's repair services, in display order","items":{"type":"object","description":"A device wiki a business team offers repair services for","properties":{"wikiid":{"type":"integer","description":"The device wiki's `wikiid`."},"displayTitle":{"type":"string","description":"The device's title, as the site shows it."},"url":{"type":"string","format":"uri","description":"URL of the device wiki's page on the site."}}}}}}},"400":{"description":"`wikiid` is missing.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You can't manage this team's repair services.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"write"},"put":{"operationId":"reorderRepairServices","summary":"Reorder repair services","description":"Sets the display order of a business team's repair services. You must be the team's owner or, on a private team, a member.","tags":["Teams"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"teamid","in":"path","required":true,"description":"The `teamid` of the team, from `GET /teams`. Business teams aren't in that list. The `teams` field of a user lists every team the account belongs to, business teams included.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["wikiids"],"properties":{"wikiids":{"type":"array","description":"The `wikiid` of every current repair service, in the order to show them.","items":{"type":"integer"}}}}}}},"responses":{"200":{"description":"The updated repair services","content":{"application/json":{"schema":{"type":"array","description":"A business team's repair services, in display order","items":{"type":"object","description":"A device wiki a business team offers repair services for","properties":{"wikiid":{"type":"integer","description":"The device wiki's `wikiid`."},"displayTitle":{"type":"string","description":"The device's title, as the site shows it."},"url":{"type":"string","format":"uri","description":"URL of the device wiki's page on the site."}}}}}}},"400":{"description":"`wikiids` is missing or not a list.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You can't manage this team's repair services.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"write"}},"/teams/{teamid}/repair_services/{wikiid}":{"delete":{"operationId":"removeRepairService","summary":"Remove a repair service","description":"Removes a device's wiki from a business team's repair services. You must be the team's owner or, on a private team, a member.","tags":["Teams"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"teamid","in":"path","required":true,"description":"The `teamid` of the team, from `GET /teams`. Business teams aren't in that list. The `teams` field of a user lists every team the account belongs to, business teams included.","schema":{"type":"integer"}},{"name":"wikiid","in":"path","required":true,"description":"The `wikiid` of the device's wiki, from the team's repair services.","schema":{"type":"integer"}}],"responses":{"200":{"description":"The updated repair services","content":{"application/json":{"schema":{"type":"array","description":"A business team's repair services, in display order","items":{"type":"object","description":"A device wiki a business team offers repair services for","properties":{"wikiid":{"type":"integer","description":"The device wiki's `wikiid`."},"displayTitle":{"type":"string","description":"The device's title, as the site shows it."},"url":{"type":"string","format":"uri","description":"URL of the device wiki's page on the site."}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You can't manage this team's repair services.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"write"}},"/stories":{"get":{"operationId":"listStories","summary":"List stories","description":"Lists repair stories. Deleted stories are left out. Stories in the `langid` you send come first, then stories in the site's default language, then all others. Each group is sorted by `storyid`, in the `order` direction.","tags":["Stories"],"parameters":[{"name":"product","in":"query","description":"A product code such as `IF145-307`: `IF`, the first three digits of the product's six-digit code, a dash, then the last three. Lists only the stories that name this product. A value that isn't a product code returns an empty list.","schema":{"type":"string"}},{"name":"guideid","in":"query","description":"A `guideid` from `GET /guides`. Lists only the stories that name this guide.","schema":{"type":"integer"}},{"name":"langid","in":"query","description":"One of the [language codes](#api-1/description/language-codes). Stories in this language come first, and stories in other languages still follow. Without it, or with an unknown code, the site's default language comes first.","schema":{"type":"string"}},{"name":"requireImages","in":"query","allowEmptyValue":true,"description":"Send `?requireImages=true` to list only stories that have at least one image. Leave it out to list all stories.","schema":{"type":"boolean"}},{"name":"order","in":"query","description":"Sort direction, `ASC` or `DESC`.","schema":{"type":"string","enum":["ASC","DESC"],"default":"ASC"}},{"name":"offset","in":"query","description":"Number of items to skip from the start of the list. See [paging](#api-1/description/paging).","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","description":"Maximum number of items to return, from 1 to 50. The default is 20.","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}}],"responses":{"200":{"description":"The stories on this page. The list is empty when none match.","content":{"application/json":{"schema":{"type":"array","description":"List of stories.","items":{"type":"object","description":"A repair story: a customer's write-up of a repair they did.","properties":{"storyid":{"type":"integer","description":"Identifier of the story. Use it in `/stories/{storyid}`."},"langid":{"type":"string","description":"Language the story was written in, as one of the [language codes](#api-1/description/language-codes)."},"status":{"type":"string","description":"`open` for a story that is visible. `deleted` for one that was removed or marked as spam. Lists leave out `deleted` stories.","enum":["open","deleted"]},"view_url":{"type":"string","format":"uri","description":"Absolute URL of the story's page on the site."},"title_raw":{"type":"string","description":"Title as submitted, in plain text."},"title_rendered":{"type":"string","description":"Title in plain text, with profane words masked."},"intro_raw":{"type":"string","description":"Introduction as submitted, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"intro_rendered":{"type":"string","description":"Introduction as HTML."},"body_raw":{"type":"string","description":"Main text as submitted, in wiki markup."},"body_rendered":{"type":"string","description":"Main text as HTML."},"conclusion_raw":{"type":"string","description":"Conclusion as submitted, in wiki markup."},"conclusion_rendered":{"type":"string","description":"Conclusion as HTML."},"rating":{"type":["integer","null"],"description":"The author's rating of the repair, from 1 to 5. `null` when the author gave none."},"author":{"type":"object","description":"The user who wrote the story.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the story was published."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the last edit to the story."},"images":{"type":"array","description":"Photos attached to the story, in display order.","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},"products":{"type":"array","description":"Store products linked to this story, each with its name, link, price, and image.","items":{"type":"object","properties":{"dataType":{"type":"string","const":"product"},"langid":{"type":"string","description":"Language of the store the product is listed in, as one of the [language codes](#api-1/description/language-codes)."},"title":{"type":"string","description":"Name of the product."},"text":{"type":"string","description":"Short description of the product."},"url":{"type":"string","format":"uri","description":"Absolute URL of the product's page in the store."},"price":{"type":"string","description":"The product's price as a number without a currency symbol, such as `24.99`. The currency isn't in the response: it's the one the store in `langid` sells in. Empty when the product has no price."},"productCode":{"type":"integer","description":"The product's six-digit code as one number, such as `145307` for `IF145-307`."},"optionid":{"type":"integer","description":"Identifier of the product option (variant)."},"itemCode":{"type":"string","description":"Item code of the option."},"optionTitle":{"type":"string","description":"Name of the option."},"image":{"type":"object","description":"Product image URLs.","properties":{"id":{"type":"null"},"mini":{"type":"string","format":"uri","description":"URL of the smallest version."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small version."},"standard":{"type":"string","format":"uri","description":"URL of a medium version."},"original":{"type":"string","format":"uri","description":"URL of the full-size image."}}}}}},"guides":{"type":"array","description":"Guides related to this story. Guides that aren't public are left out.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"list"},"post":{"operationId":"createStory","summary":"Create a story","description":"Creates a repair story: a write-up of a repair you did. Send\n`title`, `intro`, `body`, and `conclusion`. For example:\n\n    {\"title\": \"Replacing my phone battery\", \"intro\": \"My battery died.\",\n     \"body\": \"I opened the case.\", \"conclusion\": \"It works again.\"}\n\nEverything else is optional. You can create one story a minute.","tags":["Stories"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title","intro","body","conclusion"],"properties":{"title":{"type":"string","minLength":8,"maxLength":80,"description":"The story's title, from 8 to 80 characters."},"intro":{"type":"string","minLength":1,"description":"The introduction, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"body":{"type":"string","minLength":1,"description":"The main text, in wiki markup."},"conclusion":{"type":"string","minLength":1,"description":"The conclusion, in wiki markup."},"langid":{"type":"string","description":"One of the [language codes](#api-1/description/language-codes). Without it, the language is detected from `body`. It can't be changed later."},"images":{"type":"array","maxItems":3,"items":{"type":"integer"},"description":"Up to 3 `imageid`s from your media manager (`GET /user/media/images`), in display order. Each image must be at least 800 pixels wide or 600 pixels tall. An image that isn't a 4:3 JPEG is cropped or converted and saved under a new `imageid`, so `images` in the response can differ from what you sent."},"guides":{"type":"array","items":{"type":"integer"},"description":"The `guideid`s of guides this story is about, from `GET /guides`. Each must be an existing guide, or the request returns 422."},"products":{"type":"array","items":{"type":"string"},"description":"Codes of the products this story is about, such as `IF145-307`: `IF`, the first three digits of the product's six-digit code, a dash, then the last three. An option number after that is dropped. Each code must match the `part_#` of an Item wiki's `suppliers` entry (from `GET /wikis/ITEM/{title}`), or the request returns 422."},"difficulty":{"type":"string","description":"How hard the repair was for the author. `Very easy` needs no opening of the device, `Easy` needs minimal disassembly with basic tools, `Moderate` needs so much disassembly that most people would want instructions, `Difficult` needs significant disassembly and may need soldering, and `Very difficult` may need specialized tools and risks damaging the device. Saved with the story, but the response doesn't show it.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},"time_taken":{"type":"integer","description":"How long the repair took, in seconds, from 0 to 31556926 (one year). A value outside that range becomes the nearest limit. Saved with the story, but the response doesn't show it."}}}}}},"responses":{"201":{"description":"The new story. `storyid` is its identifier.","content":{"application/json":{"schema":{"type":"object","description":"A repair story, with the same fields as a story in a list. Responses hold `intro_raw`, `body_raw`, and `conclusion_raw`, never the `intro`, `body`, and `conclusion` names you send in a request.","allOf":[{"type":"object","description":"A repair story: a customer's write-up of a repair they did.","properties":{"storyid":{"type":"integer","description":"Identifier of the story. Use it in `/stories/{storyid}`."},"langid":{"type":"string","description":"Language the story was written in, as one of the [language codes](#api-1/description/language-codes)."},"status":{"type":"string","description":"`open` for a story that is visible. `deleted` for one that was removed or marked as spam. Lists leave out `deleted` stories.","enum":["open","deleted"]},"view_url":{"type":"string","format":"uri","description":"Absolute URL of the story's page on the site."},"title_raw":{"type":"string","description":"Title as submitted, in plain text."},"title_rendered":{"type":"string","description":"Title in plain text, with profane words masked."},"intro_raw":{"type":"string","description":"Introduction as submitted, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"intro_rendered":{"type":"string","description":"Introduction as HTML."},"body_raw":{"type":"string","description":"Main text as submitted, in wiki markup."},"body_rendered":{"type":"string","description":"Main text as HTML."},"conclusion_raw":{"type":"string","description":"Conclusion as submitted, in wiki markup."},"conclusion_rendered":{"type":"string","description":"Conclusion as HTML."},"rating":{"type":["integer","null"],"description":"The author's rating of the repair, from 1 to 5. `null` when the author gave none."},"author":{"type":"object","description":"The user who wrote the story.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the story was published."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the last edit to the story."},"images":{"type":"array","description":"Photos attached to the story, in display order.","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},"products":{"type":"array","description":"Store products linked to this story, each with its name, link, price, and image.","items":{"type":"object","properties":{"dataType":{"type":"string","const":"product"},"langid":{"type":"string","description":"Language of the store the product is listed in, as one of the [language codes](#api-1/description/language-codes)."},"title":{"type":"string","description":"Name of the product."},"text":{"type":"string","description":"Short description of the product."},"url":{"type":"string","format":"uri","description":"Absolute URL of the product's page in the store."},"price":{"type":"string","description":"The product's price as a number without a currency symbol, such as `24.99`. The currency isn't in the response: it's the one the store in `langid` sells in. Empty when the product has no price."},"productCode":{"type":"integer","description":"The product's six-digit code as one number, such as `145307` for `IF145-307`."},"optionid":{"type":"integer","description":"Identifier of the product option (variant)."},"itemCode":{"type":"string","description":"Item code of the option."},"optionTitle":{"type":"string","description":"Name of the option."},"image":{"type":"object","description":"Product image URLs.","properties":{"id":{"type":"null"},"mini":{"type":"string","format":"uri","description":"URL of the smallest version."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small version."},"standard":{"type":"string","format":"uri","description":"URL of a medium version."},"original":{"type":"string","format":"uri","description":"URL of the full-size image."}}}}}},"guides":{"type":"array","description":"Guides related to this story. Guides that aren't public are left out.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"420":{"description":"You've reached a quota: your reputation is too low for this, or you've done it too often. The `message` says which.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"422":{"description":"A value is missing or invalid. If a required field is missing, `error` maps each missing field to `REQUIRED`. For any other invalid value, `errors` describes the field that failed."},"429":{"description":"You sent a create request in the last minute, even if it was rejected for an invalid value. The body holds your most recent story, not a new one. If you have no story, it holds an error message.","content":{"application/json":{"schema":{"type":"object","description":"A repair story, with the same fields as a story in a list. Responses hold `intro_raw`, `body_raw`, and `conclusion_raw`, never the `intro`, `body`, and `conclusion` names you send in a request.","allOf":[{"type":"object","description":"A repair story: a customer's write-up of a repair they did.","properties":{"storyid":{"type":"integer","description":"Identifier of the story. Use it in `/stories/{storyid}`."},"langid":{"type":"string","description":"Language the story was written in, as one of the [language codes](#api-1/description/language-codes)."},"status":{"type":"string","description":"`open` for a story that is visible. `deleted` for one that was removed or marked as spam. Lists leave out `deleted` stories.","enum":["open","deleted"]},"view_url":{"type":"string","format":"uri","description":"Absolute URL of the story's page on the site."},"title_raw":{"type":"string","description":"Title as submitted, in plain text."},"title_rendered":{"type":"string","description":"Title in plain text, with profane words masked."},"intro_raw":{"type":"string","description":"Introduction as submitted, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"intro_rendered":{"type":"string","description":"Introduction as HTML."},"body_raw":{"type":"string","description":"Main text as submitted, in wiki markup."},"body_rendered":{"type":"string","description":"Main text as HTML."},"conclusion_raw":{"type":"string","description":"Conclusion as submitted, in wiki markup."},"conclusion_rendered":{"type":"string","description":"Conclusion as HTML."},"rating":{"type":["integer","null"],"description":"The author's rating of the repair, from 1 to 5. `null` when the author gave none."},"author":{"type":"object","description":"The user who wrote the story.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the story was published."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the last edit to the story."},"images":{"type":"array","description":"Photos attached to the story, in display order.","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},"products":{"type":"array","description":"Store products linked to this story, each with its name, link, price, and image.","items":{"type":"object","properties":{"dataType":{"type":"string","const":"product"},"langid":{"type":"string","description":"Language of the store the product is listed in, as one of the [language codes](#api-1/description/language-codes)."},"title":{"type":"string","description":"Name of the product."},"text":{"type":"string","description":"Short description of the product."},"url":{"type":"string","format":"uri","description":"Absolute URL of the product's page in the store."},"price":{"type":"string","description":"The product's price as a number without a currency symbol, such as `24.99`. The currency isn't in the response: it's the one the store in `langid` sells in. Empty when the product has no price."},"productCode":{"type":"integer","description":"The product's six-digit code as one number, such as `145307` for `IF145-307`."},"optionid":{"type":"integer","description":"Identifier of the product option (variant)."},"itemCode":{"type":"string","description":"Item code of the option."},"optionTitle":{"type":"string","description":"Name of the option."},"image":{"type":"object","description":"Product image URLs.","properties":{"id":{"type":"null"},"mini":{"type":"string","format":"uri","description":"URL of the smallest version."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small version."},"standard":{"type":"string","format":"uri","description":"URL of a medium version."},"original":{"type":"string","format":"uri","description":"URL of the full-size image."}}}}}},"guides":{"type":"array","description":"Guides related to this story. Guides that aren't public are left out.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}}}}]}}}}},"x-api-usage-kind":"write"}},"/stories/{storyid}":{"get":{"operationId":"getStory","summary":"Get a story","description":"Returns a repair story. A deleted story returns 404.","tags":["Stories"],"parameters":[{"name":"storyid","in":"path","required":true,"description":"The `storyid` of the story, from `GET /stories` or from the response when you created it.","schema":{"type":"integer"}}],"responses":{"200":{"description":"The story.","content":{"application/json":{"schema":{"type":"object","description":"A repair story, with the same fields as a story in a list. Responses hold `intro_raw`, `body_raw`, and `conclusion_raw`, never the `intro`, `body`, and `conclusion` names you send in a request.","allOf":[{"type":"object","description":"A repair story: a customer's write-up of a repair they did.","properties":{"storyid":{"type":"integer","description":"Identifier of the story. Use it in `/stories/{storyid}`."},"langid":{"type":"string","description":"Language the story was written in, as one of the [language codes](#api-1/description/language-codes)."},"status":{"type":"string","description":"`open` for a story that is visible. `deleted` for one that was removed or marked as spam. Lists leave out `deleted` stories.","enum":["open","deleted"]},"view_url":{"type":"string","format":"uri","description":"Absolute URL of the story's page on the site."},"title_raw":{"type":"string","description":"Title as submitted, in plain text."},"title_rendered":{"type":"string","description":"Title in plain text, with profane words masked."},"intro_raw":{"type":"string","description":"Introduction as submitted, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"intro_rendered":{"type":"string","description":"Introduction as HTML."},"body_raw":{"type":"string","description":"Main text as submitted, in wiki markup."},"body_rendered":{"type":"string","description":"Main text as HTML."},"conclusion_raw":{"type":"string","description":"Conclusion as submitted, in wiki markup."},"conclusion_rendered":{"type":"string","description":"Conclusion as HTML."},"rating":{"type":["integer","null"],"description":"The author's rating of the repair, from 1 to 5. `null` when the author gave none."},"author":{"type":"object","description":"The user who wrote the story.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the story was published."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the last edit to the story."},"images":{"type":"array","description":"Photos attached to the story, in display order.","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},"products":{"type":"array","description":"Store products linked to this story, each with its name, link, price, and image.","items":{"type":"object","properties":{"dataType":{"type":"string","const":"product"},"langid":{"type":"string","description":"Language of the store the product is listed in, as one of the [language codes](#api-1/description/language-codes)."},"title":{"type":"string","description":"Name of the product."},"text":{"type":"string","description":"Short description of the product."},"url":{"type":"string","format":"uri","description":"Absolute URL of the product's page in the store."},"price":{"type":"string","description":"The product's price as a number without a currency symbol, such as `24.99`. The currency isn't in the response: it's the one the store in `langid` sells in. Empty when the product has no price."},"productCode":{"type":"integer","description":"The product's six-digit code as one number, such as `145307` for `IF145-307`."},"optionid":{"type":"integer","description":"Identifier of the product option (variant)."},"itemCode":{"type":"string","description":"Item code of the option."},"optionTitle":{"type":"string","description":"Name of the option."},"image":{"type":"object","description":"Product image URLs.","properties":{"id":{"type":"null"},"mini":{"type":"string","format":"uri","description":"URL of the smallest version."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small version."},"standard":{"type":"string","format":"uri","description":"URL of a medium version."},"original":{"type":"string","format":"uri","description":"URL of the full-size image."}}}}}},"guides":{"type":"array","description":"Guides related to this story. Guides that aren't public are left out.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"get"},"patch":{"operationId":"updateStory","summary":"Update a story","description":"Changes the fields you send, and leaves the others as they are. For\nexample, this changes only the title:\n\n    {\"title\": \"A better title\"}\n\nFields the API doesn't recognize are ignored. A story's language can't\nchange after you create it.","tags":["Stories"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"storyid","in":"path","required":true,"description":"The `storyid` of the story, from `GET /stories` or from the response when you created it.","schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":8,"maxLength":80,"description":"The story's title, from 8 to 80 characters."},"intro":{"type":"string","minLength":1,"description":"The introduction, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"body":{"type":"string","minLength":1,"description":"The main text, in wiki markup."},"conclusion":{"type":"string","minLength":1,"description":"The conclusion, in wiki markup."},"images":{"type":"array","maxItems":3,"items":{"type":"integer"},"description":"Up to 3 `imageid`s from your media manager (`GET /user/media/images`), in display order. This list replaces the story's images. Each image you add must be at least 800 pixels wide or 600 pixels tall. An image that isn't a 4:3 JPEG is cropped or converted and saved under a new `imageid`, so `images` in the response can differ from what you sent."},"guides":{"type":"array","items":{"type":"integer"},"description":"The `guideid`s of guides this story is about, from `GET /guides`. This list replaces the story's guides. Each must be an existing guide, or the request returns 422."},"products":{"type":"array","items":{"type":"string"},"description":"Codes of the products this story is about, such as `IF145-307`: `IF`, the first three digits of the product's six-digit code, a dash, then the last three. An option number after that is dropped. Each code must match the `part_#` of an Item wiki's `suppliers` entry (from `GET /wikis/ITEM/{title}`), or the request returns 422. This list replaces the story's products."},"object":{"type":["integer","null"],"description":"The `objectid` of a video in your media manager (from `GET /user/media/videos`), or `null` to remove the story's video. The story's page shows the video only if the story has no images. The response doesn't show it."},"difficulty":{"type":"string","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"],"description":"How hard the repair was for the author. `Very easy` needs no opening of the device, `Easy` needs minimal disassembly with basic tools, `Moderate` needs so much disassembly that most people would want instructions, `Difficult` needs significant disassembly and may need soldering, and `Very difficult` may need specialized tools and risks damaging the device. Saved with the story, but the response doesn't show it."},"time_taken":{"type":"integer","description":"How long the repair took, in seconds, from 0 to 31556926 (one year). A value outside that range becomes the nearest limit. Saved with the story, but the response doesn't show it."}}}}}},"responses":{"200":{"description":"The story as it is now, whether or not your request changed anything.","content":{"application/json":{"schema":{"type":"object","description":"A repair story, with the same fields as a story in a list. Responses hold `intro_raw`, `body_raw`, and `conclusion_raw`, never the `intro`, `body`, and `conclusion` names you send in a request.","allOf":[{"type":"object","description":"A repair story: a customer's write-up of a repair they did.","properties":{"storyid":{"type":"integer","description":"Identifier of the story. Use it in `/stories/{storyid}`."},"langid":{"type":"string","description":"Language the story was written in, as one of the [language codes](#api-1/description/language-codes)."},"status":{"type":"string","description":"`open` for a story that is visible. `deleted` for one that was removed or marked as spam. Lists leave out `deleted` stories.","enum":["open","deleted"]},"view_url":{"type":"string","format":"uri","description":"Absolute URL of the story's page on the site."},"title_raw":{"type":"string","description":"Title as submitted, in plain text."},"title_rendered":{"type":"string","description":"Title in plain text, with profane words masked."},"intro_raw":{"type":"string","description":"Introduction as submitted, in [wiki markup](https://www.ifixit.com/Help/Wiki_Formatting_And_Syntax)."},"intro_rendered":{"type":"string","description":"Introduction as HTML."},"body_raw":{"type":"string","description":"Main text as submitted, in wiki markup."},"body_rendered":{"type":"string","description":"Main text as HTML."},"conclusion_raw":{"type":"string","description":"Conclusion as submitted, in wiki markup."},"conclusion_rendered":{"type":"string","description":"Conclusion as HTML."},"rating":{"type":["integer","null"],"description":"The author's rating of the repair, from 1 to 5. `null` when the author gave none."},"author":{"type":"object","description":"The user who wrote the story.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the story was published."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the last edit to the story."},"images":{"type":"array","description":"Photos attached to the story, in display order.","items":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]}},"products":{"type":"array","description":"Store products linked to this story, each with its name, link, price, and image.","items":{"type":"object","properties":{"dataType":{"type":"string","const":"product"},"langid":{"type":"string","description":"Language of the store the product is listed in, as one of the [language codes](#api-1/description/language-codes)."},"title":{"type":"string","description":"Name of the product."},"text":{"type":"string","description":"Short description of the product."},"url":{"type":"string","format":"uri","description":"Absolute URL of the product's page in the store."},"price":{"type":"string","description":"The product's price as a number without a currency symbol, such as `24.99`. The currency isn't in the response: it's the one the store in `langid` sells in. Empty when the product has no price."},"productCode":{"type":"integer","description":"The product's six-digit code as one number, such as `145307` for `IF145-307`."},"optionid":{"type":"integer","description":"Identifier of the product option (variant)."},"itemCode":{"type":"string","description":"Item code of the option."},"optionTitle":{"type":"string","description":"Name of the option."},"image":{"type":"object","description":"Product image URLs.","properties":{"id":{"type":"null"},"mini":{"type":"string","format":"uri","description":"URL of the smallest version."},"thumbnail":{"type":"string","format":"uri","description":"URL of a small version."},"standard":{"type":"string","format":"uri","description":"URL of a medium version."},"original":{"type":"string","format":"uri","description":"URL of the full-size image."}}}}}},"guides":{"type":"array","description":"Guides related to this story. Guides that aren't public are left out.","items":{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The story belongs to someone else.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"422":{"description":"A value is invalid. `errors` describes the field that failed.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"deleteStory","summary":"Delete a story","description":"Deletes a story. After that, `GET /stories/{storyid}` returns 404 and the story no longer appears in the list.","tags":["Stories"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"storyid","in":"path","required":true,"description":"The `storyid` of the story, from `GET /stories` or from the response when you created it.","schema":{"type":"integer"}}],"responses":{"204":{"description":"The story is deleted. The body is empty. Deleting it again returns 204 too."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The story belongs to someone else.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"write"}},"/search/{search}":{"get":{"operationId":"search","summary":"Search repair content","description":"Finds guides, device and category pages, wiki pages, parts and tools, questions, and site pages that match the search text in the path. Add `filter` to limit the result types. The result types share `limit` as evenly as possible, and results are grouped by type in the order of `filter`. Within a group, the best match comes first, except that with `fallbackToDefaultLanguage`, results in `langid` come before the others. One response holds all the results, up to `limit`. The search text is cut to 256 bytes.","tags":["Search"],"security":[],"parameters":[{"name":"search","in":"path","required":true,"description":"The text to search for.","schema":{"type":"string"},"example":"Nintendo Switch won't charge"},{"name":"filter","in":"query","description":"A comma-separated list of result types. `guide` is any guide, including teardowns. `teardown` is only teardown guides. `question` is an Answers question. `page` is a site page, `item` a part or tool, and `topic` a device or category page. `wiki` is a general wiki page, `info` a page of information about the site, and `help` a help page. `category` and `device` mean the same as `topic`. The API ignores values it doesn't know. Without a valid type, search covers all of them.","schema":{"type":"string"},"example":"guide,question"},{"name":"langid","in":"query","description":"The language of the results, as one of the [language codes](#api-1/description/language-codes). Without it, you get the site's default language.","schema":{"type":"string"},"example":"en"},{"name":"fallbackToDefaultLanguage","in":"query","description":"Send `1` to also include results in the site's default language. Leave it out to use only `langid`.","schema":{"type":"string"}},{"name":"limit","in":"query","description":"The most results to return, from 1 to 100. The default is 100. The API replaces a number outside that range with the nearest end of it.","schema":{"type":"integer","default":100}}],"responses":{"200":{"description":"The matching results, grouped by type.","content":{"application/json":{"schema":{"type":"object","description":"The results of a search, up to `limit` of them.","required":["search","offset","limit","totalResults","moreResults","results"],"properties":{"search":{"type":"string","description":"The text that was searched: your query with spaces trimmed from the ends and cut to 256 bytes."},"offset":{"type":"integer","const":0},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"The `limit` this search used: the one you sent, moved into range if it was outside it, or 100 if you sent none."},"totalResults":{"type":"integer","description":"How many results this response holds. It is not a count of everything that matches."},"moreResults":{"type":"boolean","const":false},"results":{"type":"array","description":"The matches, spread across the requested types and grouped in the order you requested them. Empty when nothing matches.","items":{"type":"object","description":"One search or suggestion result. `dataType` says what kind it is, and each kind has its own fields, so check it before you read the others. A page result holds only `title`, `text`, and `url`, and has no ID, so use its `url` to reach it. Search can return all four kinds. Suggestions return guide, wiki, and question results.","required":["dataType"],"properties":{"dataType":{"type":"string","description":"The kind of result: `guide`, `wiki`, `question`, or `page`. Device, category, part, and tool pages are `wiki`, and teardowns are `guide`."},"wikiid":{"type":"integer","description":"The `wikiid` of the wiki page. Only `wiki` results have it."},"guideid":{"type":"integer","description":"The `guideid` of the guide. Only `guide` results have it."},"postid":{"type":"integer","description":"The `postid` of the question post. Only `question` results have it."},"revisionid":{"type":"integer","description":"Revision of the guide this result describes. Only `guide` results have it."},"namespace":{"type":"string","description":"The kind of wiki page, such as `CATEGORY` for a device or category page. Only `wiki` results have it."},"langid":{"type":"string","description":"Language code of this result. `guide` results hold their language in `locale` instead, and `page` results have neither."},"locale":{"type":"string","description":"Language code of a `guide` result. Other kinds hold theirs in `langid`."},"title":{"type":"string","description":"The title. For a `wiki` result it is the URL-safe form of the title, and `display_title` is the readable one. Other kinds hold the readable title."},"display_title":{"type":"string","description":"Readable title of a `wiki` result."},"summary":{"type":"string","description":"Short summary. A `guide` result holds an excerpt of the guide's introduction. A `wiki` result holds the page's saved summary, which can be empty or `null`."},"text":{"type":"string","description":"Short text describing the result. A `wiki` result holds its summary. A device or category page without one gets a generated description, and other pages without one get an empty string. A `question` result holds text from the question."},"url":{"type":"string","format":"uri-reference","description":"Link to the result's page on the site."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the last edit. Only `guide` and `wiki` results have it."},"author":{"type":"integer","description":"`userid` of the page's author. Only `wiki` results have it."},"image":{"description":"The result's main image, or `null` when it has none.","anyOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"object","description":"Image URLs for a `wiki` result with no image of its own. They point to an image from a related page, or to a generic placeholder.","required":["mini","thumbnail","standard","medium"],"properties":{"mini":{"type":"string","description":"URL of the smallest thumbnail, up to 56 pixels wide."},"thumbnail":{"type":"string","description":"URL of a thumbnail up to 96 pixels wide."},"standard":{"type":"string","description":"URL of an image up to 300 pixels wide."},"medium":{"type":"string","description":"URL of an image up to 592 pixels wide."}}},{"type":"null"}]}}}}}}}}},"422":{"description":"`langid` isn't a known language code, `limit` isn't a whole number, or a parameter is sent in array form, such as `filter[]=guide`."}},"x-api-usage-kind":"search"}},"/suggest/{query}":{"get":{"operationId":"suggest","summary":"Get search suggestions","description":"Returns up to 10 results whose titles match the text typed so far, for a search box that updates as someone types. Use `doctypes` to choose the result types. The result types share the 10 as evenly as possible, and results are grouped by type in the order of `doctypes`. A query of `guideid:123` returns just that guide, if you can view it. An empty query returns an empty `results` array.","tags":["Search"],"parameters":[{"name":"query","in":"path","required":true,"description":"The text typed so far.","schema":{"type":"string"}},{"name":"doctypes","in":"query","description":"A comma-separated list of result types: `guide`, `item` (parts and tools), `topic` (device and category pages), `question` (Answers questions), and `all`. `all` is the default and means `topic` and `guide`. `device` and `category` mean the same as `topic`, and `post` means the same as `question`. The API ignores values it doesn't know. If none are known, the request returns 400.","schema":{"type":"string","example":"guide,device,category,question,all"}},{"name":"langid","in":"query","description":"The language of the results, as one of the [language codes](#api-1/description/language-codes). Without it, or with an unknown code, you get the site's default language.","schema":{"type":"string"}},{"name":"fallbackToDefaultLanguage","in":"query","description":"Send `true` to also include results in the site's default language. Leave it out to use only `langid`.","schema":{"type":"boolean"}},{"name":"showAllLanguages","in":"query","description":"Send `true` with a `guideid:` query to also get a guide that has no version in `langid` or the site's default language. It comes back in the language it was first written in. A text search finds the same results either way.","schema":{"type":"boolean"}},{"name":"guideDevice","in":"query","description":"The title of a device, as listed by `GET /categories`. Only results for that device come back. This doesn't apply to a `guideid:` query.","schema":{"type":"string"}}],"responses":{"200":{"description":"The matching results, grouped by type.","content":{"application/json":{"schema":{"type":"object","description":"The query as you sent it, and up to 10 matching results.","properties":{"query":{"type":"string","description":"The query exactly as sent in the path."},"results":{"type":"array","description":"The matches, spread across the requested types and grouped in the order you requested them. Empty when nothing matches.","items":{"type":"object","description":"One search or suggestion result. `dataType` says what kind it is, and each kind has its own fields, so check it before you read the others. A page result holds only `title`, `text`, and `url`, and has no ID, so use its `url` to reach it. Search can return all four kinds. Suggestions return guide, wiki, and question results.","required":["dataType"],"properties":{"dataType":{"type":"string","description":"The kind of result: `guide`, `wiki`, `question`, or `page`. Device, category, part, and tool pages are `wiki`, and teardowns are `guide`."},"wikiid":{"type":"integer","description":"The `wikiid` of the wiki page. Only `wiki` results have it."},"guideid":{"type":"integer","description":"The `guideid` of the guide. Only `guide` results have it."},"postid":{"type":"integer","description":"The `postid` of the question post. Only `question` results have it."},"revisionid":{"type":"integer","description":"Revision of the guide this result describes. Only `guide` results have it."},"namespace":{"type":"string","description":"The kind of wiki page, such as `CATEGORY` for a device or category page. Only `wiki` results have it."},"langid":{"type":"string","description":"Language code of this result. `guide` results hold their language in `locale` instead, and `page` results have neither."},"locale":{"type":"string","description":"Language code of a `guide` result. Other kinds hold theirs in `langid`."},"title":{"type":"string","description":"The title. For a `wiki` result it is the URL-safe form of the title, and `display_title` is the readable one. Other kinds hold the readable title."},"display_title":{"type":"string","description":"Readable title of a `wiki` result."},"summary":{"type":"string","description":"Short summary. A `guide` result holds an excerpt of the guide's introduction. A `wiki` result holds the page's saved summary, which can be empty or `null`."},"text":{"type":"string","description":"Short text describing the result. A `wiki` result holds its summary. A device or category page without one gets a generated description, and other pages without one get an empty string. A `question` result holds text from the question."},"url":{"type":"string","format":"uri-reference","description":"Link to the result's page on the site."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the last edit. Only `guide` and `wiki` results have it."},"author":{"type":"integer","description":"`userid` of the page's author. Only `wiki` results have it."},"image":{"description":"The result's main image, or `null` when it has none.","anyOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"object","description":"Image URLs for a `wiki` result with no image of its own. They point to an image from a related page, or to a generic placeholder.","required":["mini","thumbnail","standard","medium"],"properties":{"mini":{"type":"string","description":"URL of the smallest thumbnail, up to 56 pixels wide."},"thumbnail":{"type":"string","description":"URL of a thumbnail up to 96 pixels wide."},"standard":{"type":"string","description":"URL of an image up to 300 pixels wide."},"medium":{"type":"string","description":"URL of an image up to 592 pixels wide."}}},{"type":"null"}]}}}}},"required":["query","results"]}}}},"400":{"description":"`doctypes` holds no result type the API knows.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"search"}},"/media/images/{imageid}":{"get":{"operationId":"getImage","summary":"Get an image","description":"Returns an image's URLs at each size, its dimensions, and its EXIF data. You can view an image you uploaded and an image used in content you can view.","tags":["Media"],"parameters":[{"name":"imageid","in":"path","required":true,"description":"The image's `imageid` (an integer) or its `guid` (a string).","schema":{"oneOf":[{"type":"integer"},{"type":"string"}]}}],"responses":{"200":{"description":"Image information","content":{"application/json":{"schema":{"type":"object","description":"An image's URLs together with its metadata.","properties":{"image":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy, such as a crop. `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels.","example":2420},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels.","example":1815},"ratio":{"type":"string","description":"Shape the image is held to. `ONE_ONE` is square and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"],"example":"FOUR_THREE"},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source, as steps separated by semicolons, such as `crop,1x1,250x250;enhance;`. `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) read from the image, as an object keyed by tag name. An empty array `[]`, not an object, when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"get"}},"/media/videos/{videoid}":{"get":{"operationId":"getVideo","summary":"Get a video","description":"Returns a video's details, with a URL for each encoded version of it. You can view a video you uploaded and a video used in a guide you can view.","tags":["Media"],"parameters":[{"name":"videoid","in":"path","required":true,"description":"The video's `videoid`, not its `objectid`, or its `guid`. A number is taken as a `videoid` and anything else as a `guid`. The upload response and `GET /user/media/videos` give both.","schema":{"oneOf":[{"type":"integer"},{"type":"string"}]}}],"responses":{"200":{"description":"Video information","content":{"application/json":{"schema":{"type":"object","description":"A video, its thumbnail, and its encoded files.","properties":{"videoid":{"type":"integer","description":"The video's ID. Use it with `GET /media/videos/{videoid}`. A guide uses `objectid` instead."},"objectid":{"type":"integer","description":"ID to use this video in a guide. Send it as `objectid` for a guide's intro video, or as `media.data` with `type: object` on a step. The video must be in your media manager."},"srcid":{"type":["integer","null"],"description":"`videoid` of the video this one was made from; `null` for a video that was uploaded."},"filename":{"type":"string","description":"The filename the video was uploaded with."},"duration":{"type":"integer","description":"Length of the video, in milliseconds."},"width":{"type":"integer","description":"Video width in pixels"},"height":{"type":"integer","description":"Video height in pixels"},"image":{"type":["object","null"],"description":"Thumbnail image info, in the same structure as the `/media/images` response. `null` when the video has no thumbnail.","properties":{"image":{"type":"object","description":"Image object with size URLs","additionalProperties":true},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy; `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels."},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels."},"ratio":{"type":"string","description":"Shape the image is held to: `ONE_ONE` is square, `FOUR_THREE` is 4:3, and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"]},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source; `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) of the image, keyed by tag name. An empty array when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}},"meta":{"type":["object","null"],"description":"Technical details of the uploaded video file. `null` when none were recorded, so don't rely on it being there.","properties":{"video_codec":{"type":"string","description":"Name of the video codec, such as `h264`."},"audio_codec":{"type":"string","description":"Name of the audio codec, such as `aac`."},"frame_rate":{"type":"number","description":"Frames per second."},"width":{"type":"integer","description":"Width of the uploaded file, in pixels."},"height":{"type":"integer","description":"Height of the uploaded file, in pixels."},"duration_in_ms":{"type":"integer","description":"Length of the video, in milliseconds."},"file_size_in_bytes":{"type":"integer","description":"Size of the uploaded file, in bytes."},"video_bitrate_in_kbps":{"type":"integer","description":"Video bitrate, in kilobits per second."},"audio_bitrate_in_kbps":{"type":"integer","description":"Audio bitrate, in kilobits per second."},"total_bitrate_in_kbps":{"type":"integer","description":"Video and audio bitrate together, in kilobits per second."},"audio_sample_rate":{"type":"integer","description":"Audio samples per second, in hertz."},"channels":{"type":"string","description":"Number of audio channels, as a string such as `1`."},"format":{"type":"string","description":"Container format of the uploaded file, such as `mpeg4`."},"state":{"type":"string","description":"`finished` when the file's details are complete. `processing` and `failed` mean they aren't.","enum":["finished","processing","failed"]},"md5_checksum":{"type":["string","null"],"description":"MD5 checksum of the uploaded file; `null` when not recorded."},"id":{"type":"integer","description":"An identifier for the recorded details."}}},"encodings":{"type":"array","description":"The encoded versions that exist for the video. The array is empty when none do, for example while the video is still processing. An encoding's `width` and `height` are the size it is labeled with. The file keeps the video's aspect ratio, so its actual size can differ.","items":{"type":"object","properties":{"column":{"type":"string","description":"Name of the encoding, such as `MP4_720`."},"label":{"type":"string","description":"Quality label for people, such as `480p`."},"width":{"type":"integer","description":"Width, in pixels."},"height":{"type":"integer","description":"Height, in pixels."},"codecs":{"type":"string","description":"The codecs in the file, written the way a browser expects them in a `<source>` element's `type`, such as `avc1.4D4029, mp4a.40.2`."},"mime":{"type":"string","description":"The file's MIME type, such as `video/mp4`."},"format":{"type":"string","description":"File format of the encoding, such as `mp4`."},"url":{"type":"string","format":"uri","description":"URL of the encoded video file."},"always_generate":{"type":"boolean","description":"`true` when every video gets this encoding."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"get"}},"/media/documents/{id}":{"get":{"operationId":"getDocument","summary":"Get a document","description":"Returns a document's details. You can view a document you uploaded to your media manager (the images, videos, documents, and embeds you've uploaded or copied), and one attached to a guide you can view, a wiki, or an Answers post. You can view a certification upload that you or your team own.","tags":["Media"],"parameters":[{"name":"id","in":"path","required":true,"description":"The document's `documentid` or its `guid`. A number shorter than 16 digits is taken as a `documentid` and anything else as a `guid`.","schema":{"oneOf":[{"type":"integer"},{"type":"string"}]}}],"responses":{"200":{"description":"Document information","content":{"application/json":{"schema":{"type":"object","description":"A document file, such as a PDF. When the document has no thumbnail, `thumbnailid` and `imageid` are `null`, and `standard`, `thumbnail`, and `mini` hold the URL of a placeholder image.","properties":{"documentid":{"type":"integer","description":"The document's ID."},"guid":{"type":"string","description":"String that identifies the document. `GET /media/documents/{id}` takes it in place of `documentid`."},"filename":{"type":["string","null"],"description":"The document's filename, with its extension. It's the name it was uploaded with unless someone edited it."},"title":{"type":"string","description":"Display title; falls back to the filename when no title is set, and to an empty string when both are unset"},"size":{"type":"integer","description":"Size of the file, in bytes."},"thumbnailid":{"type":["integer","null"],"description":"`imageid` of the document's thumbnail; `null` when the document has no thumbnail"},"imageid":{"type":["integer","null"],"description":"Same value as `thumbnailid`."},"document_type":{"type":"string","description":"The file's format, set by its extension, such as `pdf` or `word`."},"document_extension":{"type":"string","description":"The file's extension in lowercase, without the dot."},"document_group":{"type":"string","description":"The broader kind of file, such as `pdf` or `office`."},"standard":{"type":"string","format":"uri","description":"Thumbnail image URL at standard size"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail image URL at thumbnail size"},"mini":{"type":"string","format":"uri","description":"Thumbnail image URL at mini size"},"edit_url":{"type":"string","description":"Path, without the scheme or host, of the page where the document's details are edited: `/Document/Edit/{guid}`."},"view_url":{"type":"string","description":"Path, without the scheme or host, of the page that shows the document: `/Document/{guid}/{filename}`."},"download_url":{"type":"string","format":"uri","description":"Full URL to download the file."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the document was uploaded."},"summary":{"type":["string","null"],"description":"A short description of the document; `null` when it has none."},"pages":{"type":"integer","description":"Number of pages. `0` when the count isn't known, as it isn't for files that aren't PDFs."},"type":{"type":"string","const":"Document","description":"The kind of media item."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"content","x-badges":[{"name":"Content","color":"#c2e3ff"}]}},"/documents/{documentid}":{"patch":{"operationId":"patchDocumentMetadata","summary":"Edit a document's details","description":"Changes a document's title, filename, or summary. Send at least one of them. Fields you leave out stay the same. A new filename also changes the document page's URL, and the old URL redirects to the new one. The file itself never changes. You can make these changes to a document you uploaded.","tags":["Media"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"documentid","in":"path","required":true,"description":"The document's `documentid`. You get it as `id` when you upload the document with `POST /user/media/upload`.","schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"anyOf":[{"required":["title"]},{"required":["filename"]},{"required":["summary"]}],"properties":{"title":{"type":"string","maxLength":255,"pattern":"\\S","description":"The document's title. Spaces at either end are removed, and what's left can't be empty."},"filename":{"type":"string","description":"The document's new filename, as it appears in the page's URL. A name, not a path. It must end with the document's current extension, in any capitalization, and the part before the extension is 1 to 100 characters."},"summary":{"type":"string","maxLength":500,"description":"A short description of what the document is."}}},"example":{"title":"Dell Latitude E6400 Service Manual","filename":"dell-latitude-e6400-service-manual.pdf"}}}},"responses":{"200":{"description":"The document's updated details","content":{"application/json":{"schema":{"type":"object","required":["documentid","guid","title","filename","summary"],"properties":{"documentid":{"type":"integer","description":"The `documentid` from the path."},"guid":{"type":"string","description":"The document's permanent identifier in its file URLs."},"title":{"type":["string","null"],"description":"The document's title after this change. `null` if it has none."},"filename":{"type":["string","null"],"description":"The document's filename after this change, with its extension. `null` if it has none."},"summary":{"type":["string","null"],"description":"The document's summary after this change. `null` if it has none."}}}}}},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"422":{"description":"A field isn't valid, no field was sent, or the filename doesn't end with the document's extension.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"deleteDocument","summary":"Delete a document","description":"Deletes a document and its page. This can't be undone. Past guide versions, workbench attachments, and certification uploads that use the document lose it. Admins only.","tags":["Media"],"security":[{"apiToken":[]}],"parameters":[{"name":"documentid","in":"path","required":true,"description":"The document's `documentid`. You get it as `id` when you upload the document with `POST /user/media/upload`.","schema":{"type":"integer","minimum":1}}],"responses":{"204":{"description":"The request worked. The response has no body."},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"409":{"description":"A live guide, a wiki, or an Answers post still attaches the document. A removed post doesn't count. Nothing is deleted.","content":{"application/json":{"schema":{"type":"object","required":["message","attachments"],"properties":{"message":{"type":"string","description":"Says to detach the document from these pages first."},"attachments":{"type":"array","description":"The pages that attach the document, one entry for each language of a guide or wiki.","items":{"type":"object","required":["type","id","title","url"],"properties":{"type":{"type":"string","enum":["guide","wiki","post"],"description":"What attaches the document: a `guide`, a `wiki` page, or an Answers `post`."},"id":{"type":"integer","description":"The `guideid`, `wikiid`, or `postid` of the page."},"title":{"type":"string","description":"The page's title. A guide or wiki in a language other than the site's default has the language's name added in parentheses."},"url":{"type":"string","format":"uri","description":"Link to the page."}}}}}},"example":{"message":"Detach the document from these pages before deleting it","attachments":[{"type":"wiki","id":12345,"title":"Dell Latitude E6400","url":"https://www.ifixit.com/Device/Dell_Latitude_E6400"}]}}}}},"x-api-usage-kind":"write"}},"/troubleshooting/{title}":{"get":{"operationId":"getTroubleshooting","summary":"Get a troubleshooting page","description":"Gets a troubleshooting page, which lists the causes of a problem with a device and how to fix each one. `solutions` holds the causes and fixes in order, with `introduction` before them and `conclusion` after. The guides, products, and parts the page links to come back as structured objects, not wiki text.\n\nTo edit the page, send `PATCH /wikis/WIKI/{title}`. `GET /wikis/{id}`, with `id` from this response, returns the editable text and the `revisionid` to send with an edit.\n\nIf you don't send `langid`, or send an unknown code, you get the site's default language, English on `www.ifixit.com`.","tags":["Troubleshooting"],"parameters":[{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}},{"name":"selectedDevice","in":"query","description":"The title of a device page. It narrows the page's links to parts, guides, and other problems to that device. Add a variant as `device:variant`. The device must be the page's own device or one below it.","schema":{"type":"string"}},{"name":"unpatrolled","in":"query","description":"Leave this out.","allowEmptyValue":true,"schema":{"type":"string"}},{"name":"langid","in":"query","description":"The language of the content this request reads or changes, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string","pattern":"^[a-z]{2}$","example":"en"}}],"responses":{"200":{"description":"The troubleshooting page. A wiki page that isn't a troubleshooting page, or that redirects to another page that exists, returns only a `canonicalUrl`: the web address of the page to use instead.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"A troubleshooting page, split into `introduction`, `solutions`, and `conclusion` sections.","required":["pageTitle","title","id","breadcrumbs","answersUrl","editUrl","historyUrl","contributorsEndpoint","canonicalUrl","authors","lastUpdatedDate","flags","hreflangUrls","metaDescription","metaKeywords","linkedProblems","relatedProblems","mainImageUrl","mainImageUrlLarge","viewStats","category","userSelectedDevice","hideDeviceSelection","algoliaConfig","deviceGuideUrl","deviceTroubleshootingUrl","toc","introduction","solutions","conclusion","featuredProducts"],"properties":{"pageTitle":{"type":"string","description":"The page's title for search engines and browser tabs."},"title":{"type":"string","description":"The problem's title."},"id":{"type":"integer","description":"The page's wiki ID. You can send it to `GET /troubleshooting/wikiid/{wikiid}`."},"breadcrumbs":{"type":"array","description":"The path of pages from the site's home page down to this one, for a navigation trail. The last entry is this page.","items":{"type":"object","description":"One page in a navigation trail.","required":["title","url"],"properties":{"title":{"type":"string","description":"The name of the page."},"url":{"type":"string","description":"URL of the page. It can be absolute or site-relative. Empty for the current page, which is the last entry."}}}},"answersUrl":{"type":"string","description":"URL of the community answers for the page's device."},"editUrl":{"type":"string","description":"URL where people edit the page."},"historyUrl":{"type":"string","deprecated":true,"description":"URL of the page's revision history, which needs an account to open. Use `contributorsEndpoint` instead."},"contributorsEndpoint":{"type":"string","description":"The API path, relative to the API's base URL, that lists the page's contributors and its history URL."},"canonicalUrl":{"type":"string","description":"Absolute URL of the page in the language you requested."},"authors":{"type":"array","description":"The page's main authors: at most the ten with the largest shares, with the creator first if they are among them.","items":{"type":"object","description":"A person who wrote part of the page.","required":["userid","percent","username","avatar","profileUrl"],"properties":{"userid":{"type":["integer","null"],"description":"The `userid` of the author's account, which `GET /users/{userid}` takes; `null` when the account no longer exists."},"percent":{"type":"number","description":"The author's share of the page's edits, in percent. It can have decimals, such as `8.33`."},"username":{"type":"string","description":"The name shown on the author's profile, the same as `username` on `GET /users/{userid}`; empty when the account no longer exists."},"avatar":{"type":["string","null"],"description":"URL of the author's avatar; `null` when the account no longer exists."},"profileUrl":{"type":"string","description":"Absolute URL of the author's profile."}}}},"lastUpdatedDate":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the latest revision. When the page has no revision, the time of the request."},"flags":{"type":"array","description":"The notices shown at the top of the page.","items":{"type":"object","description":"A notice shown at the top of the page. A flag has `icon` or `image`, not both.","required":["flagid","title","text"],"properties":{"flagid":{"type":"string","description":"The flag's identifier. Page editors choose which of the site's flags a page shows, so the set of IDs isn't fixed."},"title":{"type":"string","description":"The notice's heading."},"text":{"type":"string","description":"The notice's text."},"icon":{"type":"string","description":"The name of a Font Awesome icon."},"image":{"type":"string","description":"URL of an image for the flag."}}}},"hreflangUrls":{"type":"object","description":"The page's URL in each language it exists in, keyed by language code, plus an `x-default` key.","additionalProperties":{"type":"string"}},"metaDescription":{"type":"string","description":"A short description of the page for search engines."},"metaKeywords":{"type":"string","description":"Keywords for the page, for search engines."},"linkedProblems":{"type":"array","description":"The other troubleshooting pages that this page's text links to, once each.","items":{"type":"object","description":"A link to a troubleshooting page.","required":["url","title","deviceTitle","imageUrl"],"properties":{"url":{"type":"string","description":"Absolute URL of the problem's page."},"title":{"type":"string","description":"The problem's title."},"deviceTitle":{"type":"string","description":"The name of the device the problem is for."},"imageUrl":{"type":"string","description":"URL of the problem's thumbnail image."}}}},"relatedProblems":{"type":"array","description":"The device's other problems, including those it inherits from a device above it. This page is left out.","items":{"type":"object","description":"A link to a troubleshooting page.","required":["url","title","deviceTitle","imageUrl"],"properties":{"url":{"type":"string","description":"Absolute URL of the problem's page."},"title":{"type":"string","description":"The problem's title."},"deviceTitle":{"type":"string","description":"The name of the device the problem is for."},"imageUrl":{"type":"string","description":"URL of the problem's thumbnail image."}}}},"mainImageUrl":{"type":"string","description":"URL of the page's main image."},"mainImageUrlLarge":{"type":"string","description":"URL of a larger version of the page's main image."},"viewStats":{"type":"object","description":"How many times the page was viewed in each period.","required":["today","week","month","all"],"properties":{"today":{"type":"integer","description":"Views in the last 24 hours."},"week":{"type":"integer","description":"Views in the last 7 days."},"month":{"type":"integer","description":"Views in the last 30 days."},"all":{"type":"integer","description":"Views in total."}}},"category":{"type":"object","description":"The device the problem is for.","required":["displayTitle","deviceTitle","wikiid","imageUrl","viewUrl","description"],"properties":{"displayTitle":{"type":"string","description":"The device's name as people read it."},"deviceTitle":{"type":"string","description":"The device's page title, which you can send in `selectedDevice`."},"wikiid":{"type":"integer","description":"The device's wiki ID."},"imageUrl":{"type":"string","description":"URL of the device's image."},"viewUrl":{"type":"string","description":"URL of the device's page."},"description":{"type":"string","description":"A short description of the device."}}},"userSelectedDevice":{"type":["object","null"],"description":"The device that links in the response were narrowed to, from your `selectedDevice` parameter. `null` when you didn't send one, or when the device isn't the page's device or one below it.","required":["deviceTitle","displayTitle","wikiid","imageUrl","variant","variantid"],"properties":{"deviceTitle":{"type":"string","description":"The device's page title."},"displayTitle":{"type":"string","description":"The device's name as people read it."},"wikiid":{"type":"integer","description":"The device's wiki ID."},"imageUrl":{"type":"string","description":"URL of the device's thumbnail image."},"variant":{"type":["string","null"],"description":"The variant's name; `null` when you didn't send a variant that exists for the device."},"variantid":{"type":["integer","null"],"description":"The variant's ID; `null` when you didn't send a variant that exists for the device."}}},"hideDeviceSelection":{"type":"boolean","description":"`true` when the device has no devices below it and at most one variant, so there is nothing for `selectedDevice` to choose."},"algoliaConfig":{"type":"object","description":"Settings for searching iFixit's search index.","properties":{"apiKey":{"type":"string","description":"A search key."},"indexPrefix":{"type":"string","description":"The text that the names of the search indexes start with."}}},"deviceGuideUrl":{"type":"string","description":"URL of the guides section on the device's page."},"deviceTroubleshootingUrl":{"type":"string","description":"URL of the device's list of problems."},"devicePartsUrl":{"type":"string","description":"URL of the device's parts in the US store. Not present when the device has no parts for sale there."},"toc":{"type":["string","null"],"description":"The page's table of contents as HTML."},"introduction":{"type":"array","description":"The sections before the solutions, in page order.","items":{"type":"object","description":"One section of a troubleshooting page. In `solutions`, each section is one cause and its fix. `introduction` and `conclusion` sections have the same fields. Sections with no content are left out.","required":["heading","id","body","guides","products","partCollections","guideCollections"],"properties":{"heading":{"type":["string","null"],"description":"The section's heading; `null` for a section with no heading."},"id":{"type":["string","null"],"description":"The ID to put after `#` in a URL to link to the section, such as `Section_Heavy_Use`. `null` when the section has none."},"body":{"type":"string","description":"The section's content as HTML."},"guides":{"type":"array","description":"The guides the section links to.","items":{"type":"object","description":"A repair guide that a troubleshooting section links to.","required":["guideid","url","title","image","time_required","difficulty","introduction_rendered"],"properties":{"guideid":{"type":"integer","description":"The guide's ID."},"url":{"type":"string","description":"Absolute URL of the guide."},"title":{"type":"string","description":"The guide's title."},"image":{"type":"object","description":"The guide's main image.","properties":{"thumbnail":{"type":"string","description":"URL of the guide's thumbnail image."}}},"time_required":{"type":"string","description":"How long the guide takes, as text for people to read."},"difficulty":{"type":"string","description":"The guide's difficulty as text for people to read, such as `Moderate`."},"introduction_rendered":{"type":"string","description":"The guide's introduction as HTML."}}}},"products":{"type":"array","description":"The products the section links to.","items":{"type":"object","description":"A store product that a troubleshooting section links to. Products that aren't available in the store or are for Pro customers only are left out.","required":["url","title","price","reviews","sku"],"properties":{"image":{"type":"string","description":"URL of the product image, in the `size170` rendition."},"thumbnailUrl":{"type":"string","description":"URL of the product's thumbnail image."},"url":{"type":"string","description":"Absolute URL of the product page."},"title":{"type":"string","description":"The product's name."},"price":{"type":"object","description":"What the product costs.","properties":{"amount":{"type":"number","description":"The price in `currencyCode`, as a decimal number."},"currencyCode":{"type":"string","description":"An ISO 4217 currency code. Read `amount` in this currency.","example":"USD"}}},"reviews":{"type":"object","description":"Customer reviews of the product.","properties":{"rating":{"type":"number","description":"The average review rating."},"count":{"type":"integer","description":"Number of reviews."}}},"sku":{"type":"string","description":"The product's SKU."}}}},"partCollections":{"type":"array","description":"The parts collections the section links to, once each. Always empty in `introduction` and `conclusion` sections.","items":{"type":"object","description":"A link to a collection of replacement parts for a device. When you send `selectedDevice`, the link points to that device (and variant) instead, except where the collection is for a different device than the page's own. If that leaves exactly one product, the page lists the product in `products` and not here.","required":["url","title","description","imageUrl","showChooseModel","isEmpty","device"],"properties":{"url":{"type":"string","description":"Absolute URL of the parts collection."},"title":{"type":"string","description":"Name of the collection, such as the device's name followed by `Parts`."},"description":{"type":"string","description":"A sentence about the collection, in the page's language."},"imageUrl":{"type":["string","null"],"description":"URL of an image for the collection."},"showChooseModel":{"type":"boolean","description":"`true` when no model is chosen yet: the collection is for the page's own device and you sent no `selectedDevice`, or your `selectedDevice` has more than one model. `false` once you send a model."},"isEmpty":{"type":"boolean","description":"`true` when the collection, narrowed by `selectedDevice`, has no products. Always `false` if you don't send `selectedDevice`."},"device":{"type":"string","description":"The name of the device the collection is for."}}}},"guideCollections":{"type":"array","description":"The guide collections the section links to, once each. In `introduction` and `conclusion` sections, `showChooseModel` is always `false`.","items":{"type":"object","description":"A link to a collection of guides for a device. When you send `selectedDevice`, the link points to that device instead, except where the collection is for a different device than the page's own. If that leaves exactly one guide, the page lists the guide in `guides` and not here.","required":["url","title","description","imageUrl","showChooseModel","isEmpty","device"],"properties":{"url":{"type":"string","description":"Absolute URL of the guide collection."},"title":{"type":"string","description":"Name of the collection, such as the device, part, and guide type followed by `Guides`."},"description":{"type":"string","description":"A sentence saying what the collection is filtered to, in the page's language; empty when it isn't filtered."},"imageUrl":{"type":"string","description":"URL of the device's thumbnail image."},"showChooseModel":{"type":"boolean","description":"`true` when no model is chosen yet: the collection is for the page's own device and you sent no `selectedDevice`, or your `selectedDevice` has more than one model. `false` once you send a model."},"isEmpty":{"type":"boolean","description":"`true` when the collection, narrowed by `selectedDevice`, has no guides. Always `false` if you don't send `selectedDevice`."},"device":{"type":"string","description":"The name of the device the collection is for."}}}}}}},"solutions":{"type":"array","description":"The causes and their fixes, in page order.","items":{"type":"object","description":"One section of a troubleshooting page. In `solutions`, each section is one cause and its fix. `introduction` and `conclusion` sections have the same fields. Sections with no content are left out.","required":["heading","id","body","guides","products","partCollections","guideCollections"],"properties":{"heading":{"type":["string","null"],"description":"The section's heading; `null` for a section with no heading."},"id":{"type":["string","null"],"description":"The ID to put after `#` in a URL to link to the section, such as `Section_Heavy_Use`. `null` when the section has none."},"body":{"type":"string","description":"The section's content as HTML."},"guides":{"type":"array","description":"The guides the section links to.","items":{"type":"object","description":"A repair guide that a troubleshooting section links to.","required":["guideid","url","title","image","time_required","difficulty","introduction_rendered"],"properties":{"guideid":{"type":"integer","description":"The guide's ID."},"url":{"type":"string","description":"Absolute URL of the guide."},"title":{"type":"string","description":"The guide's title."},"image":{"type":"object","description":"The guide's main image.","properties":{"thumbnail":{"type":"string","description":"URL of the guide's thumbnail image."}}},"time_required":{"type":"string","description":"How long the guide takes, as text for people to read."},"difficulty":{"type":"string","description":"The guide's difficulty as text for people to read, such as `Moderate`."},"introduction_rendered":{"type":"string","description":"The guide's introduction as HTML."}}}},"products":{"type":"array","description":"The products the section links to.","items":{"type":"object","description":"A store product that a troubleshooting section links to. Products that aren't available in the store or are for Pro customers only are left out.","required":["url","title","price","reviews","sku"],"properties":{"image":{"type":"string","description":"URL of the product image, in the `size170` rendition."},"thumbnailUrl":{"type":"string","description":"URL of the product's thumbnail image."},"url":{"type":"string","description":"Absolute URL of the product page."},"title":{"type":"string","description":"The product's name."},"price":{"type":"object","description":"What the product costs.","properties":{"amount":{"type":"number","description":"The price in `currencyCode`, as a decimal number."},"currencyCode":{"type":"string","description":"An ISO 4217 currency code. Read `amount` in this currency.","example":"USD"}}},"reviews":{"type":"object","description":"Customer reviews of the product.","properties":{"rating":{"type":"number","description":"The average review rating."},"count":{"type":"integer","description":"Number of reviews."}}},"sku":{"type":"string","description":"The product's SKU."}}}},"partCollections":{"type":"array","description":"The parts collections the section links to, once each. Always empty in `introduction` and `conclusion` sections.","items":{"type":"object","description":"A link to a collection of replacement parts for a device. When you send `selectedDevice`, the link points to that device (and variant) instead, except where the collection is for a different device than the page's own. If that leaves exactly one product, the page lists the product in `products` and not here.","required":["url","title","description","imageUrl","showChooseModel","isEmpty","device"],"properties":{"url":{"type":"string","description":"Absolute URL of the parts collection."},"title":{"type":"string","description":"Name of the collection, such as the device's name followed by `Parts`."},"description":{"type":"string","description":"A sentence about the collection, in the page's language."},"imageUrl":{"type":["string","null"],"description":"URL of an image for the collection."},"showChooseModel":{"type":"boolean","description":"`true` when no model is chosen yet: the collection is for the page's own device and you sent no `selectedDevice`, or your `selectedDevice` has more than one model. `false` once you send a model."},"isEmpty":{"type":"boolean","description":"`true` when the collection, narrowed by `selectedDevice`, has no products. Always `false` if you don't send `selectedDevice`."},"device":{"type":"string","description":"The name of the device the collection is for."}}}},"guideCollections":{"type":"array","description":"The guide collections the section links to, once each. In `introduction` and `conclusion` sections, `showChooseModel` is always `false`.","items":{"type":"object","description":"A link to a collection of guides for a device. When you send `selectedDevice`, the link points to that device instead, except where the collection is for a different device than the page's own. If that leaves exactly one guide, the page lists the guide in `guides` and not here.","required":["url","title","description","imageUrl","showChooseModel","isEmpty","device"],"properties":{"url":{"type":"string","description":"Absolute URL of the guide collection."},"title":{"type":"string","description":"Name of the collection, such as the device, part, and guide type followed by `Guides`."},"description":{"type":"string","description":"A sentence saying what the collection is filtered to, in the page's language; empty when it isn't filtered."},"imageUrl":{"type":"string","description":"URL of the device's thumbnail image."},"showChooseModel":{"type":"boolean","description":"`true` when no model is chosen yet: the collection is for the page's own device and you sent no `selectedDevice`, or your `selectedDevice` has more than one model. `false` once you send a model."},"isEmpty":{"type":"boolean","description":"`true` when the collection, narrowed by `selectedDevice`, has no guides. Always `false` if you don't send `selectedDevice`."},"device":{"type":"string","description":"The name of the device the collection is for."}}}}}}},"conclusion":{"type":"array","description":"The sections after the solutions, in page order.","items":{"type":"object","description":"One section of a troubleshooting page. In `solutions`, each section is one cause and its fix. `introduction` and `conclusion` sections have the same fields. Sections with no content are left out.","required":["heading","id","body","guides","products","partCollections","guideCollections"],"properties":{"heading":{"type":["string","null"],"description":"The section's heading; `null` for a section with no heading."},"id":{"type":["string","null"],"description":"The ID to put after `#` in a URL to link to the section, such as `Section_Heavy_Use`. `null` when the section has none."},"body":{"type":"string","description":"The section's content as HTML."},"guides":{"type":"array","description":"The guides the section links to.","items":{"type":"object","description":"A repair guide that a troubleshooting section links to.","required":["guideid","url","title","image","time_required","difficulty","introduction_rendered"],"properties":{"guideid":{"type":"integer","description":"The guide's ID."},"url":{"type":"string","description":"Absolute URL of the guide."},"title":{"type":"string","description":"The guide's title."},"image":{"type":"object","description":"The guide's main image.","properties":{"thumbnail":{"type":"string","description":"URL of the guide's thumbnail image."}}},"time_required":{"type":"string","description":"How long the guide takes, as text for people to read."},"difficulty":{"type":"string","description":"The guide's difficulty as text for people to read, such as `Moderate`."},"introduction_rendered":{"type":"string","description":"The guide's introduction as HTML."}}}},"products":{"type":"array","description":"The products the section links to.","items":{"type":"object","description":"A store product that a troubleshooting section links to. Products that aren't available in the store or are for Pro customers only are left out.","required":["url","title","price","reviews","sku"],"properties":{"image":{"type":"string","description":"URL of the product image, in the `size170` rendition."},"thumbnailUrl":{"type":"string","description":"URL of the product's thumbnail image."},"url":{"type":"string","description":"Absolute URL of the product page."},"title":{"type":"string","description":"The product's name."},"price":{"type":"object","description":"What the product costs.","properties":{"amount":{"type":"number","description":"The price in `currencyCode`, as a decimal number."},"currencyCode":{"type":"string","description":"An ISO 4217 currency code. Read `amount` in this currency.","example":"USD"}}},"reviews":{"type":"object","description":"Customer reviews of the product.","properties":{"rating":{"type":"number","description":"The average review rating."},"count":{"type":"integer","description":"Number of reviews."}}},"sku":{"type":"string","description":"The product's SKU."}}}},"partCollections":{"type":"array","description":"The parts collections the section links to, once each. Always empty in `introduction` and `conclusion` sections.","items":{"type":"object","description":"A link to a collection of replacement parts for a device. When you send `selectedDevice`, the link points to that device (and variant) instead, except where the collection is for a different device than the page's own. If that leaves exactly one product, the page lists the product in `products` and not here.","required":["url","title","description","imageUrl","showChooseModel","isEmpty","device"],"properties":{"url":{"type":"string","description":"Absolute URL of the parts collection."},"title":{"type":"string","description":"Name of the collection, such as the device's name followed by `Parts`."},"description":{"type":"string","description":"A sentence about the collection, in the page's language."},"imageUrl":{"type":["string","null"],"description":"URL of an image for the collection."},"showChooseModel":{"type":"boolean","description":"`true` when no model is chosen yet: the collection is for the page's own device and you sent no `selectedDevice`, or your `selectedDevice` has more than one model. `false` once you send a model."},"isEmpty":{"type":"boolean","description":"`true` when the collection, narrowed by `selectedDevice`, has no products. Always `false` if you don't send `selectedDevice`."},"device":{"type":"string","description":"The name of the device the collection is for."}}}},"guideCollections":{"type":"array","description":"The guide collections the section links to, once each. In `introduction` and `conclusion` sections, `showChooseModel` is always `false`.","items":{"type":"object","description":"A link to a collection of guides for a device. When you send `selectedDevice`, the link points to that device instead, except where the collection is for a different device than the page's own. If that leaves exactly one guide, the page lists the guide in `guides` and not here.","required":["url","title","description","imageUrl","showChooseModel","isEmpty","device"],"properties":{"url":{"type":"string","description":"Absolute URL of the guide collection."},"title":{"type":"string","description":"Name of the collection, such as the device, part, and guide type followed by `Guides`."},"description":{"type":"string","description":"A sentence saying what the collection is filtered to, in the page's language; empty when it isn't filtered."},"imageUrl":{"type":"string","description":"URL of the device's thumbnail image."},"showChooseModel":{"type":"boolean","description":"`true` when no model is chosen yet: the collection is for the page's own device and you sent no `selectedDevice`, or your `selectedDevice` has more than one model. `false` once you send a model."},"isEmpty":{"type":"boolean","description":"`true` when the collection, narrowed by `selectedDevice`, has no guides. Always `false` if you don't send `selectedDevice`."},"device":{"type":"string","description":"The name of the device the collection is for."}}}}}}},"featuredProducts":{"type":"array","description":"Up to three products featured in the introduction. Their links are removed from the introduction's `body`.","items":{"type":"object","description":"A store product that a troubleshooting section links to. Products that aren't available in the store or are for Pro customers only are left out.","required":["url","title","price","reviews","sku"],"properties":{"image":{"type":"string","description":"URL of the product image, in the `size170` rendition."},"thumbnailUrl":{"type":"string","description":"URL of the product's thumbnail image."},"url":{"type":"string","description":"Absolute URL of the product page."},"title":{"type":"string","description":"The product's name."},"price":{"type":"object","description":"What the product costs.","properties":{"amount":{"type":"number","description":"The price in `currencyCode`, as a decimal number."},"currencyCode":{"type":"string","description":"An ISO 4217 currency code. Read `amount` in this currency.","example":"USD"}}},"reviews":{"type":"object","description":"Customer reviews of the product.","properties":{"rating":{"type":"number","description":"The average review rating."},"count":{"type":"integer","description":"Number of reviews."}}},"sku":{"type":"string","description":"The product's SKU."}}}}}},{"type":"object","description":"Returned with status 200 instead of the page when the page redirects to another page, or isn't a troubleshooting page. Use `canonicalUrl` to find the page to use.","required":["canonicalUrl"],"properties":{"canonicalUrl":{"type":"string","description":"Absolute URL of the page to use instead."}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"No troubleshooting page has that title. A device's title returns this too: use `GET /troubleshooting/collection/{title}` to list a device's problems.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"content","x-badges":[{"name":"Content","color":"#c2e3ff"}]}},"/troubleshooting/wikiid/{wikiid}":{"get":{"operationId":"getTroubleshootingByWikiid","summary":"Get a troubleshooting page by wiki ID","description":"Gets a troubleshooting page by its `wikiid` instead of its title. The response is the same as `GET /troubleshooting/{title}`. If you don't send `langid`, or send an unknown code, you get the site's default language, English on `www.ifixit.com`.","tags":["Troubleshooting"],"parameters":[{"name":"wikiid","in":"path","required":true,"description":"The `wikiid` of the troubleshooting page, from the `id` field of `GET /troubleshooting/{title}`.","schema":{"type":"integer"}},{"name":"selectedDevice","in":"query","description":"The title of a device page. It narrows the page's links to parts, guides, and other problems to that device. Add a variant as `device:variant`. The device must be the page's own device or one below it.","schema":{"type":"string"}},{"name":"unpatrolled","in":"query","description":"Leave this out.","allowEmptyValue":true,"schema":{"type":"string"}},{"name":"langid","in":"query","description":"The language of the content this request reads or changes, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string","pattern":"^[a-z]{2}$","example":"en"}}],"responses":{"200":{"description":"The troubleshooting page. A wiki page that isn't a troubleshooting page, or that redirects to another page that exists, returns only a `canonicalUrl`: the web address of the page to use instead.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"A troubleshooting page, split into `introduction`, `solutions`, and `conclusion` sections.","required":["pageTitle","title","id","breadcrumbs","answersUrl","editUrl","historyUrl","contributorsEndpoint","canonicalUrl","authors","lastUpdatedDate","flags","hreflangUrls","metaDescription","metaKeywords","linkedProblems","relatedProblems","mainImageUrl","mainImageUrlLarge","viewStats","category","userSelectedDevice","hideDeviceSelection","algoliaConfig","deviceGuideUrl","deviceTroubleshootingUrl","toc","introduction","solutions","conclusion","featuredProducts"],"properties":{"pageTitle":{"type":"string","description":"The page's title for search engines and browser tabs."},"title":{"type":"string","description":"The problem's title."},"id":{"type":"integer","description":"The page's wiki ID. You can send it to `GET /troubleshooting/wikiid/{wikiid}`."},"breadcrumbs":{"type":"array","description":"The path of pages from the site's home page down to this one, for a navigation trail. The last entry is this page.","items":{"type":"object","description":"One page in a navigation trail.","required":["title","url"],"properties":{"title":{"type":"string","description":"The name of the page."},"url":{"type":"string","description":"URL of the page. It can be absolute or site-relative. Empty for the current page, which is the last entry."}}}},"answersUrl":{"type":"string","description":"URL of the community answers for the page's device."},"editUrl":{"type":"string","description":"URL where people edit the page."},"historyUrl":{"type":"string","deprecated":true,"description":"URL of the page's revision history, which needs an account to open. Use `contributorsEndpoint` instead."},"contributorsEndpoint":{"type":"string","description":"The API path, relative to the API's base URL, that lists the page's contributors and its history URL."},"canonicalUrl":{"type":"string","description":"Absolute URL of the page in the language you requested."},"authors":{"type":"array","description":"The page's main authors: at most the ten with the largest shares, with the creator first if they are among them.","items":{"type":"object","description":"A person who wrote part of the page.","required":["userid","percent","username","avatar","profileUrl"],"properties":{"userid":{"type":["integer","null"],"description":"The `userid` of the author's account, which `GET /users/{userid}` takes; `null` when the account no longer exists."},"percent":{"type":"number","description":"The author's share of the page's edits, in percent. It can have decimals, such as `8.33`."},"username":{"type":"string","description":"The name shown on the author's profile, the same as `username` on `GET /users/{userid}`; empty when the account no longer exists."},"avatar":{"type":["string","null"],"description":"URL of the author's avatar; `null` when the account no longer exists."},"profileUrl":{"type":"string","description":"Absolute URL of the author's profile."}}}},"lastUpdatedDate":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the latest revision. When the page has no revision, the time of the request."},"flags":{"type":"array","description":"The notices shown at the top of the page.","items":{"type":"object","description":"A notice shown at the top of the page. A flag has `icon` or `image`, not both.","required":["flagid","title","text"],"properties":{"flagid":{"type":"string","description":"The flag's identifier. Page editors choose which of the site's flags a page shows, so the set of IDs isn't fixed."},"title":{"type":"string","description":"The notice's heading."},"text":{"type":"string","description":"The notice's text."},"icon":{"type":"string","description":"The name of a Font Awesome icon."},"image":{"type":"string","description":"URL of an image for the flag."}}}},"hreflangUrls":{"type":"object","description":"The page's URL in each language it exists in, keyed by language code, plus an `x-default` key.","additionalProperties":{"type":"string"}},"metaDescription":{"type":"string","description":"A short description of the page for search engines."},"metaKeywords":{"type":"string","description":"Keywords for the page, for search engines."},"linkedProblems":{"type":"array","description":"The other troubleshooting pages that this page's text links to, once each.","items":{"type":"object","description":"A link to a troubleshooting page.","required":["url","title","deviceTitle","imageUrl"],"properties":{"url":{"type":"string","description":"Absolute URL of the problem's page."},"title":{"type":"string","description":"The problem's title."},"deviceTitle":{"type":"string","description":"The name of the device the problem is for."},"imageUrl":{"type":"string","description":"URL of the problem's thumbnail image."}}}},"relatedProblems":{"type":"array","description":"The device's other problems, including those it inherits from a device above it. This page is left out.","items":{"type":"object","description":"A link to a troubleshooting page.","required":["url","title","deviceTitle","imageUrl"],"properties":{"url":{"type":"string","description":"Absolute URL of the problem's page."},"title":{"type":"string","description":"The problem's title."},"deviceTitle":{"type":"string","description":"The name of the device the problem is for."},"imageUrl":{"type":"string","description":"URL of the problem's thumbnail image."}}}},"mainImageUrl":{"type":"string","description":"URL of the page's main image."},"mainImageUrlLarge":{"type":"string","description":"URL of a larger version of the page's main image."},"viewStats":{"type":"object","description":"How many times the page was viewed in each period.","required":["today","week","month","all"],"properties":{"today":{"type":"integer","description":"Views in the last 24 hours."},"week":{"type":"integer","description":"Views in the last 7 days."},"month":{"type":"integer","description":"Views in the last 30 days."},"all":{"type":"integer","description":"Views in total."}}},"category":{"type":"object","description":"The device the problem is for.","required":["displayTitle","deviceTitle","wikiid","imageUrl","viewUrl","description"],"properties":{"displayTitle":{"type":"string","description":"The device's name as people read it."},"deviceTitle":{"type":"string","description":"The device's page title, which you can send in `selectedDevice`."},"wikiid":{"type":"integer","description":"The device's wiki ID."},"imageUrl":{"type":"string","description":"URL of the device's image."},"viewUrl":{"type":"string","description":"URL of the device's page."},"description":{"type":"string","description":"A short description of the device."}}},"userSelectedDevice":{"type":["object","null"],"description":"The device that links in the response were narrowed to, from your `selectedDevice` parameter. `null` when you didn't send one, or when the device isn't the page's device or one below it.","required":["deviceTitle","displayTitle","wikiid","imageUrl","variant","variantid"],"properties":{"deviceTitle":{"type":"string","description":"The device's page title."},"displayTitle":{"type":"string","description":"The device's name as people read it."},"wikiid":{"type":"integer","description":"The device's wiki ID."},"imageUrl":{"type":"string","description":"URL of the device's thumbnail image."},"variant":{"type":["string","null"],"description":"The variant's name; `null` when you didn't send a variant that exists for the device."},"variantid":{"type":["integer","null"],"description":"The variant's ID; `null` when you didn't send a variant that exists for the device."}}},"hideDeviceSelection":{"type":"boolean","description":"`true` when the device has no devices below it and at most one variant, so there is nothing for `selectedDevice` to choose."},"algoliaConfig":{"type":"object","description":"Settings for searching iFixit's search index.","properties":{"apiKey":{"type":"string","description":"A search key."},"indexPrefix":{"type":"string","description":"The text that the names of the search indexes start with."}}},"deviceGuideUrl":{"type":"string","description":"URL of the guides section on the device's page."},"deviceTroubleshootingUrl":{"type":"string","description":"URL of the device's list of problems."},"devicePartsUrl":{"type":"string","description":"URL of the device's parts in the US store. Not present when the device has no parts for sale there."},"toc":{"type":["string","null"],"description":"The page's table of contents as HTML."},"introduction":{"type":"array","description":"The sections before the solutions, in page order.","items":{"type":"object","description":"One section of a troubleshooting page. In `solutions`, each section is one cause and its fix. `introduction` and `conclusion` sections have the same fields. Sections with no content are left out.","required":["heading","id","body","guides","products","partCollections","guideCollections"],"properties":{"heading":{"type":["string","null"],"description":"The section's heading; `null` for a section with no heading."},"id":{"type":["string","null"],"description":"The ID to put after `#` in a URL to link to the section, such as `Section_Heavy_Use`. `null` when the section has none."},"body":{"type":"string","description":"The section's content as HTML."},"guides":{"type":"array","description":"The guides the section links to.","items":{"type":"object","description":"A repair guide that a troubleshooting section links to.","required":["guideid","url","title","image","time_required","difficulty","introduction_rendered"],"properties":{"guideid":{"type":"integer","description":"The guide's ID."},"url":{"type":"string","description":"Absolute URL of the guide."},"title":{"type":"string","description":"The guide's title."},"image":{"type":"object","description":"The guide's main image.","properties":{"thumbnail":{"type":"string","description":"URL of the guide's thumbnail image."}}},"time_required":{"type":"string","description":"How long the guide takes, as text for people to read."},"difficulty":{"type":"string","description":"The guide's difficulty as text for people to read, such as `Moderate`."},"introduction_rendered":{"type":"string","description":"The guide's introduction as HTML."}}}},"products":{"type":"array","description":"The products the section links to.","items":{"type":"object","description":"A store product that a troubleshooting section links to. Products that aren't available in the store or are for Pro customers only are left out.","required":["url","title","price","reviews","sku"],"properties":{"image":{"type":"string","description":"URL of the product image, in the `size170` rendition."},"thumbnailUrl":{"type":"string","description":"URL of the product's thumbnail image."},"url":{"type":"string","description":"Absolute URL of the product page."},"title":{"type":"string","description":"The product's name."},"price":{"type":"object","description":"What the product costs.","properties":{"amount":{"type":"number","description":"The price in `currencyCode`, as a decimal number."},"currencyCode":{"type":"string","description":"An ISO 4217 currency code. Read `amount` in this currency.","example":"USD"}}},"reviews":{"type":"object","description":"Customer reviews of the product.","properties":{"rating":{"type":"number","description":"The average review rating."},"count":{"type":"integer","description":"Number of reviews."}}},"sku":{"type":"string","description":"The product's SKU."}}}},"partCollections":{"type":"array","description":"The parts collections the section links to, once each. Always empty in `introduction` and `conclusion` sections.","items":{"type":"object","description":"A link to a collection of replacement parts for a device. When you send `selectedDevice`, the link points to that device (and variant) instead, except where the collection is for a different device than the page's own. If that leaves exactly one product, the page lists the product in `products` and not here.","required":["url","title","description","imageUrl","showChooseModel","isEmpty","device"],"properties":{"url":{"type":"string","description":"Absolute URL of the parts collection."},"title":{"type":"string","description":"Name of the collection, such as the device's name followed by `Parts`."},"description":{"type":"string","description":"A sentence about the collection, in the page's language."},"imageUrl":{"type":["string","null"],"description":"URL of an image for the collection."},"showChooseModel":{"type":"boolean","description":"`true` when no model is chosen yet: the collection is for the page's own device and you sent no `selectedDevice`, or your `selectedDevice` has more than one model. `false` once you send a model."},"isEmpty":{"type":"boolean","description":"`true` when the collection, narrowed by `selectedDevice`, has no products. Always `false` if you don't send `selectedDevice`."},"device":{"type":"string","description":"The name of the device the collection is for."}}}},"guideCollections":{"type":"array","description":"The guide collections the section links to, once each. In `introduction` and `conclusion` sections, `showChooseModel` is always `false`.","items":{"type":"object","description":"A link to a collection of guides for a device. When you send `selectedDevice`, the link points to that device instead, except where the collection is for a different device than the page's own. If that leaves exactly one guide, the page lists the guide in `guides` and not here.","required":["url","title","description","imageUrl","showChooseModel","isEmpty","device"],"properties":{"url":{"type":"string","description":"Absolute URL of the guide collection."},"title":{"type":"string","description":"Name of the collection, such as the device, part, and guide type followed by `Guides`."},"description":{"type":"string","description":"A sentence saying what the collection is filtered to, in the page's language; empty when it isn't filtered."},"imageUrl":{"type":"string","description":"URL of the device's thumbnail image."},"showChooseModel":{"type":"boolean","description":"`true` when no model is chosen yet: the collection is for the page's own device and you sent no `selectedDevice`, or your `selectedDevice` has more than one model. `false` once you send a model."},"isEmpty":{"type":"boolean","description":"`true` when the collection, narrowed by `selectedDevice`, has no guides. Always `false` if you don't send `selectedDevice`."},"device":{"type":"string","description":"The name of the device the collection is for."}}}}}}},"solutions":{"type":"array","description":"The causes and their fixes, in page order.","items":{"type":"object","description":"One section of a troubleshooting page. In `solutions`, each section is one cause and its fix. `introduction` and `conclusion` sections have the same fields. Sections with no content are left out.","required":["heading","id","body","guides","products","partCollections","guideCollections"],"properties":{"heading":{"type":["string","null"],"description":"The section's heading; `null` for a section with no heading."},"id":{"type":["string","null"],"description":"The ID to put after `#` in a URL to link to the section, such as `Section_Heavy_Use`. `null` when the section has none."},"body":{"type":"string","description":"The section's content as HTML."},"guides":{"type":"array","description":"The guides the section links to.","items":{"type":"object","description":"A repair guide that a troubleshooting section links to.","required":["guideid","url","title","image","time_required","difficulty","introduction_rendered"],"properties":{"guideid":{"type":"integer","description":"The guide's ID."},"url":{"type":"string","description":"Absolute URL of the guide."},"title":{"type":"string","description":"The guide's title."},"image":{"type":"object","description":"The guide's main image.","properties":{"thumbnail":{"type":"string","description":"URL of the guide's thumbnail image."}}},"time_required":{"type":"string","description":"How long the guide takes, as text for people to read."},"difficulty":{"type":"string","description":"The guide's difficulty as text for people to read, such as `Moderate`."},"introduction_rendered":{"type":"string","description":"The guide's introduction as HTML."}}}},"products":{"type":"array","description":"The products the section links to.","items":{"type":"object","description":"A store product that a troubleshooting section links to. Products that aren't available in the store or are for Pro customers only are left out.","required":["url","title","price","reviews","sku"],"properties":{"image":{"type":"string","description":"URL of the product image, in the `size170` rendition."},"thumbnailUrl":{"type":"string","description":"URL of the product's thumbnail image."},"url":{"type":"string","description":"Absolute URL of the product page."},"title":{"type":"string","description":"The product's name."},"price":{"type":"object","description":"What the product costs.","properties":{"amount":{"type":"number","description":"The price in `currencyCode`, as a decimal number."},"currencyCode":{"type":"string","description":"An ISO 4217 currency code. Read `amount` in this currency.","example":"USD"}}},"reviews":{"type":"object","description":"Customer reviews of the product.","properties":{"rating":{"type":"number","description":"The average review rating."},"count":{"type":"integer","description":"Number of reviews."}}},"sku":{"type":"string","description":"The product's SKU."}}}},"partCollections":{"type":"array","description":"The parts collections the section links to, once each. Always empty in `introduction` and `conclusion` sections.","items":{"type":"object","description":"A link to a collection of replacement parts for a device. When you send `selectedDevice`, the link points to that device (and variant) instead, except where the collection is for a different device than the page's own. If that leaves exactly one product, the page lists the product in `products` and not here.","required":["url","title","description","imageUrl","showChooseModel","isEmpty","device"],"properties":{"url":{"type":"string","description":"Absolute URL of the parts collection."},"title":{"type":"string","description":"Name of the collection, such as the device's name followed by `Parts`."},"description":{"type":"string","description":"A sentence about the collection, in the page's language."},"imageUrl":{"type":["string","null"],"description":"URL of an image for the collection."},"showChooseModel":{"type":"boolean","description":"`true` when no model is chosen yet: the collection is for the page's own device and you sent no `selectedDevice`, or your `selectedDevice` has more than one model. `false` once you send a model."},"isEmpty":{"type":"boolean","description":"`true` when the collection, narrowed by `selectedDevice`, has no products. Always `false` if you don't send `selectedDevice`."},"device":{"type":"string","description":"The name of the device the collection is for."}}}},"guideCollections":{"type":"array","description":"The guide collections the section links to, once each. In `introduction` and `conclusion` sections, `showChooseModel` is always `false`.","items":{"type":"object","description":"A link to a collection of guides for a device. When you send `selectedDevice`, the link points to that device instead, except where the collection is for a different device than the page's own. If that leaves exactly one guide, the page lists the guide in `guides` and not here.","required":["url","title","description","imageUrl","showChooseModel","isEmpty","device"],"properties":{"url":{"type":"string","description":"Absolute URL of the guide collection."},"title":{"type":"string","description":"Name of the collection, such as the device, part, and guide type followed by `Guides`."},"description":{"type":"string","description":"A sentence saying what the collection is filtered to, in the page's language; empty when it isn't filtered."},"imageUrl":{"type":"string","description":"URL of the device's thumbnail image."},"showChooseModel":{"type":"boolean","description":"`true` when no model is chosen yet: the collection is for the page's own device and you sent no `selectedDevice`, or your `selectedDevice` has more than one model. `false` once you send a model."},"isEmpty":{"type":"boolean","description":"`true` when the collection, narrowed by `selectedDevice`, has no guides. Always `false` if you don't send `selectedDevice`."},"device":{"type":"string","description":"The name of the device the collection is for."}}}}}}},"conclusion":{"type":"array","description":"The sections after the solutions, in page order.","items":{"type":"object","description":"One section of a troubleshooting page. In `solutions`, each section is one cause and its fix. `introduction` and `conclusion` sections have the same fields. Sections with no content are left out.","required":["heading","id","body","guides","products","partCollections","guideCollections"],"properties":{"heading":{"type":["string","null"],"description":"The section's heading; `null` for a section with no heading."},"id":{"type":["string","null"],"description":"The ID to put after `#` in a URL to link to the section, such as `Section_Heavy_Use`. `null` when the section has none."},"body":{"type":"string","description":"The section's content as HTML."},"guides":{"type":"array","description":"The guides the section links to.","items":{"type":"object","description":"A repair guide that a troubleshooting section links to.","required":["guideid","url","title","image","time_required","difficulty","introduction_rendered"],"properties":{"guideid":{"type":"integer","description":"The guide's ID."},"url":{"type":"string","description":"Absolute URL of the guide."},"title":{"type":"string","description":"The guide's title."},"image":{"type":"object","description":"The guide's main image.","properties":{"thumbnail":{"type":"string","description":"URL of the guide's thumbnail image."}}},"time_required":{"type":"string","description":"How long the guide takes, as text for people to read."},"difficulty":{"type":"string","description":"The guide's difficulty as text for people to read, such as `Moderate`."},"introduction_rendered":{"type":"string","description":"The guide's introduction as HTML."}}}},"products":{"type":"array","description":"The products the section links to.","items":{"type":"object","description":"A store product that a troubleshooting section links to. Products that aren't available in the store or are for Pro customers only are left out.","required":["url","title","price","reviews","sku"],"properties":{"image":{"type":"string","description":"URL of the product image, in the `size170` rendition."},"thumbnailUrl":{"type":"string","description":"URL of the product's thumbnail image."},"url":{"type":"string","description":"Absolute URL of the product page."},"title":{"type":"string","description":"The product's name."},"price":{"type":"object","description":"What the product costs.","properties":{"amount":{"type":"number","description":"The price in `currencyCode`, as a decimal number."},"currencyCode":{"type":"string","description":"An ISO 4217 currency code. Read `amount` in this currency.","example":"USD"}}},"reviews":{"type":"object","description":"Customer reviews of the product.","properties":{"rating":{"type":"number","description":"The average review rating."},"count":{"type":"integer","description":"Number of reviews."}}},"sku":{"type":"string","description":"The product's SKU."}}}},"partCollections":{"type":"array","description":"The parts collections the section links to, once each. Always empty in `introduction` and `conclusion` sections.","items":{"type":"object","description":"A link to a collection of replacement parts for a device. When you send `selectedDevice`, the link points to that device (and variant) instead, except where the collection is for a different device than the page's own. If that leaves exactly one product, the page lists the product in `products` and not here.","required":["url","title","description","imageUrl","showChooseModel","isEmpty","device"],"properties":{"url":{"type":"string","description":"Absolute URL of the parts collection."},"title":{"type":"string","description":"Name of the collection, such as the device's name followed by `Parts`."},"description":{"type":"string","description":"A sentence about the collection, in the page's language."},"imageUrl":{"type":["string","null"],"description":"URL of an image for the collection."},"showChooseModel":{"type":"boolean","description":"`true` when no model is chosen yet: the collection is for the page's own device and you sent no `selectedDevice`, or your `selectedDevice` has more than one model. `false` once you send a model."},"isEmpty":{"type":"boolean","description":"`true` when the collection, narrowed by `selectedDevice`, has no products. Always `false` if you don't send `selectedDevice`."},"device":{"type":"string","description":"The name of the device the collection is for."}}}},"guideCollections":{"type":"array","description":"The guide collections the section links to, once each. In `introduction` and `conclusion` sections, `showChooseModel` is always `false`.","items":{"type":"object","description":"A link to a collection of guides for a device. When you send `selectedDevice`, the link points to that device instead, except where the collection is for a different device than the page's own. If that leaves exactly one guide, the page lists the guide in `guides` and not here.","required":["url","title","description","imageUrl","showChooseModel","isEmpty","device"],"properties":{"url":{"type":"string","description":"Absolute URL of the guide collection."},"title":{"type":"string","description":"Name of the collection, such as the device, part, and guide type followed by `Guides`."},"description":{"type":"string","description":"A sentence saying what the collection is filtered to, in the page's language; empty when it isn't filtered."},"imageUrl":{"type":"string","description":"URL of the device's thumbnail image."},"showChooseModel":{"type":"boolean","description":"`true` when no model is chosen yet: the collection is for the page's own device and you sent no `selectedDevice`, or your `selectedDevice` has more than one model. `false` once you send a model."},"isEmpty":{"type":"boolean","description":"`true` when the collection, narrowed by `selectedDevice`, has no guides. Always `false` if you don't send `selectedDevice`."},"device":{"type":"string","description":"The name of the device the collection is for."}}}}}}},"featuredProducts":{"type":"array","description":"Up to three products featured in the introduction. Their links are removed from the introduction's `body`.","items":{"type":"object","description":"A store product that a troubleshooting section links to. Products that aren't available in the store or are for Pro customers only are left out.","required":["url","title","price","reviews","sku"],"properties":{"image":{"type":"string","description":"URL of the product image, in the `size170` rendition."},"thumbnailUrl":{"type":"string","description":"URL of the product's thumbnail image."},"url":{"type":"string","description":"Absolute URL of the product page."},"title":{"type":"string","description":"The product's name."},"price":{"type":"object","description":"What the product costs.","properties":{"amount":{"type":"number","description":"The price in `currencyCode`, as a decimal number."},"currencyCode":{"type":"string","description":"An ISO 4217 currency code. Read `amount` in this currency.","example":"USD"}}},"reviews":{"type":"object","description":"Customer reviews of the product.","properties":{"rating":{"type":"number","description":"The average review rating."},"count":{"type":"integer","description":"Number of reviews."}}},"sku":{"type":"string","description":"The product's SKU."}}}}}},{"type":"object","description":"Returned with status 200 instead of the page when the page redirects to another page, or isn't a troubleshooting page. Use `canonicalUrl` to find the page to use.","required":["canonicalUrl"],"properties":{"canonicalUrl":{"type":"string","description":"Absolute URL of the page to use instead."}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"No wiki has that ID.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"content","x-badges":[{"name":"Content","color":"#c2e3ff"}]}},"/troubleshooting/collection/{title}":{"get":{"operationId":"getProblemList","summary":"List a device's troubleshooting problems","description":"Lists a device's troubleshooting problems, including those inherited from devices above it that pass their problems down. It also lists community questions about the device. If you don't send `langid`, or send an unknown code, you get the site's default language, English on `www.ifixit.com`.","tags":["Troubleshooting"],"parameters":[{"name":"title","in":"path","required":true,"description":"The page's title, as it appears in the page's web address. When `namespace` is `USER` or `TEAM`, send the `userid` or `teamid`.","schema":{"type":"string"}},{"name":"unpatrolled","in":"query","description":"Leave this out.","allowEmptyValue":true,"schema":{"type":"string"}},{"name":"langid","in":"query","description":"The language of the content this request reads or changes, as one of the [language codes](#api-1/description/language-codes).","schema":{"type":"string","pattern":"^[a-z]{2}$","example":"en"}}],"responses":{"200":{"description":"The device's problems and questions. If the device page redirects, only a `canonicalUrl`: the web address of the page to use instead.","content":{"application/json":{"schema":{"anyOf":[{"type":"object","description":"A device's troubleshooting problems, plus popular community posts about it.","required":["title","id","breadcrumbs","deviceUrls","problems","answers","allAnswersUrl","allAnswersCount","directlyAttachedProblemsCount","canonicalUrl","viewStats"],"properties":{"title":{"type":"string","description":"The device's name as people read it."},"id":{"type":"integer","description":"The device's wiki ID."},"breadcrumbs":{"type":"array","description":"The path of pages from the site's home page down to this device, for a navigation trail. The last entry is the device.","items":{"type":"object","description":"One page in a navigation trail.","required":["title","url"],"properties":{"title":{"type":"string","description":"The name of the page."},"url":{"type":"string","description":"URL of the page. It can be absolute or site-relative. Empty for the current page, which is the last entry."}}}},"deviceUrls":{"type":"object","description":"Links to the device's guides, problems, and parts.","required":["deviceGuideUrl","deviceTroubleshootingUrl"],"properties":{"deviceGuideUrl":{"type":"string","description":"URL of the guides section on the device's page."},"deviceTroubleshootingUrl":{"type":"string","description":"URL of the device's list of problems."},"devicePartsUrl":{"type":"string","description":"URL of the device's parts in the US store. Not present when the device has no parts for sale there."}}},"problems":{"type":"array","description":"The device's problems, including those it inherits from a device above it.","items":{"type":"object","description":"One problem in a device's list of problems.","required":["problemTitle","problemUrl","deviceTitle","description","imageSrcStandard","imageSrcThumbnail","deviceSrcThumbnail","badges"],"properties":{"problemTitle":{"type":"string","description":"The problem's title."},"problemUrl":{"type":"string","description":"URL of the problem's page."},"deviceTitle":{"type":"string","description":"The name of the device the problem is attached to; empty when it has none."},"description":{"type":"string","description":"A short description of the problem."},"imageSrcStandard":{"type":"string","description":"URL of the problem's image."},"imageSrcThumbnail":{"type":"string","description":"URL of the problem's thumbnail image."},"deviceSrcThumbnail":{"type":["string","null"],"description":"URL of the device's thumbnail image; `null` when the device has none."},"problemTypeIcon":{"type":"string","description":"The type of problem, taken from the first tag on the page that looks like `problem-<type>`. Not present when the page has no such tag."},"badges":{"type":"array","description":"Always an empty list.","items":{"type":"string"}}}}},"answers":{"type":"array","description":"Up to ten community posts, the most viewed in the last 30 days first.","items":{"type":"object","description":"A community post about the device.","required":["title","url","description","imageUrl","deviceTitle"],"properties":{"title":{"type":"string","description":"The post's title."},"url":{"type":"string","description":"URL of the post."},"description":{"type":"string","description":"The start of the post's text."},"imageUrl":{"type":"string","description":"URL of the device's image."},"deviceTitle":{"type":"string","description":"The name of the device the post is about."}}}},"allAnswersUrl":{"type":"string","description":"URL of all the community answers for the device."},"allAnswersCount":{"type":"integer","description":"How many community posts the device has in total."},"directlyAttachedProblemsCount":{"type":"integer","description":"How many problems are attached to this device itself and not inherited from a device above it."},"canonicalUrl":{"type":"string","description":"Absolute URL of the device's list of problems."},"viewStats":{"type":"object","description":"How many times the page was viewed in each period.","required":["today","week","month","all"],"properties":{"today":{"type":"integer","description":"Views in the last 24 hours."},"week":{"type":"integer","description":"Views in the last 7 days."},"month":{"type":"integer","description":"Views in the last 30 days."},"all":{"type":"integer","description":"Views in total."}}}}},{"type":"object","description":"Returned with status 200 instead of the page when the page redirects to another page, or isn't a troubleshooting page. Use `canonicalUrl` to find the page to use.","required":["canonicalUrl"],"properties":{"canonicalUrl":{"type":"string","description":"Absolute URL of the page to use instead."}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"description":"The title isn't a device page, or the device has no problems.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"list"}},"/workbench/items":{"get":{"operationId":"listWorkbenchItems","summary":"List workbench items","description":"Returns the items on your workbench, most recently added first. The list isn't paged.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `title`, `display_title`, `topic_url`, `answers_url` and `image`."}],"responses":{"200":{"description":"List of workbench items","content":{"application/json":{"schema":{"type":"object","description":"Holds an `items` array, the newest addition first.","properties":{"items":{"type":"array","description":"The items on your workbench, the newest addition first.","items":{"type":"object","description":"A device or tool on a workbench. It is either a device or tool from an iFixit wiki page (`wikiid` is set) or a custom item the owner named (`custom_name` is set). A custom item has `title` and `display_title` equal to `custom_name`, and `null` for `variant`, the URL fields, `catalog_image`, `suggested_meter_kind`, `allowed_condition_metrics`, `wiki_namespace`, and `top_category`.","properties":{"workbench_itemid":{"type":"integer","description":"The ID of this item, from `GET /workbench/items`."},"wikiid":{"type":["integer","null"],"description":"The ID of the item's wiki page. `null` for a custom item."},"variantid":{"type":["integer","null"],"description":"The ID of the device model the owner picked on the wiki page, which `variant` names. `null` when no model is picked and for a custom item."},"custom_name":{"type":["string","null"],"description":"The name the owner gave a custom item. `null` for a wiki item. When a custom item is switched to a device (`PATCH` with `wikiid`), this becomes `null`, and the name moves to `nickname` unless the item already has one."},"nickname":{"type":["string","null"],"description":"The owner's own label for the item. `null` when not set."},"purchase_date":{"type":["integer","null"],"description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the owner bought the item. `null` when not set."},"purchase_price":{"type":["number","null"],"description":"What the owner paid, in `currency`. `null` when not set."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `purchase_price`, such as `EUR`."},"warranty_expires_date":{"type":["integer","null"],"description":"UNIX timestamp of when the item's warranty ends. `null` when not set."},"notes":{"type":["string","null"],"maxLength":10000,"description":"The owner's notes on the item. `null` when there are none."},"active":{"type":"integer","enum":[0,1],"description":"`1` for the one item the owner has set as active, `0` for the rest. An account has at most one active item."},"date_added":{"type":"integer","description":"UNIX timestamp of when the item was added to the workbench."},"track_usage":{"type":"boolean","description":"Whether the item has a usage meter, where its readings (miles, hours, pages, or cycles) are tracked. A device starts as `true` when its category suggests a meter (`suggested_meter_kind`) or gives it a usage-based task, and as `false` otherwise. A custom item starts as `false`. The owner changes it with `PATCH`, and adding a usage-based task turns it on. Logging a reading does not."},"latest_readings":{"type":"array","description":"What the item's meter reads now: for each unit, the most recent completed event that recorded a usage, newest first. Skipped events are left out. Empty when the item has none.","items":{"type":"object","required":["usage_unit","usage","date_completed"],"properties":{"usage_unit":{"type":["string","null"],"description":"The unit of `usage`: `miles`, `kilometers`, `hours`, `pages`, or `cycles`."},"usage":{"type":"integer","description":"The usage value the event recorded."},"date_completed":{"type":"integer","description":"UNIX timestamp of when the event was completed."}}}},"title":{"type":"string","description":"The wiki page's title, in the URL form the wikis API uses. `custom_name` for a custom item."},"display_title":{"type":"string","description":"The title to show a person: the wiki page's readable title, or `custom_name` for a custom item."},"variant":{"type":["string","null"],"description":"The name of the device model `variantid` points at. `null` when no model is picked."},"imageid":{"type":["integer","null"],"description":"The ID of the owner's own photo of the item, set with `PATCH` and `imageid`. `image` shows it instead of `catalog_image`. `null` when the owner has not set one."},"image":{"type":["string","null"],"description":"URL of the image to show for the item: the owner's photo when they set one (`imageid`), else `catalog_image`. `null` for a custom item with no photo."},"catalog_image":{"type":["string","null"],"description":"URL of the device's own image, which `image` shows when the owner has no photo. For a tool, it is the store product's image while the product is on sale, else the wiki page's. `null` for a custom item."},"topic_url":{"type":["string","null"],"description":"URL of the item's wiki page on the website. `null` for a custom item."},"answers_url":{"type":["string","null"],"description":"URL of the Answers questions about the device. `null` for a custom item."},"parts_url":{"type":["string","null"],"description":"URL of the store's list of parts for the device (for the model, when `variantid` is set). `null` when the store has no parts for it and for a custom item."},"suggested_meter_kind":{"type":["string","null"],"enum":["odometer","hour_meter","page_count","cycle_count",null],"description":"The kind of meter that fits the device, taken from its category or the nearest category above it. `odometer` counts distance in `miles` or `kilometers`, `hour_meter` counts `hours`, `page_count` counts `pages`, and `cycle_count` counts `cycles`. A car gets `odometer` and a printer gets `page_count`. Only the kind is suggested: the owner picks the unit with the first reading. `null` when no category sets one, and for a custom item."},"allowed_condition_metrics":{"type":["array","null"],"items":{"type":"string","description":"A condition metric, such as `oil_life`."},"description":"The condition metrics (the `metric` of a `condition` trigger) that fit the device: the ones its category, or the nearest category above it, turns on, plus `temperature_celsius` and `visible_wear`, which fit any device. `null` when no category sets any metric on or off and for a custom item: offer every metric then. A trigger can use any condition metric."},"wiki_namespace":{"type":["string","null"],"description":"The kind of wiki page, named as the wikis API names it: `CATEGORY` for a device and `ITEM` for a tool. `null` for a custom item."},"top_category":{"type":["object","null"],"description":"The top-level category the device sits under (a child of the root category, such as Phone or Appliance), or the device itself when it is top level. A tool (`ITEM` page) gets the Tool category. `null` for a custom item, for a device outside the root category's tree, and when that category no longer exists.","properties":{"wikiid":{"type":"integer","description":"The ID of the top-level category's wiki page."},"display_title":{"type":"string","description":"The category's readable title."}},"required":["wikiid","display_title"]}}}}}}}}},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"$ref":"#/components/responses/Forbidden"}},"x-api-usage-kind":"account"},"post":{"operationId":"addWorkbenchItem","summary":"Add an item to the workbench","description":"Adds a device or tool you own to your workbench. For one iFixit has no page for, send a `custom_name`. For a device iFixit has a page for, send its `wikiid` instead, and `variantid` to name the model.\nA device whose page has maintenance tasks comes with them, as `wiki-schedule:` tasks in `GET /workbench/items/{workbenchItemid}/tasks`. List the tasks before you create your own, or the item gets two.\nA `wikiid` request always adds a new item, so you can own several of one device.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"Ignored."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"wikiid":{"type":"integer","description":"The `wikiid` of the device's page, from `GET /wikis/{namespace}/{title}`, with `CATEGORY` for a device and `ITEM` for a tool. Send this or `custom_name`; if you send both, `wikiid` is used. The request returns 400 if no device has this `wikiid`."},"variantid":{"type":"integer","description":"The `variantid` of the device's model, from `GET /wikis/CATEGORY/{title}/topic_variants`. Needs `wikiid`, and the model must belong to that device, or the request returns 400."},"custom_name":{"type":"string","maxLength":255,"description":"The name of a device or tool that has no iFixit page. Send this or `wikiid`."},"nickname":{"type":"string","maxLength":255,"description":"Your own name for this item."},"source":{"type":"string","enum":["existing_device","new_device","custom","proposal","recommended_tool","openai_app","wiki","header","mobile_app","pdp","pdp_silent","pdp_prompt","guide_complete","question","troubleshooting","fixhub","api","seed"],"description":"Where the item was added from. Send `api` or leave it out. The other values name the iFixit apps and pages that add items, and `seed` marks sample data made with iFixit's own tools."},"purchase_date":{"type":"integer","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when you bought the item."},"purchase_price":{"type":"number","minimum":0,"maximum":99999999999.999,"multipleOf":0.001,"description":"What you paid, in `currency`."},"currency":{"type":"string","pattern":"^([A-Z]{3})?$","description":"The ISO 4217 currency code of `purchase_price`, such as `USD`. An unknown code returns 422. `USD` is used if you don't send it."},"warranty_expires_date":{"type":"integer","description":"UNIX timestamp of when the warranty ends."},"notes":{"type":["string","null"],"maxLength":10000,"description":"Your notes about the item."}}},"examples":{"knownDevice":{"summary":"Add a device iFixit has a page for","value":{"wikiid":754389,"nickname":"Kitchen toaster","purchase_date":1704067200,"purchase_price":49.99,"currency":"USD"}},"customDevice":{"summary":"Add a custom device","value":{"custom_name":"Garage door opener","nickname":"Left door"}}}}}},"responses":{"200":{"description":"A custom item with this `custom_name` was already on your workbench. The body is that item unchanged, plus `created`, which is `false`. The other fields you sent are ignored.","content":{"application/json":{"schema":{"type":"object","description":"A device or tool on a workbench. It is either a device or tool from an iFixit wiki page (`wikiid` is set) or a custom item the owner named (`custom_name` is set). A custom item has `title` and `display_title` equal to `custom_name`, and `null` for `variant`, the URL fields, `catalog_image`, `suggested_meter_kind`, `allowed_condition_metrics`, `wiki_namespace`, and `top_category`.","properties":{"workbench_itemid":{"type":"integer","description":"The ID of this item, from `GET /workbench/items`."},"wikiid":{"type":["integer","null"],"description":"The ID of the item's wiki page. `null` for a custom item."},"variantid":{"type":["integer","null"],"description":"The ID of the device model the owner picked on the wiki page, which `variant` names. `null` when no model is picked and for a custom item."},"custom_name":{"type":["string","null"],"description":"The name the owner gave a custom item. `null` for a wiki item. When a custom item is switched to a device (`PATCH` with `wikiid`), this becomes `null`, and the name moves to `nickname` unless the item already has one."},"nickname":{"type":["string","null"],"description":"The owner's own label for the item. `null` when not set."},"purchase_date":{"type":["integer","null"],"description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the owner bought the item. `null` when not set."},"purchase_price":{"type":["number","null"],"description":"What the owner paid, in `currency`. `null` when not set."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `purchase_price`, such as `EUR`."},"warranty_expires_date":{"type":["integer","null"],"description":"UNIX timestamp of when the item's warranty ends. `null` when not set."},"notes":{"type":["string","null"],"maxLength":10000,"description":"The owner's notes on the item. `null` when there are none."},"active":{"type":"integer","enum":[0,1],"description":"`1` for the one item the owner has set as active, `0` for the rest. An account has at most one active item."},"date_added":{"type":"integer","description":"UNIX timestamp of when the item was added to the workbench."},"track_usage":{"type":"boolean","description":"Whether the item has a usage meter, where its readings (miles, hours, pages, or cycles) are tracked. A device starts as `true` when its category suggests a meter (`suggested_meter_kind`) or gives it a usage-based task, and as `false` otherwise. A custom item starts as `false`. The owner changes it with `PATCH`, and adding a usage-based task turns it on. Logging a reading does not."},"latest_readings":{"type":"array","description":"What the item's meter reads now: for each unit, the most recent completed event that recorded a usage, newest first. Skipped events are left out. Empty when the item has none.","items":{"type":"object","required":["usage_unit","usage","date_completed"],"properties":{"usage_unit":{"type":["string","null"],"description":"The unit of `usage`: `miles`, `kilometers`, `hours`, `pages`, or `cycles`."},"usage":{"type":"integer","description":"The usage value the event recorded."},"date_completed":{"type":"integer","description":"UNIX timestamp of when the event was completed."}}}},"title":{"type":"string","description":"The wiki page's title, in the URL form the wikis API uses. `custom_name` for a custom item."},"display_title":{"type":"string","description":"The title to show a person: the wiki page's readable title, or `custom_name` for a custom item."},"variant":{"type":["string","null"],"description":"The name of the device model `variantid` points at. `null` when no model is picked."},"imageid":{"type":["integer","null"],"description":"The ID of the owner's own photo of the item, set with `PATCH` and `imageid`. `image` shows it instead of `catalog_image`. `null` when the owner has not set one."},"image":{"type":["string","null"],"description":"URL of the image to show for the item: the owner's photo when they set one (`imageid`), else `catalog_image`. `null` for a custom item with no photo."},"catalog_image":{"type":["string","null"],"description":"URL of the device's own image, which `image` shows when the owner has no photo. For a tool, it is the store product's image while the product is on sale, else the wiki page's. `null` for a custom item."},"topic_url":{"type":["string","null"],"description":"URL of the item's wiki page on the website. `null` for a custom item."},"answers_url":{"type":["string","null"],"description":"URL of the Answers questions about the device. `null` for a custom item."},"parts_url":{"type":["string","null"],"description":"URL of the store's list of parts for the device (for the model, when `variantid` is set). `null` when the store has no parts for it and for a custom item."},"suggested_meter_kind":{"type":["string","null"],"enum":["odometer","hour_meter","page_count","cycle_count",null],"description":"The kind of meter that fits the device, taken from its category or the nearest category above it. `odometer` counts distance in `miles` or `kilometers`, `hour_meter` counts `hours`, `page_count` counts `pages`, and `cycle_count` counts `cycles`. A car gets `odometer` and a printer gets `page_count`. Only the kind is suggested: the owner picks the unit with the first reading. `null` when no category sets one, and for a custom item."},"allowed_condition_metrics":{"type":["array","null"],"items":{"type":"string","description":"A condition metric, such as `oil_life`."},"description":"The condition metrics (the `metric` of a `condition` trigger) that fit the device: the ones its category, or the nearest category above it, turns on, plus `temperature_celsius` and `visible_wear`, which fit any device. `null` when no category sets any metric on or off and for a custom item: offer every metric then. A trigger can use any condition metric."},"wiki_namespace":{"type":["string","null"],"description":"The kind of wiki page, named as the wikis API names it: `CATEGORY` for a device and `ITEM` for a tool. `null` for a custom item."},"top_category":{"type":["object","null"],"description":"The top-level category the device sits under (a child of the root category, such as Phone or Appliance), or the device itself when it is top level. A tool (`ITEM` page) gets the Tool category. `null` for a custom item, for a device outside the root category's tree, and when that category no longer exists.","properties":{"wikiid":{"type":"integer","description":"The ID of the top-level category's wiki page."},"display_title":{"type":"string","description":"The category's readable title."}},"required":["wikiid","display_title"]}}}}}},"201":{"description":"The item was added. The body is the item, plus `created`, which is `true`.","content":{"application/json":{"schema":{"type":"object","description":"A device or tool on a workbench. It is either a device or tool from an iFixit wiki page (`wikiid` is set) or a custom item the owner named (`custom_name` is set). A custom item has `title` and `display_title` equal to `custom_name`, and `null` for `variant`, the URL fields, `catalog_image`, `suggested_meter_kind`, `allowed_condition_metrics`, `wiki_namespace`, and `top_category`.","properties":{"workbench_itemid":{"type":"integer","description":"The ID of this item, from `GET /workbench/items`."},"wikiid":{"type":["integer","null"],"description":"The ID of the item's wiki page. `null` for a custom item."},"variantid":{"type":["integer","null"],"description":"The ID of the device model the owner picked on the wiki page, which `variant` names. `null` when no model is picked and for a custom item."},"custom_name":{"type":["string","null"],"description":"The name the owner gave a custom item. `null` for a wiki item. When a custom item is switched to a device (`PATCH` with `wikiid`), this becomes `null`, and the name moves to `nickname` unless the item already has one."},"nickname":{"type":["string","null"],"description":"The owner's own label for the item. `null` when not set."},"purchase_date":{"type":["integer","null"],"description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the owner bought the item. `null` when not set."},"purchase_price":{"type":["number","null"],"description":"What the owner paid, in `currency`. `null` when not set."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `purchase_price`, such as `EUR`."},"warranty_expires_date":{"type":["integer","null"],"description":"UNIX timestamp of when the item's warranty ends. `null` when not set."},"notes":{"type":["string","null"],"maxLength":10000,"description":"The owner's notes on the item. `null` when there are none."},"active":{"type":"integer","enum":[0,1],"description":"`1` for the one item the owner has set as active, `0` for the rest. An account has at most one active item."},"date_added":{"type":"integer","description":"UNIX timestamp of when the item was added to the workbench."},"track_usage":{"type":"boolean","description":"Whether the item has a usage meter, where its readings (miles, hours, pages, or cycles) are tracked. A device starts as `true` when its category suggests a meter (`suggested_meter_kind`) or gives it a usage-based task, and as `false` otherwise. A custom item starts as `false`. The owner changes it with `PATCH`, and adding a usage-based task turns it on. Logging a reading does not."},"latest_readings":{"type":"array","description":"What the item's meter reads now: for each unit, the most recent completed event that recorded a usage, newest first. Skipped events are left out. Empty when the item has none.","items":{"type":"object","required":["usage_unit","usage","date_completed"],"properties":{"usage_unit":{"type":["string","null"],"description":"The unit of `usage`: `miles`, `kilometers`, `hours`, `pages`, or `cycles`."},"usage":{"type":"integer","description":"The usage value the event recorded."},"date_completed":{"type":"integer","description":"UNIX timestamp of when the event was completed."}}}},"title":{"type":"string","description":"The wiki page's title, in the URL form the wikis API uses. `custom_name` for a custom item."},"display_title":{"type":"string","description":"The title to show a person: the wiki page's readable title, or `custom_name` for a custom item."},"variant":{"type":["string","null"],"description":"The name of the device model `variantid` points at. `null` when no model is picked."},"imageid":{"type":["integer","null"],"description":"The ID of the owner's own photo of the item, set with `PATCH` and `imageid`. `image` shows it instead of `catalog_image`. `null` when the owner has not set one."},"image":{"type":["string","null"],"description":"URL of the image to show for the item: the owner's photo when they set one (`imageid`), else `catalog_image`. `null` for a custom item with no photo."},"catalog_image":{"type":["string","null"],"description":"URL of the device's own image, which `image` shows when the owner has no photo. For a tool, it is the store product's image while the product is on sale, else the wiki page's. `null` for a custom item."},"topic_url":{"type":["string","null"],"description":"URL of the item's wiki page on the website. `null` for a custom item."},"answers_url":{"type":["string","null"],"description":"URL of the Answers questions about the device. `null` for a custom item."},"parts_url":{"type":["string","null"],"description":"URL of the store's list of parts for the device (for the model, when `variantid` is set). `null` when the store has no parts for it and for a custom item."},"suggested_meter_kind":{"type":["string","null"],"enum":["odometer","hour_meter","page_count","cycle_count",null],"description":"The kind of meter that fits the device, taken from its category or the nearest category above it. `odometer` counts distance in `miles` or `kilometers`, `hour_meter` counts `hours`, `page_count` counts `pages`, and `cycle_count` counts `cycles`. A car gets `odometer` and a printer gets `page_count`. Only the kind is suggested: the owner picks the unit with the first reading. `null` when no category sets one, and for a custom item."},"allowed_condition_metrics":{"type":["array","null"],"items":{"type":"string","description":"A condition metric, such as `oil_life`."},"description":"The condition metrics (the `metric` of a `condition` trigger) that fit the device: the ones its category, or the nearest category above it, turns on, plus `temperature_celsius` and `visible_wear`, which fit any device. `null` when no category sets any metric on or off and for a custom item: offer every metric then. A trigger can use any condition metric."},"wiki_namespace":{"type":["string","null"],"description":"The kind of wiki page, named as the wikis API names it: `CATEGORY` for a device and `ITEM` for a tool. `null` for a custom item."},"top_category":{"type":["object","null"],"description":"The top-level category the device sits under (a child of the root category, such as Phone or Appliance), or the device itself when it is top level. A tool (`ITEM` page) gets the Tool category. `null` for a custom item, for a device outside the root category's tree, and when that category no longer exists.","properties":{"wikiid":{"type":"integer","description":"The ID of the top-level category's wiki page."},"display_title":{"type":"string","description":"The category's readable title."}},"required":["wikiid","display_title"]}}}}}},"400":{"description":"No device has this `wikiid`, or `variantid` isn't a model of that device."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The request has no account or guest session, or a guest session, a visitor without an account, sent a value in `nickname`, `purchase_date`, `purchase_price`, `currency`, `warranty_expires_date` or `notes`.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"422":{"description":"Neither `wikiid` nor `custom_name` was sent, or a field is too long or isn't valid. The `message` says which."}},"x-api-usage-kind":"write"}},"/workbench/items/{workbenchItemid}":{"get":{"operationId":"getWorkbenchItem","summary":"Get a workbench item","description":"Returns one item with its saved events in `recent_events`. A custom item has no device page: its `title` is its `custom_name`, and each field described as `null` for a custom item is `null`.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `title`, `display_title`, `topic_url`, `answers_url` and `image`."}],"responses":{"200":{"description":"Item details with recent events","content":{"application/json":{"schema":{"description":"An item plus its saved events in `recent_events`.","allOf":[{"type":"object","description":"A device or tool on a workbench. It is either a device or tool from an iFixit wiki page (`wikiid` is set) or a custom item the owner named (`custom_name` is set). A custom item has `title` and `display_title` equal to `custom_name`, and `null` for `variant`, the URL fields, `catalog_image`, `suggested_meter_kind`, `allowed_condition_metrics`, `wiki_namespace`, and `top_category`.","properties":{"workbench_itemid":{"type":"integer","description":"The ID of this item, from `GET /workbench/items`."},"wikiid":{"type":["integer","null"],"description":"The ID of the item's wiki page. `null` for a custom item."},"variantid":{"type":["integer","null"],"description":"The ID of the device model the owner picked on the wiki page, which `variant` names. `null` when no model is picked and for a custom item."},"custom_name":{"type":["string","null"],"description":"The name the owner gave a custom item. `null` for a wiki item. When a custom item is switched to a device (`PATCH` with `wikiid`), this becomes `null`, and the name moves to `nickname` unless the item already has one."},"nickname":{"type":["string","null"],"description":"The owner's own label for the item. `null` when not set."},"purchase_date":{"type":["integer","null"],"description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the owner bought the item. `null` when not set."},"purchase_price":{"type":["number","null"],"description":"What the owner paid, in `currency`. `null` when not set."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `purchase_price`, such as `EUR`."},"warranty_expires_date":{"type":["integer","null"],"description":"UNIX timestamp of when the item's warranty ends. `null` when not set."},"notes":{"type":["string","null"],"maxLength":10000,"description":"The owner's notes on the item. `null` when there are none."},"active":{"type":"integer","enum":[0,1],"description":"`1` for the one item the owner has set as active, `0` for the rest. An account has at most one active item."},"date_added":{"type":"integer","description":"UNIX timestamp of when the item was added to the workbench."},"track_usage":{"type":"boolean","description":"Whether the item has a usage meter, where its readings (miles, hours, pages, or cycles) are tracked. A device starts as `true` when its category suggests a meter (`suggested_meter_kind`) or gives it a usage-based task, and as `false` otherwise. A custom item starts as `false`. The owner changes it with `PATCH`, and adding a usage-based task turns it on. Logging a reading does not."},"latest_readings":{"type":"array","description":"What the item's meter reads now: for each unit, the most recent completed event that recorded a usage, newest first. Skipped events are left out. Empty when the item has none.","items":{"type":"object","required":["usage_unit","usage","date_completed"],"properties":{"usage_unit":{"type":["string","null"],"description":"The unit of `usage`: `miles`, `kilometers`, `hours`, `pages`, or `cycles`."},"usage":{"type":"integer","description":"The usage value the event recorded."},"date_completed":{"type":"integer","description":"UNIX timestamp of when the event was completed."}}}},"title":{"type":"string","description":"The wiki page's title, in the URL form the wikis API uses. `custom_name` for a custom item."},"display_title":{"type":"string","description":"The title to show a person: the wiki page's readable title, or `custom_name` for a custom item."},"variant":{"type":["string","null"],"description":"The name of the device model `variantid` points at. `null` when no model is picked."},"imageid":{"type":["integer","null"],"description":"The ID of the owner's own photo of the item, set with `PATCH` and `imageid`. `image` shows it instead of `catalog_image`. `null` when the owner has not set one."},"image":{"type":["string","null"],"description":"URL of the image to show for the item: the owner's photo when they set one (`imageid`), else `catalog_image`. `null` for a custom item with no photo."},"catalog_image":{"type":["string","null"],"description":"URL of the device's own image, which `image` shows when the owner has no photo. For a tool, it is the store product's image while the product is on sale, else the wiki page's. `null` for a custom item."},"topic_url":{"type":["string","null"],"description":"URL of the item's wiki page on the website. `null` for a custom item."},"answers_url":{"type":["string","null"],"description":"URL of the Answers questions about the device. `null` for a custom item."},"parts_url":{"type":["string","null"],"description":"URL of the store's list of parts for the device (for the model, when `variantid` is set). `null` when the store has no parts for it and for a custom item."},"suggested_meter_kind":{"type":["string","null"],"enum":["odometer","hour_meter","page_count","cycle_count",null],"description":"The kind of meter that fits the device, taken from its category or the nearest category above it. `odometer` counts distance in `miles` or `kilometers`, `hour_meter` counts `hours`, `page_count` counts `pages`, and `cycle_count` counts `cycles`. A car gets `odometer` and a printer gets `page_count`. Only the kind is suggested: the owner picks the unit with the first reading. `null` when no category sets one, and for a custom item."},"allowed_condition_metrics":{"type":["array","null"],"items":{"type":"string","description":"A condition metric, such as `oil_life`."},"description":"The condition metrics (the `metric` of a `condition` trigger) that fit the device: the ones its category, or the nearest category above it, turns on, plus `temperature_celsius` and `visible_wear`, which fit any device. `null` when no category sets any metric on or off and for a custom item: offer every metric then. A trigger can use any condition metric."},"wiki_namespace":{"type":["string","null"],"description":"The kind of wiki page, named as the wikis API names it: `CATEGORY` for a device and `ITEM` for a tool. `null` for a custom item."},"top_category":{"type":["object","null"],"description":"The top-level category the device sits under (a child of the root category, such as Phone or Appliance), or the device itself when it is top level. A tool (`ITEM` page) gets the Tool category. `null` for a custom item, for a device outside the root category's tree, and when that category no longer exists.","properties":{"wikiid":{"type":"integer","description":"The ID of the top-level category's wiki page."},"display_title":{"type":"string","description":"The category's readable title."}},"required":["wikiid","display_title"]}}},{"type":"object","properties":{"recent_events":{"type":"array","description":"Every event saved on the item, including ones not done yet, newest `date_event` first, with events that have no date last. Upcoming occurrences of repeating tasks that are not saved yet are not included; `GET /workbench/events/{workbenchItemid}` returns them. Empty when the item has none.","items":{"type":"object","description":"Something that happened to an item or is due on it: a repair, service\nwork, or a reading. An upcoming occurrence of a repeating task that has\nnot been saved yet is an event too, and its date comes from the task's\ntriggers. An occurrence of a repeating task comes from one of the item's\nown schedules (`workbench_item_maintenance_scheduleid` is set) or from a\nschedule the item inherits from its device's wiki page\n(`wiki_maintenance_scheduleid` is set). A one-off event or a reading has\nneither. An inherited occurrence becomes a copy that belongs to the item\nwhen you complete, skip, or update it.\n","properties":{"workbench_eventid":{"type":["integer","null"],"description":"The ID of the saved event. `null` for an upcoming occurrence that has not been saved yet.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the event belongs to."},"title":{"type":"string","description":"What was done or is due, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value or a cycle count. A reading has a `usage`, is created already completed, and has no schedule. You set `type` when you create the event, and a different `type` on a later update returns 422. An upcoming occurrence is always a `task`.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the event happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or an event saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the event. `null` when there are none."},"usage":{"type":["integer","null"],"description":"The item's total usage when the event happened, in `usage_unit`. It is a running total, not an amount since the last event: an odometer at 75000, a battery at 312 cycles. `null` when not recorded.\n"},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles",null],"description":"The unit of `usage`. It is set whenever `usage` is."},"cost":{"type":["number","null"],"format":"decimal","description":"What the event cost, in `currency`. `null` when not recorded and on an upcoming occurrence that has not been saved yet."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when the event was completed. `null` until then."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when the event was skipped. `null` unless it was. An event is completed or skipped, not both.\n"},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event. `null` on an occurrence that has not been saved yet.\n"},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved. `null` on an occurrence that has not been saved yet.\n"},"workbench_item_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the item's own schedule for this task. `null` for a one-off event and for an occurrence inherited from a wiki page that the item has no copy of yet.\n"},"wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule, set only on an occurrence the item inherits and has no copy of yet. Use it as `{scheduleid}` in `/workbench/events/{workbenchItemid}/schedule/wiki/{scheduleid}`. `null` otherwise.\n"},"triggers":{"type":["array","null"],"items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}},"description":"The triggers of the event's schedule as they are now, not as they were when the event was saved. `null` when the event has no schedule, which makes it a one-off. `[]` when the schedule has no triggers.\n"},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task. It is the guide set on the event's schedule. When there is none, an open task can get the device's public guide for replacing the part it needs, and a task whose title says to replace or change a battery gets the device's public battery guide. `null` when there is no guide.\n"},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for this task. They are the parts of `guide`: only the featured part and any kits when the guide has them, otherwise every part, in the guide's order. It can also hold store parts that fit the owner's device, such as batteries for a battery replacement, so it can hold parts when `guide` is `null`. Empty when there are none.\n"}}}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}}},"x-api-usage-kind":"account"},"patch":{"operationId":"updateWorkbenchItem","summary":"Update a workbench item","description":"Changes an item's details. Send only the fields to change; fields you leave out stay the same, and fields this operation doesn't list are ignored. For a field that can be `null`, `null` and an empty string both clear it, except `nickname`, where an empty string stays an empty string.\n`wikiid` switches the item to another device, and turns a custom item into a device item. The item keeps its ID, so its events, schedules, attachments, readings and purchase details stay with it. Tasks the old device suggested that you never touched are replaced by the new device's. A switch can turn usage tracking on, never off. Send `variantid` with `wikiid`, or the item's model is cleared. A custom item's `custom_name` becomes its `nickname`, unless it already has one or you send one.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"wikiid":{"type":"integer","minimum":1,"description":"The `wikiid` of the device to switch the item to, from `GET /wikis/{namespace}/{title}`, with `CATEGORY` for a device and `ITEM` for a tool. The request returns 400 if no device has this `wikiid`."},"variantid":{"type":"integer","minimum":1,"description":"The `variantid` of the device's model, from `GET /wikis/CATEGORY/{title}/topic_variants`. Ignored without `wikiid`. The model must belong to that device, or the request returns 400."},"nickname":{"type":"string","maxLength":255,"description":"Your own name for this item."},"custom_name":{"type":"string","maxLength":255,"description":"The item's name. Changes only a custom item; ignored on a device item."},"purchase_date":{"type":"integer","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when you bought the item."},"purchase_price":{"type":"number","minimum":0,"maximum":99999999999.999,"multipleOf":0.001,"description":"What you paid, in `currency`."},"currency":{"type":"string","pattern":"^([A-Z]{3})?$","description":"The ISO 4217 currency code of `purchase_price`, such as `USD`. An unknown code returns 422."},"warranty_expires_date":{"type":"integer","description":"UNIX timestamp of when the warranty ends."},"notes":{"type":["string","null"],"maxLength":10000,"description":"Your notes about the item."},"track_usage":{"type":"boolean","description":"`true` turns usage tracking on for this item and `false` turns it off. Turning it off keeps the readings. Any other value returns 422."},"imageid":{"type":["integer","null"],"minimum":1,"description":"The `imageid` of your own photo of the item, from `GET /user/media/images`; an image that isn't in your media manager returns 422, except the item's current photo, which changes nothing. The photo leaves your media manager while the item holds it, and a photo it replaces goes back. `null` removes the photo, and the item shows its device image again."}}}}}},"responses":{"200":{"description":"Item updated","content":{"application/json":{"schema":{"type":"object","description":"A device or tool on a workbench. It is either a device or tool from an iFixit wiki page (`wikiid` is set) or a custom item the owner named (`custom_name` is set). A custom item has `title` and `display_title` equal to `custom_name`, and `null` for `variant`, the URL fields, `catalog_image`, `suggested_meter_kind`, `allowed_condition_metrics`, `wiki_namespace`, and `top_category`.","properties":{"workbench_itemid":{"type":"integer","description":"The ID of this item, from `GET /workbench/items`."},"wikiid":{"type":["integer","null"],"description":"The ID of the item's wiki page. `null` for a custom item."},"variantid":{"type":["integer","null"],"description":"The ID of the device model the owner picked on the wiki page, which `variant` names. `null` when no model is picked and for a custom item."},"custom_name":{"type":["string","null"],"description":"The name the owner gave a custom item. `null` for a wiki item. When a custom item is switched to a device (`PATCH` with `wikiid`), this becomes `null`, and the name moves to `nickname` unless the item already has one."},"nickname":{"type":["string","null"],"description":"The owner's own label for the item. `null` when not set."},"purchase_date":{"type":["integer","null"],"description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the owner bought the item. `null` when not set."},"purchase_price":{"type":["number","null"],"description":"What the owner paid, in `currency`. `null` when not set."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `purchase_price`, such as `EUR`."},"warranty_expires_date":{"type":["integer","null"],"description":"UNIX timestamp of when the item's warranty ends. `null` when not set."},"notes":{"type":["string","null"],"maxLength":10000,"description":"The owner's notes on the item. `null` when there are none."},"active":{"type":"integer","enum":[0,1],"description":"`1` for the one item the owner has set as active, `0` for the rest. An account has at most one active item."},"date_added":{"type":"integer","description":"UNIX timestamp of when the item was added to the workbench."},"track_usage":{"type":"boolean","description":"Whether the item has a usage meter, where its readings (miles, hours, pages, or cycles) are tracked. A device starts as `true` when its category suggests a meter (`suggested_meter_kind`) or gives it a usage-based task, and as `false` otherwise. A custom item starts as `false`. The owner changes it with `PATCH`, and adding a usage-based task turns it on. Logging a reading does not."},"latest_readings":{"type":"array","description":"What the item's meter reads now: for each unit, the most recent completed event that recorded a usage, newest first. Skipped events are left out. Empty when the item has none.","items":{"type":"object","required":["usage_unit","usage","date_completed"],"properties":{"usage_unit":{"type":["string","null"],"description":"The unit of `usage`: `miles`, `kilometers`, `hours`, `pages`, or `cycles`."},"usage":{"type":"integer","description":"The usage value the event recorded."},"date_completed":{"type":"integer","description":"UNIX timestamp of when the event was completed."}}}},"title":{"type":"string","description":"The wiki page's title, in the URL form the wikis API uses. `custom_name` for a custom item."},"display_title":{"type":"string","description":"The title to show a person: the wiki page's readable title, or `custom_name` for a custom item."},"variant":{"type":["string","null"],"description":"The name of the device model `variantid` points at. `null` when no model is picked."},"imageid":{"type":["integer","null"],"description":"The ID of the owner's own photo of the item, set with `PATCH` and `imageid`. `image` shows it instead of `catalog_image`. `null` when the owner has not set one."},"image":{"type":["string","null"],"description":"URL of the image to show for the item: the owner's photo when they set one (`imageid`), else `catalog_image`. `null` for a custom item with no photo."},"catalog_image":{"type":["string","null"],"description":"URL of the device's own image, which `image` shows when the owner has no photo. For a tool, it is the store product's image while the product is on sale, else the wiki page's. `null` for a custom item."},"topic_url":{"type":["string","null"],"description":"URL of the item's wiki page on the website. `null` for a custom item."},"answers_url":{"type":["string","null"],"description":"URL of the Answers questions about the device. `null` for a custom item."},"parts_url":{"type":["string","null"],"description":"URL of the store's list of parts for the device (for the model, when `variantid` is set). `null` when the store has no parts for it and for a custom item."},"suggested_meter_kind":{"type":["string","null"],"enum":["odometer","hour_meter","page_count","cycle_count",null],"description":"The kind of meter that fits the device, taken from its category or the nearest category above it. `odometer` counts distance in `miles` or `kilometers`, `hour_meter` counts `hours`, `page_count` counts `pages`, and `cycle_count` counts `cycles`. A car gets `odometer` and a printer gets `page_count`. Only the kind is suggested: the owner picks the unit with the first reading. `null` when no category sets one, and for a custom item."},"allowed_condition_metrics":{"type":["array","null"],"items":{"type":"string","description":"A condition metric, such as `oil_life`."},"description":"The condition metrics (the `metric` of a `condition` trigger) that fit the device: the ones its category, or the nearest category above it, turns on, plus `temperature_celsius` and `visible_wear`, which fit any device. `null` when no category sets any metric on or off and for a custom item: offer every metric then. A trigger can use any condition metric."},"wiki_namespace":{"type":["string","null"],"description":"The kind of wiki page, named as the wikis API names it: `CATEGORY` for a device and `ITEM` for a tool. `null` for a custom item."},"top_category":{"type":["object","null"],"description":"The top-level category the device sits under (a child of the root category, such as Phone or Appliance), or the device itself when it is top level. A tool (`ITEM` page) gets the Tool category. `null` for a custom item, for a device outside the root category's tree, and when that category no longer exists.","properties":{"wikiid":{"type":"integer","description":"The ID of the top-level category's wiki page."},"display_title":{"type":"string","description":"The category's readable title."}},"required":["wikiid","display_title"]}}}}}},"400":{"description":"No device has this `wikiid`, or `variantid` isn't a model of that device."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"422":{"description":"A field is too long or has the wrong type."}},"x-api-usage-kind":"write"},"delete":{"operationId":"removeWorkbenchItem","summary":"Remove an item from the workbench","description":"Removes the item from your workbench. Its events, schedules and attachments can no longer be reached through the API, and adding the same device or custom name again creates a new item with no history.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}}],"responses":{"204":{"description":"Item removed (empty response body)"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The item isn't on your workbench, or you already removed it. This is a 403, never a 404.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}}},"x-api-usage-kind":"write"}},"/workbench/items/{workbenchItemid}/active":{"post":{"operationId":"setActiveWorkbenchItem","summary":"Set the active workbench item","description":"Marks this item as your active item. Only one item is active at a time, so the previous active item stops being active. Setting an item that is already active succeeds. Returns the item with `active` set to 1. iFixit's store checks parts against the active item; an app that doesn't can skip this.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Item set as active","content":{"application/json":{"schema":{"type":"object","description":"A device or tool on a workbench. It is either a device or tool from an iFixit wiki page (`wikiid` is set) or a custom item the owner named (`custom_name` is set). A custom item has `title` and `display_title` equal to `custom_name`, and `null` for `variant`, the URL fields, `catalog_image`, `suggested_meter_kind`, `allowed_condition_metrics`, `wiki_namespace`, and `top_category`.","properties":{"workbench_itemid":{"type":"integer","description":"The ID of this item, from `GET /workbench/items`."},"wikiid":{"type":["integer","null"],"description":"The ID of the item's wiki page. `null` for a custom item."},"variantid":{"type":["integer","null"],"description":"The ID of the device model the owner picked on the wiki page, which `variant` names. `null` when no model is picked and for a custom item."},"custom_name":{"type":["string","null"],"description":"The name the owner gave a custom item. `null` for a wiki item. When a custom item is switched to a device (`PATCH` with `wikiid`), this becomes `null`, and the name moves to `nickname` unless the item already has one."},"nickname":{"type":["string","null"],"description":"The owner's own label for the item. `null` when not set."},"purchase_date":{"type":["integer","null"],"description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the owner bought the item. `null` when not set."},"purchase_price":{"type":["number","null"],"description":"What the owner paid, in `currency`. `null` when not set."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `purchase_price`, such as `EUR`."},"warranty_expires_date":{"type":["integer","null"],"description":"UNIX timestamp of when the item's warranty ends. `null` when not set."},"notes":{"type":["string","null"],"maxLength":10000,"description":"The owner's notes on the item. `null` when there are none."},"active":{"type":"integer","enum":[0,1],"description":"`1` for the one item the owner has set as active, `0` for the rest. An account has at most one active item."},"date_added":{"type":"integer","description":"UNIX timestamp of when the item was added to the workbench."},"track_usage":{"type":"boolean","description":"Whether the item has a usage meter, where its readings (miles, hours, pages, or cycles) are tracked. A device starts as `true` when its category suggests a meter (`suggested_meter_kind`) or gives it a usage-based task, and as `false` otherwise. A custom item starts as `false`. The owner changes it with `PATCH`, and adding a usage-based task turns it on. Logging a reading does not."},"latest_readings":{"type":"array","description":"What the item's meter reads now: for each unit, the most recent completed event that recorded a usage, newest first. Skipped events are left out. Empty when the item has none.","items":{"type":"object","required":["usage_unit","usage","date_completed"],"properties":{"usage_unit":{"type":["string","null"],"description":"The unit of `usage`: `miles`, `kilometers`, `hours`, `pages`, or `cycles`."},"usage":{"type":"integer","description":"The usage value the event recorded."},"date_completed":{"type":"integer","description":"UNIX timestamp of when the event was completed."}}}},"title":{"type":"string","description":"The wiki page's title, in the URL form the wikis API uses. `custom_name` for a custom item."},"display_title":{"type":"string","description":"The title to show a person: the wiki page's readable title, or `custom_name` for a custom item."},"variant":{"type":["string","null"],"description":"The name of the device model `variantid` points at. `null` when no model is picked."},"imageid":{"type":["integer","null"],"description":"The ID of the owner's own photo of the item, set with `PATCH` and `imageid`. `image` shows it instead of `catalog_image`. `null` when the owner has not set one."},"image":{"type":["string","null"],"description":"URL of the image to show for the item: the owner's photo when they set one (`imageid`), else `catalog_image`. `null` for a custom item with no photo."},"catalog_image":{"type":["string","null"],"description":"URL of the device's own image, which `image` shows when the owner has no photo. For a tool, it is the store product's image while the product is on sale, else the wiki page's. `null` for a custom item."},"topic_url":{"type":["string","null"],"description":"URL of the item's wiki page on the website. `null` for a custom item."},"answers_url":{"type":["string","null"],"description":"URL of the Answers questions about the device. `null` for a custom item."},"parts_url":{"type":["string","null"],"description":"URL of the store's list of parts for the device (for the model, when `variantid` is set). `null` when the store has no parts for it and for a custom item."},"suggested_meter_kind":{"type":["string","null"],"enum":["odometer","hour_meter","page_count","cycle_count",null],"description":"The kind of meter that fits the device, taken from its category or the nearest category above it. `odometer` counts distance in `miles` or `kilometers`, `hour_meter` counts `hours`, `page_count` counts `pages`, and `cycle_count` counts `cycles`. A car gets `odometer` and a printer gets `page_count`. Only the kind is suggested: the owner picks the unit with the first reading. `null` when no category sets one, and for a custom item."},"allowed_condition_metrics":{"type":["array","null"],"items":{"type":"string","description":"A condition metric, such as `oil_life`."},"description":"The condition metrics (the `metric` of a `condition` trigger) that fit the device: the ones its category, or the nearest category above it, turns on, plus `temperature_celsius` and `visible_wear`, which fit any device. `null` when no category sets any metric on or off and for a custom item: offer every metric then. A trigger can use any condition metric."},"wiki_namespace":{"type":["string","null"],"description":"The kind of wiki page, named as the wikis API names it: `CATEGORY` for a device and `ITEM` for a tool. `null` for a custom item."},"top_category":{"type":["object","null"],"description":"The top-level category the device sits under (a child of the root category, such as Phone or Appliance), or the device itself when it is top level. A tool (`ITEM` page) gets the Tool category. `null` for a custom item, for a device outside the root category's tree, and when that category no longer exists.","properties":{"wikiid":{"type":"integer","description":"The ID of the top-level category's wiki page."},"display_title":{"type":"string","description":"The category's readable title."}},"required":["wikiid","display_title"]}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}}},"x-api-usage-kind":"write"}},"/workbench/tasks":{"get":{"operationId":"listAllWorkbenchTasks","summary":"List tasks on the whole workbench","description":"Returns the tasks of every item on your workbench in one list, in the same shape and order as the per-item list (`GET /workbench/items/{workbenchItemid}/tasks`): soonest `date_event` first, tasks with no date first. The list isn't paged. Each task also has `task_history`, a summary of its finished occurrences.\nA `taskid` is unique within one item, not across the list: two items of the same device share a `wiki-schedule:` ID. Identify a row by `workbench_itemid` and `taskid` together.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["pending","completed","skipped","resolved"]},"description":"Returns only tasks with this status. `resolved` is completed and skipped together. Every task is returned if you don't send it. The finished values return only one-off tasks and the occurrences of repeating tasks that have ended; the events lists return every occurrence."},{"name":"include","in":"query","required":false,"schema":{"type":"string","enum":["attachments"]},"description":"Send `attachments` to include each current occurrence's attachments, with image and document details. The `last_completed` event in each `task_history` entry gets an `attachment_count` instead."},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"responses":{"200":{"description":"The workbench's tasks and a summary of their history","content":{"application/json":{"schema":{"description":"The tasks of every item on the workbench, plus a summary of each repeating task's history, so you can show a task's past without fetching all of its events.","allOf":[{"type":"object","required":["tasks"],"properties":{"tasks":{"type":"array","description":"The tasks, soonest `date_event` first. Tasks with no date come first.","items":{"type":"object","description":"One thing to do on an item. It is a one-off task (a single saved event)\nor a repeating task. A repeating task is the current occurrence of a\nschedule: when you complete or skip it, that occurrence moves to the\nhistory and the next one takes its place. The `taskid` says which kind\nit is.\n","required":["taskid","workbench_itemid","title","type","status","source"],"properties":{"taskid":{"type":"string","pattern":"^(event|item-schedule|wiki-schedule):[1-9][0-9]*$","description":"Names the task within its item. A `taskid` is not unique across\nitems, so pair it with `workbench_itemid`. The prefix says what\nbacks the task:\n- `event:` and an event ID, for a one-off task.\n- `item-schedule:` and a schedule ID, for a repeating task.\n- `wiki-schedule:` and a wiki schedule ID, for a task the item\n  inherits from its device's wiki page and has no copy of yet. The\n  first update saves a copy, and the task then has an\n  `item-schedule:` ID.\nRequests accept any ID that names the task. A response gives the\ntask's current ID.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the task belongs to."},"title":{"type":"string","description":"What to do, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value. A reading is created already completed.\n"},"status":{"type":"string","enum":["pending","completed","skipped"],"description":"`pending` means not done or skipped yet. The task lists show a repeating task as `pending`, and `GET /workbench/events` returns its finished occurrences. `completed` and `skipped` appear on a one-off task, and on the occurrence that a request to complete or skip a repeating task returns.\n"},"source":{"type":"string","enum":["user","wiki"],"description":"`wiki` for a task that comes from the maintenance schedules on the device's wiki page, including a copy the item has saved. `user` for every other task.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the task happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or a one-off task saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the task. `null` when there are none."},"cost":{"type":["number","null"],"format":"decimal","description":"What the task cost, in `currency`. `null` when not recorded.\n"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers the task. `null` when there is none."},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for the task: the parts of `guide`, or only its featured part and kits when it has them. It can also hold store parts that fit the owner's device. Empty when there are none.\n"},"occurrence_seq":{"type":["integer","null"],"minimum":0,"description":"The number of the repeating task's current occurrence. It starts at `0` and goes up by one each time an occurrence is completed or skipped. Send it back when you complete or skip the task. `null` on a one-off task and on an occurrence that is history.\n"},"is_past_first_occurrence":{"type":"boolean","description":"`true` on a repeating task once one of its occurrences has been completed or skipped. From then on `first_due_at` and `first_interval` no longer apply, and only a `repeat_interval` or a `condition` trigger brings the task back. `false` on every other task.\n"},"recurrence":{"type":["object","null"],"description":"How the task repeats. `null` when it does not repeat: a one-off task, or a task whose triggers were removed.\n","properties":{"triggers":{"type":"array","description":"The triggers that say when the task is due.","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}}}},"occurrence":{"type":["object","null"],"description":"The saved event behind the task: the one-off event itself, or a repeating task's current occurrence once it has been saved. `null` while the next occurrence only exists as the schedule's calculation.\n","properties":{"workbench_eventid":{"type":"integer","description":"The ID of the saved event."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when it was completed, or `null`."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when it was skipped, or `null`."},"usage":{"type":["integer","null"],"description":"The usage reading the event recorded, or `null`."},"usage_unit":{"type":["string","null"],"description":"The unit of `usage`, or `null`."},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event."},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved."},"attachments":{"type":"array","items":{"description":"An event attachment with the image or document details included. `image` and `document` are each `null` when the attachment is of another type or you can't view the media. A video attachment has only its `objectid`; `image` and `document` are both `null`.","allOf":[{"type":"object","description":"An image, document, or video attached to an event. Exactly one of `imageid`, `documentid`, or `objectid` is set, and the other two are `null`.","properties":{"workbench_event_attachmentid":{"type":"integer","description":"The ID of the attachment. Use it to remove the attachment."},"workbench_eventid":{"type":"integer","description":"The ID of the event the attachment belongs to."},"imageid":{"type":["integer","null"],"description":"The ID of the attached image, or `null`."},"documentid":{"type":["integer","null"],"description":"The ID of the attached document, or `null`."},"objectid":{"type":["integer","null"],"description":"The ID of the attached video, or `null`."},"date_created":{"type":"integer","description":"UNIX timestamp of when the media was attached."}}},{"type":"object","properties":{"image":{"description":"The attached image's details, or `null` when the attachment isn't an image or you can't view it.","oneOf":[{"type":"object","description":"An image's URLs together with its metadata.","properties":{"image":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy, such as a crop. `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels.","example":2420},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels.","example":1815},"ratio":{"type":"string","description":"Shape the image is held to. `ONE_ONE` is square and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"],"example":"FOUR_THREE"},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source, as steps separated by semicolons, such as `crop,1x1,250x250;enhance;`. `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) read from the image, as an object keyed by tag name. An empty array `[]`, not an object, when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}},{"type":"null"}]},"document":{"description":"The attached document's details, or `null` when the attachment isn't a document or you can't view it.","oneOf":[{"type":"object","description":"A document file, such as a PDF. When the document has no thumbnail, `thumbnailid` and `imageid` are `null`, and `standard`, `thumbnail`, and `mini` hold the URL of a placeholder image.","properties":{"documentid":{"type":"integer","description":"The document's ID."},"guid":{"type":"string","description":"String that identifies the document. `GET /media/documents/{id}` takes it in place of `documentid`."},"filename":{"type":["string","null"],"description":"The document's filename, with its extension. It's the name it was uploaded with unless someone edited it."},"title":{"type":"string","description":"Display title; falls back to the filename when no title is set, and to an empty string when both are unset"},"size":{"type":"integer","description":"Size of the file, in bytes."},"thumbnailid":{"type":["integer","null"],"description":"`imageid` of the document's thumbnail; `null` when the document has no thumbnail"},"imageid":{"type":["integer","null"],"description":"Same value as `thumbnailid`."},"document_type":{"type":"string","description":"The file's format, set by its extension, such as `pdf` or `word`."},"document_extension":{"type":"string","description":"The file's extension in lowercase, without the dot."},"document_group":{"type":"string","description":"The broader kind of file, such as `pdf` or `office`."},"standard":{"type":"string","format":"uri","description":"Thumbnail image URL at standard size"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail image URL at thumbnail size"},"mini":{"type":"string","format":"uri","description":"Thumbnail image URL at mini size"},"edit_url":{"type":"string","description":"Path, without the scheme or host, of the page where the document's details are edited: `/Document/Edit/{guid}`."},"view_url":{"type":"string","description":"Path, without the scheme or host, of the page that shows the document: `/Document/{guid}/{filename}`."},"download_url":{"type":"string","format":"uri","description":"Full URL to download the file."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the document was uploaded."},"summary":{"type":["string","null"],"description":"A short description of the document; `null` when it has none."},"pages":{"type":"integer","description":"Number of pages. `0` when the count isn't known, as it isn't for files that aren't PDFs."},"type":{"type":"string","const":"Document","description":"The kind of media item."}}},{"type":"null"}]}}}]},"description":"The event's attachments. Present only with `include=attachments`.\n"}}}}}}}},{"type":"object","required":["task_history"],"properties":{"task_history":{"type":"array","description":"One entry for each task in `tasks` whose `taskid` starts with `item-schedule:`.","items":{"type":"object","description":"The past of one repeating task in the list: how many of its occurrences were completed and skipped, and the latest completed one. Every repeating task in the list (`item-schedule:` ID) has an entry, with zero counts when it has no history. Other tasks have none.","required":["workbench_itemid","taskid","completed_count","skipped_count","last_completed"],"properties":{"workbench_itemid":{"type":"integer","description":"The ID of the item the task belongs to."},"taskid":{"type":"string","description":"The `taskid` of the task in `tasks` this entry belongs to."},"completed_count":{"type":"integer","description":"How many occurrences were completed."},"skipped_count":{"type":"integer","description":"How many occurrences were skipped."},"last_completed":{"description":"The most recently completed occurrence. `null` when none was completed.","oneOf":[{"description":"A past occurrence in the task list's history. It has no `guide` or `guide_parts`, and its `title` is the text as saved. With `include=attachments` it has `attachment_count` instead of the attachments themselves, which `GET /workbench/events` returns.","allOf":[{"type":"object","description":"Something that happened to an item or is due on it: a repair, service\nwork, or a reading. An upcoming occurrence of a repeating task that has\nnot been saved yet is an event too, and its date comes from the task's\ntriggers. An occurrence of a repeating task comes from one of the item's\nown schedules (`workbench_item_maintenance_scheduleid` is set) or from a\nschedule the item inherits from its device's wiki page\n(`wiki_maintenance_scheduleid` is set). A one-off event or a reading has\nneither. An inherited occurrence becomes a copy that belongs to the item\nwhen you complete, skip, or update it.\n","properties":{"workbench_eventid":{"type":["integer","null"],"description":"The ID of the saved event. `null` for an upcoming occurrence that has not been saved yet.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the event belongs to."},"title":{"type":"string","description":"What was done or is due, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value or a cycle count. A reading has a `usage`, is created already completed, and has no schedule. You set `type` when you create the event, and a different `type` on a later update returns 422. An upcoming occurrence is always a `task`.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the event happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or an event saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the event. `null` when there are none."},"usage":{"type":["integer","null"],"description":"The item's total usage when the event happened, in `usage_unit`. It is a running total, not an amount since the last event: an odometer at 75000, a battery at 312 cycles. `null` when not recorded.\n"},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles",null],"description":"The unit of `usage`. It is set whenever `usage` is."},"cost":{"type":["number","null"],"format":"decimal","description":"What the event cost, in `currency`. `null` when not recorded and on an upcoming occurrence that has not been saved yet."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when the event was completed. `null` until then."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when the event was skipped. `null` unless it was. An event is completed or skipped, not both.\n"},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event. `null` on an occurrence that has not been saved yet.\n"},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved. `null` on an occurrence that has not been saved yet.\n"},"workbench_item_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the item's own schedule for this task. `null` for a one-off event and for an occurrence inherited from a wiki page that the item has no copy of yet.\n"},"wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule, set only on an occurrence the item inherits and has no copy of yet. Use it as `{scheduleid}` in `/workbench/events/{workbenchItemid}/schedule/wiki/{scheduleid}`. `null` otherwise.\n"},"triggers":{"type":["array","null"],"items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}},"description":"The triggers of the event's schedule as they are now, not as they were when the event was saved. `null` when the event has no schedule, which makes it a one-off. `[]` when the schedule has no triggers.\n"},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task. It is the guide set on the event's schedule. When there is none, an open task can get the device's public guide for replacing the part it needs, and a task whose title says to replace or change a battery gets the device's public battery guide. `null` when there is no guide.\n"},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for this task. They are the parts of `guide`: only the featured part and any kits when the guide has them, otherwise every part, in the guide's order. It can also hold store parts that fit the owner's device, such as batteries for a battery replacement, so it can hold parts when `guide` is `null`. Empty when there are none.\n"}}},{"type":"object","properties":{"attachment_count":{"type":"integer","description":"How many attachments the event has. Present only with `include=attachments`."}}}]},{"type":"null"}]}}}}}}]}}}},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"description":"The `status` or `include` value isn't listed."}},"x-api-usage-kind":"account"}},"/workbench/tasks/batch":{"post":{"operationId":"batchWorkbenchTasks","summary":"Apply one action to many tasks","description":"Marks done, skips or deletes up to 100 tasks in one request, each the way the single-task `PATCH` or `DELETE` does. To mark one task done, send `{\"action\": \"done\", \"tasks\": [{\"workbench_itemid\": 11, \"taskid\": \"event:90\"}]}`.\nThe response is 200 even when every task is rejected, so check `ok` on every result. It holds one result for each task, in request order, and a rejected task doesn't stop the others. Ids that name the same task are written once and share the answer.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"badge_changes","in":"query","required":false,"schema":{"type":"boolean"},"description":"Send `?badge_changes=true` to also get the Workbench badges the batch earned or moved closer, in `badge_changes`, and leave it out otherwise. Only a `done` batch earns badges."},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"One action to apply to up to 100 tasks, which can belong to different\nitems. To mark one task done, send:\n\n    {\"action\": \"done\", \"tasks\": [{\"workbench_itemid\": 11, \"taskid\": \"event:90\"}]}\n","required":["action","tasks"],"properties":{"action":{"type":"string","enum":["done","skip","delete"],"description":"`done` completes each task and `skip` skips it. `skip` works only on a task with a trigger that has a `repeat_interval`. `delete` removes each task."},"tasks":{"type":"array","minItems":1,"maxItems":100,"description":"The tasks to act on. Name each by its item and its `taskid`.","items":{"type":"object","required":["workbench_itemid","taskid"],"properties":{"workbench_itemid":{"type":"integer","description":"The ID of the item the task belongs to."},"taskid":{"type":"string","description":"A `taskid` from the task list."},"usage":{"type":["integer","null"],"minimum":1,"description":"The item's total usage to record when the task is completed. If you don't send one, the task is completed with no reading. Ignored by `skip` and `delete`."},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles","",null],"description":"The unit of `usage`. `''` and `null` mean no unit. Ignored when `usage` is absent. When you leave it out, the task keeps the unit it has, and a task with no unit comes back as `rejected`."}}}},"date":{"type":["integer","null"],"description":"UNIX timestamp recorded as `date_completed` (`done`) or `date_skipped` (`skip`) on every task in the batch. The default is the time of the request. Ignored by `delete`."}}}}}},"responses":{"200":{"description":"Per-task results, in request order","content":{"application/json":{"schema":{"type":"object","description":"The outcome for each task. A task the API rejects doesn't stop the others, and the response is still 200, so check `ok` on every entry.","required":["results"],"properties":{"badge_changes":{"type":"array","description":"The Workbench badges the batch earned or moved closer. Present only for a `done` batch sent with the `badge_changes` query parameter.","items":{"type":"object","description":"A Workbench badge that a completed task earned, or whose progress it changed.","required":["key","badge","earned","from","to"],"properties":{"key":{"type":"string","description":"The badge's identifier, such as `WorkbenchBuilder`."},"badge":{"type":"object","description":"A badge people can earn on iFixit.","properties":{"badgeid":{"type":"integer","description":"The badge's ID, as listed by `GET /users/{userid}/badges`."},"name":{"type":"string","description":"The badge's name, in the language you ask for with `langid`."},"type":{"type":"string","enum":["bronze","silver","gold"],"description":"The badge's tier."},"category":{"type":"string","description":"The part of iFixit the badge belongs to: `badgeGuide` (guides), `badgeAnswers` (Answers), `badgeWorkbench` (Workbench), or `badgeGeneral` (everything else)."},"description":{"type":"string","description":"What a user does to earn the badge, in the language you ask for with `langid`."},"multiple":{"type":"boolean","description":"`true` when the badge can be earned more than once. Workbench badges with this set are earned once per item."},"num_users":{"type":"integer","description":"How many times the badge has been awarded, across all users. A badge that can be earned more than once counts every award, so this can be higher than the number of users who hold it."},"icon":{"type":["string","null"],"description":"The name of the badge's Font Awesome icon, such as `id-card`; `null` when the badge has no icon."},"image":{"type":"string","description":"URL of the badge's image; an empty string when the badge has no image."},"secondary_color":{"type":"string","description":"The badge's color, by name, such as `camelot`."}}},"earned":{"type":"boolean","description":"`true` when the task earned the badge. A badge earned once per item reports `true` each time an item earns it."},"from":{"description":"The badge's progress before the task. `null` when it has nothing to count.","oneOf":[{"description":"How far a user is toward a Workbench badge. `kind` says which shape this is. `count`: one count across the account, `now` of `max`. `items`: a count per item, with one award for each item that reaches `max`. `items` holds each item the badge can be earned on, unearned items first and the closest to `max` first among them. `time`: like `items`, but an item must also have been owned for `days` days. `ready_at` is when it has been. `parts`: several counts, all of which must reach their `max`.","oneOf":[{"type":"object","required":["kind","now","max","unit","requires"],"properties":{"kind":{"const":"count"},"now":{"type":"integer","description":"How many steps are done. Never more than `max`."},"max":{"type":"integer","description":"How many steps earn the badge."},"unit":{"type":"string","description":"What one step is. `items` is an item on the Workbench, `repairs` a repair, `repaired_items` an item with a repair, `tasks` a completed task, and `readings` a logged reading. The other values name a kind of completed task, such as `battery_tasks` or `oil_changes`."},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","max","unit","items","requires"],"properties":{"kind":{"const":"items"},"max":{"type":"integer","description":"How many steps on one item earn the badge."},"unit":{"type":"string","description":"What one step is, with the same values as for `count`."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many steps are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."}}}},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","days","max","items"],"properties":{"kind":{"const":"time"},"days":{"type":"integer","description":"How many days an item must have been owned."},"max":{"type":"integer","description":"How many events on one item earn the badge."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned","owned_since","ready_at"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many events are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."},"owned_since":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item was added to the account."},"ready_at":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item has been owned for `days` days. It can be in the past."}}}}}},{"type":"object","required":["kind","parts"],"properties":{"kind":{"const":"parts"},"parts":{"type":"array","description":"The counts that must all reach their `max`.","items":{"type":"object","required":["key","now","max"],"properties":{"key":{"type":"string","enum":["repairs","tasks","items"],"description":"What this count is of, as `unit` describes it."},"now":{"type":"integer","description":"How many are done. Never more than `max`."},"max":{"type":"integer","description":"How many are needed."}}}}}}]},{"type":"null"}]},"to":{"description":"The badge's progress after the task. `null` when it has nothing to count.","oneOf":[{"description":"How far a user is toward a Workbench badge. `kind` says which shape this is. `count`: one count across the account, `now` of `max`. `items`: a count per item, with one award for each item that reaches `max`. `items` holds each item the badge can be earned on, unearned items first and the closest to `max` first among them. `time`: like `items`, but an item must also have been owned for `days` days. `ready_at` is when it has been. `parts`: several counts, all of which must reach their `max`.","oneOf":[{"type":"object","required":["kind","now","max","unit","requires"],"properties":{"kind":{"const":"count"},"now":{"type":"integer","description":"How many steps are done. Never more than `max`."},"max":{"type":"integer","description":"How many steps earn the badge."},"unit":{"type":"string","description":"What one step is. `items` is an item on the Workbench, `repairs` a repair, `repaired_items` an item with a repair, `tasks` a completed task, and `readings` a logged reading. The other values name a kind of completed task, such as `battery_tasks` or `oil_changes`."},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","max","unit","items","requires"],"properties":{"kind":{"const":"items"},"max":{"type":"integer","description":"How many steps on one item earn the badge."},"unit":{"type":"string","description":"What one step is, with the same values as for `count`."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many steps are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."}}}},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","days","max","items"],"properties":{"kind":{"const":"time"},"days":{"type":"integer","description":"How many days an item must have been owned."},"max":{"type":"integer","description":"How many events on one item earn the badge."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned","owned_since","ready_at"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many events are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."},"owned_since":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item was added to the account."},"ready_at":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item has been owned for `days` days. It can be in the past."}}}}}},{"type":"object","required":["kind","parts"],"properties":{"kind":{"const":"parts"},"parts":{"type":"array","description":"The counts that must all reach their `max`.","items":{"type":"object","required":["key","now","max"],"properties":{"key":{"type":"string","enum":["repairs","tasks","items"],"description":"What this count is of, as `unit` describes it."},"now":{"type":"integer","description":"How many are done. Never more than `max`."},"max":{"type":"integer","description":"How many are needed."}}}}}}]},{"type":"null"}]}}}},"results":{"type":"array","description":"One entry per requested task, in request order.","items":{"type":"object","required":["workbench_itemid","taskid","ok"],"properties":{"workbench_itemid":{"type":"integer","description":"The ID of the item, as requested."},"taskid":{"type":"string","description":"The `taskid` as you sent it, not the task's current ID."},"ok":{"type":"boolean","description":"Whether the action was applied to this task."},"task":{"description":"The task after the action, with its current `taskid`. `null` after a `delete`. Absent when `ok` is `false`.","oneOf":[{"type":"object","description":"One thing to do on an item. It is a one-off task (a single saved event)\nor a repeating task. A repeating task is the current occurrence of a\nschedule: when you complete or skip it, that occurrence moves to the\nhistory and the next one takes its place. The `taskid` says which kind\nit is.\n","required":["taskid","workbench_itemid","title","type","status","source"],"properties":{"taskid":{"type":"string","pattern":"^(event|item-schedule|wiki-schedule):[1-9][0-9]*$","description":"Names the task within its item. A `taskid` is not unique across\nitems, so pair it with `workbench_itemid`. The prefix says what\nbacks the task:\n- `event:` and an event ID, for a one-off task.\n- `item-schedule:` and a schedule ID, for a repeating task.\n- `wiki-schedule:` and a wiki schedule ID, for a task the item\n  inherits from its device's wiki page and has no copy of yet. The\n  first update saves a copy, and the task then has an\n  `item-schedule:` ID.\nRequests accept any ID that names the task. A response gives the\ntask's current ID.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the task belongs to."},"title":{"type":"string","description":"What to do, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value. A reading is created already completed.\n"},"status":{"type":"string","enum":["pending","completed","skipped"],"description":"`pending` means not done or skipped yet. The task lists show a repeating task as `pending`, and `GET /workbench/events` returns its finished occurrences. `completed` and `skipped` appear on a one-off task, and on the occurrence that a request to complete or skip a repeating task returns.\n"},"source":{"type":"string","enum":["user","wiki"],"description":"`wiki` for a task that comes from the maintenance schedules on the device's wiki page, including a copy the item has saved. `user` for every other task.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the task happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or a one-off task saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the task. `null` when there are none."},"cost":{"type":["number","null"],"format":"decimal","description":"What the task cost, in `currency`. `null` when not recorded.\n"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers the task. `null` when there is none."},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for the task: the parts of `guide`, or only its featured part and kits when it has them. It can also hold store parts that fit the owner's device. Empty when there are none.\n"},"occurrence_seq":{"type":["integer","null"],"minimum":0,"description":"The number of the repeating task's current occurrence. It starts at `0` and goes up by one each time an occurrence is completed or skipped. Send it back when you complete or skip the task. `null` on a one-off task and on an occurrence that is history.\n"},"is_past_first_occurrence":{"type":"boolean","description":"`true` on a repeating task once one of its occurrences has been completed or skipped. From then on `first_due_at` and `first_interval` no longer apply, and only a `repeat_interval` or a `condition` trigger brings the task back. `false` on every other task.\n"},"recurrence":{"type":["object","null"],"description":"How the task repeats. `null` when it does not repeat: a one-off task, or a task whose triggers were removed.\n","properties":{"triggers":{"type":"array","description":"The triggers that say when the task is due.","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}}}},"occurrence":{"type":["object","null"],"description":"The saved event behind the task: the one-off event itself, or a repeating task's current occurrence once it has been saved. `null` while the next occurrence only exists as the schedule's calculation.\n","properties":{"workbench_eventid":{"type":"integer","description":"The ID of the saved event."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when it was completed, or `null`."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when it was skipped, or `null`."},"usage":{"type":["integer","null"],"description":"The usage reading the event recorded, or `null`."},"usage_unit":{"type":["string","null"],"description":"The unit of `usage`, or `null`."},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event."},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved."},"attachments":{"type":"array","items":{"description":"An event attachment with the image or document details included. `image` and `document` are each `null` when the attachment is of another type or you can't view the media. A video attachment has only its `objectid`; `image` and `document` are both `null`.","allOf":[{"type":"object","description":"An image, document, or video attached to an event. Exactly one of `imageid`, `documentid`, or `objectid` is set, and the other two are `null`.","properties":{"workbench_event_attachmentid":{"type":"integer","description":"The ID of the attachment. Use it to remove the attachment."},"workbench_eventid":{"type":"integer","description":"The ID of the event the attachment belongs to."},"imageid":{"type":["integer","null"],"description":"The ID of the attached image, or `null`."},"documentid":{"type":["integer","null"],"description":"The ID of the attached document, or `null`."},"objectid":{"type":["integer","null"],"description":"The ID of the attached video, or `null`."},"date_created":{"type":"integer","description":"UNIX timestamp of when the media was attached."}}},{"type":"object","properties":{"image":{"description":"The attached image's details, or `null` when the attachment isn't an image or you can't view it.","oneOf":[{"type":"object","description":"An image's URLs together with its metadata.","properties":{"image":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy, such as a crop. `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels.","example":2420},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels.","example":1815},"ratio":{"type":"string","description":"Shape the image is held to. `ONE_ONE` is square and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"],"example":"FOUR_THREE"},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source, as steps separated by semicolons, such as `crop,1x1,250x250;enhance;`. `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) read from the image, as an object keyed by tag name. An empty array `[]`, not an object, when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}},{"type":"null"}]},"document":{"description":"The attached document's details, or `null` when the attachment isn't a document or you can't view it.","oneOf":[{"type":"object","description":"A document file, such as a PDF. When the document has no thumbnail, `thumbnailid` and `imageid` are `null`, and `standard`, `thumbnail`, and `mini` hold the URL of a placeholder image.","properties":{"documentid":{"type":"integer","description":"The document's ID."},"guid":{"type":"string","description":"String that identifies the document. `GET /media/documents/{id}` takes it in place of `documentid`."},"filename":{"type":["string","null"],"description":"The document's filename, with its extension. It's the name it was uploaded with unless someone edited it."},"title":{"type":"string","description":"Display title; falls back to the filename when no title is set, and to an empty string when both are unset"},"size":{"type":"integer","description":"Size of the file, in bytes."},"thumbnailid":{"type":["integer","null"],"description":"`imageid` of the document's thumbnail; `null` when the document has no thumbnail"},"imageid":{"type":["integer","null"],"description":"Same value as `thumbnailid`."},"document_type":{"type":"string","description":"The file's format, set by its extension, such as `pdf` or `word`."},"document_extension":{"type":"string","description":"The file's extension in lowercase, without the dot."},"document_group":{"type":"string","description":"The broader kind of file, such as `pdf` or `office`."},"standard":{"type":"string","format":"uri","description":"Thumbnail image URL at standard size"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail image URL at thumbnail size"},"mini":{"type":"string","format":"uri","description":"Thumbnail image URL at mini size"},"edit_url":{"type":"string","description":"Path, without the scheme or host, of the page where the document's details are edited: `/Document/Edit/{guid}`."},"view_url":{"type":"string","description":"Path, without the scheme or host, of the page that shows the document: `/Document/{guid}/{filename}`."},"download_url":{"type":"string","format":"uri","description":"Full URL to download the file."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the document was uploaded."},"summary":{"type":["string","null"],"description":"A short description of the document; `null` when it has none."},"pages":{"type":"integer","description":"Number of pages. `0` when the count isn't known, as it isn't for files that aren't PDFs."},"type":{"type":"string","const":"Document","description":"The kind of media item."}}},{"type":"null"}]}}}]},"description":"The event's attachments. Present only with `include=attachments`.\n"}}}}},{"type":"null"}]},"error":{"type":"string","enum":["forbidden","not-found","not-pending","not-skippable","rejected"],"description":"Present when `ok` is `false`. `forbidden`: the item isn't on your workbench. `not-found`: no such task. `not-pending`: the task was already completed or skipped. `not-skippable`: no trigger of the task has a `repeat_interval`. `rejected`: the change was refused, and `message` says why."},"message":{"type":"string","description":"Present when `ok` is `false`. Says what went wrong."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The request has no account. A guest session can't run a batch."},"422":{"description":"`action` isn't `done`, `skip` or `delete`, or `tasks` is empty or holds more than 100 entries."}},"x-api-usage-kind":"write"}},"/workbench/items/{workbenchItemid}/tasks":{"get":{"operationId":"listWorkbenchTasks","summary":"List tasks for a workbench item","description":"Returns the item's tasks: each one-off task, and each repeating task once, as its current occurrence with its due date. Finished occurrences of a repeating task are history and aren't listed; `GET /workbench/events/{workbenchItemid}` returns them. Sorted by `date_event`, soonest first, tasks with no date first. The list isn't paged.\nUse the `taskid` in each task for later requests. A device's task (`wiki-schedule:`) gets an `item-schedule:` ID the first time you change it.\nWhen a repeating task has ended, because you deleted or dismissed it or its last occurrence is done, its remaining occurrences are listed as one-off tasks under their own `event:` IDs.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["pending","completed","skipped","resolved"]},"description":"Returns only tasks with this status. `resolved` is completed and skipped together. The rest is as for `GET /workbench/tasks`."},{"name":"include","in":"query","required":false,"schema":{"type":"string","enum":["attachments"]},"description":"Send `attachments` to include each current occurrence's attachments, with image and document details."},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"responses":{"200":{"description":"The item's tasks","content":{"application/json":{"schema":{"type":"object","required":["tasks"],"properties":{"tasks":{"type":"array","description":"The tasks, soonest `date_event` first. Tasks with no date come first.","items":{"type":"object","description":"One thing to do on an item. It is a one-off task (a single saved event)\nor a repeating task. A repeating task is the current occurrence of a\nschedule: when you complete or skip it, that occurrence moves to the\nhistory and the next one takes its place. The `taskid` says which kind\nit is.\n","required":["taskid","workbench_itemid","title","type","status","source"],"properties":{"taskid":{"type":"string","pattern":"^(event|item-schedule|wiki-schedule):[1-9][0-9]*$","description":"Names the task within its item. A `taskid` is not unique across\nitems, so pair it with `workbench_itemid`. The prefix says what\nbacks the task:\n- `event:` and an event ID, for a one-off task.\n- `item-schedule:` and a schedule ID, for a repeating task.\n- `wiki-schedule:` and a wiki schedule ID, for a task the item\n  inherits from its device's wiki page and has no copy of yet. The\n  first update saves a copy, and the task then has an\n  `item-schedule:` ID.\nRequests accept any ID that names the task. A response gives the\ntask's current ID.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the task belongs to."},"title":{"type":"string","description":"What to do, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value. A reading is created already completed.\n"},"status":{"type":"string","enum":["pending","completed","skipped"],"description":"`pending` means not done or skipped yet. The task lists show a repeating task as `pending`, and `GET /workbench/events` returns its finished occurrences. `completed` and `skipped` appear on a one-off task, and on the occurrence that a request to complete or skip a repeating task returns.\n"},"source":{"type":"string","enum":["user","wiki"],"description":"`wiki` for a task that comes from the maintenance schedules on the device's wiki page, including a copy the item has saved. `user` for every other task.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the task happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or a one-off task saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the task. `null` when there are none."},"cost":{"type":["number","null"],"format":"decimal","description":"What the task cost, in `currency`. `null` when not recorded.\n"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers the task. `null` when there is none."},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for the task: the parts of `guide`, or only its featured part and kits when it has them. It can also hold store parts that fit the owner's device. Empty when there are none.\n"},"occurrence_seq":{"type":["integer","null"],"minimum":0,"description":"The number of the repeating task's current occurrence. It starts at `0` and goes up by one each time an occurrence is completed or skipped. Send it back when you complete or skip the task. `null` on a one-off task and on an occurrence that is history.\n"},"is_past_first_occurrence":{"type":"boolean","description":"`true` on a repeating task once one of its occurrences has been completed or skipped. From then on `first_due_at` and `first_interval` no longer apply, and only a `repeat_interval` or a `condition` trigger brings the task back. `false` on every other task.\n"},"recurrence":{"type":["object","null"],"description":"How the task repeats. `null` when it does not repeat: a one-off task, or a task whose triggers were removed.\n","properties":{"triggers":{"type":"array","description":"The triggers that say when the task is due.","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}}}},"occurrence":{"type":["object","null"],"description":"The saved event behind the task: the one-off event itself, or a repeating task's current occurrence once it has been saved. `null` while the next occurrence only exists as the schedule's calculation.\n","properties":{"workbench_eventid":{"type":"integer","description":"The ID of the saved event."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when it was completed, or `null`."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when it was skipped, or `null`."},"usage":{"type":["integer","null"],"description":"The usage reading the event recorded, or `null`."},"usage_unit":{"type":["string","null"],"description":"The unit of `usage`, or `null`."},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event."},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved."},"attachments":{"type":"array","items":{"description":"An event attachment with the image or document details included. `image` and `document` are each `null` when the attachment is of another type or you can't view the media. A video attachment has only its `objectid`; `image` and `document` are both `null`.","allOf":[{"type":"object","description":"An image, document, or video attached to an event. Exactly one of `imageid`, `documentid`, or `objectid` is set, and the other two are `null`.","properties":{"workbench_event_attachmentid":{"type":"integer","description":"The ID of the attachment. Use it to remove the attachment."},"workbench_eventid":{"type":"integer","description":"The ID of the event the attachment belongs to."},"imageid":{"type":["integer","null"],"description":"The ID of the attached image, or `null`."},"documentid":{"type":["integer","null"],"description":"The ID of the attached document, or `null`."},"objectid":{"type":["integer","null"],"description":"The ID of the attached video, or `null`."},"date_created":{"type":"integer","description":"UNIX timestamp of when the media was attached."}}},{"type":"object","properties":{"image":{"description":"The attached image's details, or `null` when the attachment isn't an image or you can't view it.","oneOf":[{"type":"object","description":"An image's URLs together with its metadata.","properties":{"image":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy, such as a crop. `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels.","example":2420},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels.","example":1815},"ratio":{"type":"string","description":"Shape the image is held to. `ONE_ONE` is square and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"],"example":"FOUR_THREE"},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source, as steps separated by semicolons, such as `crop,1x1,250x250;enhance;`. `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) read from the image, as an object keyed by tag name. An empty array `[]`, not an object, when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}},{"type":"null"}]},"document":{"description":"The attached document's details, or `null` when the attachment isn't a document or you can't view it.","oneOf":[{"type":"object","description":"A document file, such as a PDF. When the document has no thumbnail, `thumbnailid` and `imageid` are `null`, and `standard`, `thumbnail`, and `mini` hold the URL of a placeholder image.","properties":{"documentid":{"type":"integer","description":"The document's ID."},"guid":{"type":"string","description":"String that identifies the document. `GET /media/documents/{id}` takes it in place of `documentid`."},"filename":{"type":["string","null"],"description":"The document's filename, with its extension. It's the name it was uploaded with unless someone edited it."},"title":{"type":"string","description":"Display title; falls back to the filename when no title is set, and to an empty string when both are unset"},"size":{"type":"integer","description":"Size of the file, in bytes."},"thumbnailid":{"type":["integer","null"],"description":"`imageid` of the document's thumbnail; `null` when the document has no thumbnail"},"imageid":{"type":["integer","null"],"description":"Same value as `thumbnailid`."},"document_type":{"type":"string","description":"The file's format, set by its extension, such as `pdf` or `word`."},"document_extension":{"type":"string","description":"The file's extension in lowercase, without the dot."},"document_group":{"type":"string","description":"The broader kind of file, such as `pdf` or `office`."},"standard":{"type":"string","format":"uri","description":"Thumbnail image URL at standard size"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail image URL at thumbnail size"},"mini":{"type":"string","format":"uri","description":"Thumbnail image URL at mini size"},"edit_url":{"type":"string","description":"Path, without the scheme or host, of the page where the document's details are edited: `/Document/Edit/{guid}`."},"view_url":{"type":"string","description":"Path, without the scheme or host, of the page that shows the document: `/Document/{guid}/{filename}`."},"download_url":{"type":"string","format":"uri","description":"Full URL to download the file."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the document was uploaded."},"summary":{"type":["string","null"],"description":"A short description of the document; `null` when it has none."},"pages":{"type":"integer","description":"Number of pages. `0` when the count isn't known, as it isn't for files that aren't PDFs."},"type":{"type":"string","const":"Document","description":"The kind of media item."}}},{"type":"null"}]}}}]},"description":"The event's attachments. Present only with `include=attachments`.\n"}}}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"422":{"description":"The `status` or `include` value isn't listed."}},"x-api-usage-kind":"account"},"post":{"operationId":"createWorkbenchTask","summary":"Create a workbench task","description":"Adds a task to an item. The smallest request is `{\"title\": \"Clean the filter\"}`, which makes a one-off task. To make a repeating task, also send `recurrence.triggers`. The response then has an `item-schedule:` `taskid`. To also set the repeating task's guide, parts, or status, create it with `POST /workbench/schedules/{workbenchItemid}` instead.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"type":"object","description":"The body to create or update a task. Creating a task needs only `title`;\na `reading` also needs `usage`, `usage_unit`, and `date_completed`. To\nmark a task done, send `date_completed`; to skip a repeating task's\ncurrent occurrence, send `date_skipped`. `recurrence` changes how the\ntask repeats. On update, fields you leave out stay the same. An empty\nstring clears a field that can be `null`.\n","properties":{"title":{"type":"string","maxLength":255,"description":"What to do. Required to create. It can't be blank on update.\n"},"type":{"type":"string","enum":["task","reading"],"description":"Optional when you create. `task`, the default, is work to do or done. `reading` is a measurement of the item, such as an odometer value, and needs `usage`, `usage_unit`, and `date_completed`. The type can't change later: a different value on update returns 422.\n"},"date_event":{"type":["integer","string"],"description":"UNIX timestamp of the date the task is due or was done. Leave it out to make a task with no date, or, for a repeating task with a `time` trigger, the date that trigger gives. On update, the date stays if you don't send it.\n"},"notes":{"type":["string","null"],"maxLength":10000,"description":"The owner's notes on the task."},"usage":{"type":["integer","string"],"description":"The item's total usage (an odometer value, for example), a whole number of at least 1. Send `usage_unit` with it.\n"},"usage_unit":{"type":["string","null"],"maxLength":50,"description":"The unit of `usage`: `miles`, `kilometers`, `hours`, `pages`, or `cycles`. `km` is rejected. Required when you send `usage`.\n"},"cost":{"type":["number","string"],"description":"What the task cost, in `currency`: 0 or more, with up to three decimal places.\n"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"The ISO 4217 currency code of `cost`, such as `EUR`. An unknown code returns 422. The current currency stays if you don't send it, and a new task starts with `USD`.\n"},"date_completed":{"type":["integer","string"],"description":"UNIX timestamp of when you did the task. Sending it marks the task done. An empty string reopens a completed task. Don't send it with `date_skipped`.\n"},"date_skipped":{"type":["integer","string"],"description":"UNIX timestamp of when you skipped the task. An empty string reopens a skipped task. Don't send it with `date_completed`.\n"},"occurrence_seq":{"type":["integer","string"],"description":"Update only. When you complete or skip a repeating task, send the `occurrence_seq` you read from it, so that sending the request again can't finish the next occurrence. If that occurrence is already finished, the request returns it unchanged. If no finished occurrence has that number, the request returns 409.\n"},"recurrence":{"type":["object","null"],"description":"When you create a task, send it to make a repeating task; if you don't, the task is a one-off. When you update a task, the task keeps its triggers if you don't send it. `null` or an empty trigger list makes it a one-off task. A non-empty trigger list replaces the task's triggers, so send every trigger you want to keep. Ignored when the `taskid` names a completed or skipped occurrence of a repeating task.\n","properties":{"triggers":{"type":"array","description":"The triggers that say when the task is due. To repeat every 6 months, send `{\"trigger_type\": \"time\", \"metric\": \"elapsed_time\", \"unit\": \"months\", \"repeat_interval\": 6}`. To repeat every 5000 miles, send `{\"trigger_type\": \"usage\", \"metric\": \"usage\", \"unit\": \"miles\", \"repeat_interval\": 5000}`.\n","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}}}}}},{"required":["title"]}]}}}},"responses":{"201":{"description":"The task was created. The body is the task; use its `taskid` for later requests.","content":{"application/json":{"schema":{"type":"object","description":"One thing to do on an item. It is a one-off task (a single saved event)\nor a repeating task. A repeating task is the current occurrence of a\nschedule: when you complete or skip it, that occurrence moves to the\nhistory and the next one takes its place. The `taskid` says which kind\nit is.\n","required":["taskid","workbench_itemid","title","type","status","source"],"properties":{"taskid":{"type":"string","pattern":"^(event|item-schedule|wiki-schedule):[1-9][0-9]*$","description":"Names the task within its item. A `taskid` is not unique across\nitems, so pair it with `workbench_itemid`. The prefix says what\nbacks the task:\n- `event:` and an event ID, for a one-off task.\n- `item-schedule:` and a schedule ID, for a repeating task.\n- `wiki-schedule:` and a wiki schedule ID, for a task the item\n  inherits from its device's wiki page and has no copy of yet. The\n  first update saves a copy, and the task then has an\n  `item-schedule:` ID.\nRequests accept any ID that names the task. A response gives the\ntask's current ID.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the task belongs to."},"title":{"type":"string","description":"What to do, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value. A reading is created already completed.\n"},"status":{"type":"string","enum":["pending","completed","skipped"],"description":"`pending` means not done or skipped yet. The task lists show a repeating task as `pending`, and `GET /workbench/events` returns its finished occurrences. `completed` and `skipped` appear on a one-off task, and on the occurrence that a request to complete or skip a repeating task returns.\n"},"source":{"type":"string","enum":["user","wiki"],"description":"`wiki` for a task that comes from the maintenance schedules on the device's wiki page, including a copy the item has saved. `user` for every other task.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the task happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or a one-off task saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the task. `null` when there are none."},"cost":{"type":["number","null"],"format":"decimal","description":"What the task cost, in `currency`. `null` when not recorded.\n"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers the task. `null` when there is none."},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for the task: the parts of `guide`, or only its featured part and kits when it has them. It can also hold store parts that fit the owner's device. Empty when there are none.\n"},"occurrence_seq":{"type":["integer","null"],"minimum":0,"description":"The number of the repeating task's current occurrence. It starts at `0` and goes up by one each time an occurrence is completed or skipped. Send it back when you complete or skip the task. `null` on a one-off task and on an occurrence that is history.\n"},"is_past_first_occurrence":{"type":"boolean","description":"`true` on a repeating task once one of its occurrences has been completed or skipped. From then on `first_due_at` and `first_interval` no longer apply, and only a `repeat_interval` or a `condition` trigger brings the task back. `false` on every other task.\n"},"recurrence":{"type":["object","null"],"description":"How the task repeats. `null` when it does not repeat: a one-off task, or a task whose triggers were removed.\n","properties":{"triggers":{"type":"array","description":"The triggers that say when the task is due.","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}}}},"occurrence":{"type":["object","null"],"description":"The saved event behind the task: the one-off event itself, or a repeating task's current occurrence once it has been saved. `null` while the next occurrence only exists as the schedule's calculation.\n","properties":{"workbench_eventid":{"type":"integer","description":"The ID of the saved event."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when it was completed, or `null`."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when it was skipped, or `null`."},"usage":{"type":["integer","null"],"description":"The usage reading the event recorded, or `null`."},"usage_unit":{"type":["string","null"],"description":"The unit of `usage`, or `null`."},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event."},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved."},"attachments":{"type":"array","items":{"description":"An event attachment with the image or document details included. `image` and `document` are each `null` when the attachment is of another type or you can't view the media. A video attachment has only its `objectid`; `image` and `document` are both `null`.","allOf":[{"type":"object","description":"An image, document, or video attached to an event. Exactly one of `imageid`, `documentid`, or `objectid` is set, and the other two are `null`.","properties":{"workbench_event_attachmentid":{"type":"integer","description":"The ID of the attachment. Use it to remove the attachment."},"workbench_eventid":{"type":"integer","description":"The ID of the event the attachment belongs to."},"imageid":{"type":["integer","null"],"description":"The ID of the attached image, or `null`."},"documentid":{"type":["integer","null"],"description":"The ID of the attached document, or `null`."},"objectid":{"type":["integer","null"],"description":"The ID of the attached video, or `null`."},"date_created":{"type":"integer","description":"UNIX timestamp of when the media was attached."}}},{"type":"object","properties":{"image":{"description":"The attached image's details, or `null` when the attachment isn't an image or you can't view it.","oneOf":[{"type":"object","description":"An image's URLs together with its metadata.","properties":{"image":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy, such as a crop. `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels.","example":2420},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels.","example":1815},"ratio":{"type":"string","description":"Shape the image is held to. `ONE_ONE` is square and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"],"example":"FOUR_THREE"},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source, as steps separated by semicolons, such as `crop,1x1,250x250;enhance;`. `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) read from the image, as an object keyed by tag name. An empty array `[]`, not an object, when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}},{"type":"null"}]},"document":{"description":"The attached document's details, or `null` when the attachment isn't a document or you can't view it.","oneOf":[{"type":"object","description":"A document file, such as a PDF. When the document has no thumbnail, `thumbnailid` and `imageid` are `null`, and `standard`, `thumbnail`, and `mini` hold the URL of a placeholder image.","properties":{"documentid":{"type":"integer","description":"The document's ID."},"guid":{"type":"string","description":"String that identifies the document. `GET /media/documents/{id}` takes it in place of `documentid`."},"filename":{"type":["string","null"],"description":"The document's filename, with its extension. It's the name it was uploaded with unless someone edited it."},"title":{"type":"string","description":"Display title; falls back to the filename when no title is set, and to an empty string when both are unset"},"size":{"type":"integer","description":"Size of the file, in bytes."},"thumbnailid":{"type":["integer","null"],"description":"`imageid` of the document's thumbnail; `null` when the document has no thumbnail"},"imageid":{"type":["integer","null"],"description":"Same value as `thumbnailid`."},"document_type":{"type":"string","description":"The file's format, set by its extension, such as `pdf` or `word`."},"document_extension":{"type":"string","description":"The file's extension in lowercase, without the dot."},"document_group":{"type":"string","description":"The broader kind of file, such as `pdf` or `office`."},"standard":{"type":"string","format":"uri","description":"Thumbnail image URL at standard size"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail image URL at thumbnail size"},"mini":{"type":"string","format":"uri","description":"Thumbnail image URL at mini size"},"edit_url":{"type":"string","description":"Path, without the scheme or host, of the page where the document's details are edited: `/Document/Edit/{guid}`."},"view_url":{"type":"string","description":"Path, without the scheme or host, of the page that shows the document: `/Document/{guid}/{filename}`."},"download_url":{"type":"string","format":"uri","description":"Full URL to download the file."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the document was uploaded."},"summary":{"type":["string","null"],"description":"A short description of the document; `null` when it has none."},"pages":{"type":"integer","description":"Number of pages. `0` when the count isn't known, as it isn't for files that aren't PDFs."},"type":{"type":"string","const":"Document","description":"The kind of media item."}}},{"type":"null"}]}}}]},"description":"The event's attachments. Present only with `include=attachments`.\n"}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"422":{"description":"`title` is missing, or a field isn't valid. The `message` says which."}},"x-api-usage-kind":"write"}},"/workbench/items/{workbenchItemid}/tasks/{taskid}":{"get":{"operationId":"getWorkbenchTask","summary":"Get a workbench task","description":"Returns one task by `taskid`. An `event:` ID finds the one-off task, or the repeating task, that the event belongs to. A `wiki-schedule:` ID finds the device's task until you first change it, and your item's copy of it after. The `taskid` in the response is the current one and can differ from the ID you sent.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"taskid","in":"path","required":true,"description":"The task's `taskid` from `GET /workbench/items/{workbenchItemid}/tasks`: `event:{id}`, `item-schedule:{id}` or `wiki-schedule:{id}`.","schema":{"type":"string","pattern":"^(event|item-schedule|wiki-schedule):[1-9][0-9]*$"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"responses":{"200":{"description":"The task","content":{"application/json":{"schema":{"type":"object","description":"One thing to do on an item. It is a one-off task (a single saved event)\nor a repeating task. A repeating task is the current occurrence of a\nschedule: when you complete or skip it, that occurrence moves to the\nhistory and the next one takes its place. The `taskid` says which kind\nit is.\n","required":["taskid","workbench_itemid","title","type","status","source"],"properties":{"taskid":{"type":"string","pattern":"^(event|item-schedule|wiki-schedule):[1-9][0-9]*$","description":"Names the task within its item. A `taskid` is not unique across\nitems, so pair it with `workbench_itemid`. The prefix says what\nbacks the task:\n- `event:` and an event ID, for a one-off task.\n- `item-schedule:` and a schedule ID, for a repeating task.\n- `wiki-schedule:` and a wiki schedule ID, for a task the item\n  inherits from its device's wiki page and has no copy of yet. The\n  first update saves a copy, and the task then has an\n  `item-schedule:` ID.\nRequests accept any ID that names the task. A response gives the\ntask's current ID.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the task belongs to."},"title":{"type":"string","description":"What to do, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value. A reading is created already completed.\n"},"status":{"type":"string","enum":["pending","completed","skipped"],"description":"`pending` means not done or skipped yet. The task lists show a repeating task as `pending`, and `GET /workbench/events` returns its finished occurrences. `completed` and `skipped` appear on a one-off task, and on the occurrence that a request to complete or skip a repeating task returns.\n"},"source":{"type":"string","enum":["user","wiki"],"description":"`wiki` for a task that comes from the maintenance schedules on the device's wiki page, including a copy the item has saved. `user` for every other task.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the task happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or a one-off task saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the task. `null` when there are none."},"cost":{"type":["number","null"],"format":"decimal","description":"What the task cost, in `currency`. `null` when not recorded.\n"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers the task. `null` when there is none."},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for the task: the parts of `guide`, or only its featured part and kits when it has them. It can also hold store parts that fit the owner's device. Empty when there are none.\n"},"occurrence_seq":{"type":["integer","null"],"minimum":0,"description":"The number of the repeating task's current occurrence. It starts at `0` and goes up by one each time an occurrence is completed or skipped. Send it back when you complete or skip the task. `null` on a one-off task and on an occurrence that is history.\n"},"is_past_first_occurrence":{"type":"boolean","description":"`true` on a repeating task once one of its occurrences has been completed or skipped. From then on `first_due_at` and `first_interval` no longer apply, and only a `repeat_interval` or a `condition` trigger brings the task back. `false` on every other task.\n"},"recurrence":{"type":["object","null"],"description":"How the task repeats. `null` when it does not repeat: a one-off task, or a task whose triggers were removed.\n","properties":{"triggers":{"type":"array","description":"The triggers that say when the task is due.","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}}}},"occurrence":{"type":["object","null"],"description":"The saved event behind the task: the one-off event itself, or a repeating task's current occurrence once it has been saved. `null` while the next occurrence only exists as the schedule's calculation.\n","properties":{"workbench_eventid":{"type":"integer","description":"The ID of the saved event."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when it was completed, or `null`."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when it was skipped, or `null`."},"usage":{"type":["integer","null"],"description":"The usage reading the event recorded, or `null`."},"usage_unit":{"type":["string","null"],"description":"The unit of `usage`, or `null`."},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event."},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved."},"attachments":{"type":"array","items":{"description":"An event attachment with the image or document details included. `image` and `document` are each `null` when the attachment is of another type or you can't view the media. A video attachment has only its `objectid`; `image` and `document` are both `null`.","allOf":[{"type":"object","description":"An image, document, or video attached to an event. Exactly one of `imageid`, `documentid`, or `objectid` is set, and the other two are `null`.","properties":{"workbench_event_attachmentid":{"type":"integer","description":"The ID of the attachment. Use it to remove the attachment."},"workbench_eventid":{"type":"integer","description":"The ID of the event the attachment belongs to."},"imageid":{"type":["integer","null"],"description":"The ID of the attached image, or `null`."},"documentid":{"type":["integer","null"],"description":"The ID of the attached document, or `null`."},"objectid":{"type":["integer","null"],"description":"The ID of the attached video, or `null`."},"date_created":{"type":"integer","description":"UNIX timestamp of when the media was attached."}}},{"type":"object","properties":{"image":{"description":"The attached image's details, or `null` when the attachment isn't an image or you can't view it.","oneOf":[{"type":"object","description":"An image's URLs together with its metadata.","properties":{"image":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy, such as a crop. `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels.","example":2420},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels.","example":1815},"ratio":{"type":"string","description":"Shape the image is held to. `ONE_ONE` is square and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"],"example":"FOUR_THREE"},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source, as steps separated by semicolons, such as `crop,1x1,250x250;enhance;`. `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) read from the image, as an object keyed by tag name. An empty array `[]`, not an object, when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}},{"type":"null"}]},"document":{"description":"The attached document's details, or `null` when the attachment isn't a document or you can't view it.","oneOf":[{"type":"object","description":"A document file, such as a PDF. When the document has no thumbnail, `thumbnailid` and `imageid` are `null`, and `standard`, `thumbnail`, and `mini` hold the URL of a placeholder image.","properties":{"documentid":{"type":"integer","description":"The document's ID."},"guid":{"type":"string","description":"String that identifies the document. `GET /media/documents/{id}` takes it in place of `documentid`."},"filename":{"type":["string","null"],"description":"The document's filename, with its extension. It's the name it was uploaded with unless someone edited it."},"title":{"type":"string","description":"Display title; falls back to the filename when no title is set, and to an empty string when both are unset"},"size":{"type":"integer","description":"Size of the file, in bytes."},"thumbnailid":{"type":["integer","null"],"description":"`imageid` of the document's thumbnail; `null` when the document has no thumbnail"},"imageid":{"type":["integer","null"],"description":"Same value as `thumbnailid`."},"document_type":{"type":"string","description":"The file's format, set by its extension, such as `pdf` or `word`."},"document_extension":{"type":"string","description":"The file's extension in lowercase, without the dot."},"document_group":{"type":"string","description":"The broader kind of file, such as `pdf` or `office`."},"standard":{"type":"string","format":"uri","description":"Thumbnail image URL at standard size"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail image URL at thumbnail size"},"mini":{"type":"string","format":"uri","description":"Thumbnail image URL at mini size"},"edit_url":{"type":"string","description":"Path, without the scheme or host, of the page where the document's details are edited: `/Document/Edit/{guid}`."},"view_url":{"type":"string","description":"Path, without the scheme or host, of the page that shows the document: `/Document/{guid}/{filename}`."},"download_url":{"type":"string","format":"uri","description":"Full URL to download the file."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the document was uploaded."},"summary":{"type":["string","null"],"description":"A short description of the document; `null` when it has none."},"pages":{"type":"integer","description":"Number of pages. `0` when the count isn't known, as it isn't for files that aren't PDFs."},"type":{"type":"string","const":"Document","description":"The kind of media item."}}},{"type":"null"}]}}}]},"description":"The event's attachments. Present only with `include=attachments`.\n"}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The `taskid` is malformed or unknown, or names a task with nothing left to show: a non-repeating task whose only occurrence is done, or a device task you dismissed. Their finished occurrences stay reachable by their `event:` IDs.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"account"},"patch":{"operationId":"updateWorkbenchTask","summary":"Update a workbench task","description":"Changes a task, or marks it done or skipped. To mark a task done, send `date_completed`. To skip a repeating task's current occurrence, send `date_skipped`. Send `recurrence` only to change how the task repeats. The `taskid` in the response can differ from the one you sent: your first change to a device's task (`wiki-schedule:`) creates your item's copy of it and returns the copy's ID.\nCompleting or skipping a repeating task finishes its current occurrence. The response is that occurrence under its own `event:` ID, and the task list then shows the next occurrence. Send the task's `occurrence_seq` with `date_completed` or `date_skipped`, so that sending the request again doesn't finish the next occurrence too.\nTo change a past occurrence, or undo a completion, use that occurrence's `event:` ID. An empty string for `date_completed` or `date_skipped` reopens it as the current occurrence. If the next occurrence already holds your changes, the request returns 422 with `code: next-occurrence-pending`. Otherwise the untouched next occurrence is removed to make room.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"taskid","in":"path","required":true,"description":"The task's `taskid` from `GET /workbench/items/{workbenchItemid}/tasks`: `event:{id}`, `item-schedule:{id}` or `wiki-schedule:{id}`.","schema":{"type":"string","pattern":"^(event|item-schedule|wiki-schedule):[1-9][0-9]*$"}},{"name":"badge_changes","in":"query","required":false,"schema":{"type":"boolean"},"description":"Send `?badge_changes=true` to also get the Workbench badges the request earned or moved closer, in `badge_changes`, and leave it out otherwise. Only a request that completes a task earns badges."},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"The body to create or update a task. Creating a task needs only `title`;\na `reading` also needs `usage`, `usage_unit`, and `date_completed`. To\nmark a task done, send `date_completed`; to skip a repeating task's\ncurrent occurrence, send `date_skipped`. `recurrence` changes how the\ntask repeats. On update, fields you leave out stay the same. An empty\nstring clears a field that can be `null`.\n","properties":{"title":{"type":"string","maxLength":255,"description":"What to do. Required to create. It can't be blank on update.\n"},"type":{"type":"string","enum":["task","reading"],"description":"Optional when you create. `task`, the default, is work to do or done. `reading` is a measurement of the item, such as an odometer value, and needs `usage`, `usage_unit`, and `date_completed`. The type can't change later: a different value on update returns 422.\n"},"date_event":{"type":["integer","string"],"description":"UNIX timestamp of the date the task is due or was done. Leave it out to make a task with no date, or, for a repeating task with a `time` trigger, the date that trigger gives. On update, the date stays if you don't send it.\n"},"notes":{"type":["string","null"],"maxLength":10000,"description":"The owner's notes on the task."},"usage":{"type":["integer","string"],"description":"The item's total usage (an odometer value, for example), a whole number of at least 1. Send `usage_unit` with it.\n"},"usage_unit":{"type":["string","null"],"maxLength":50,"description":"The unit of `usage`: `miles`, `kilometers`, `hours`, `pages`, or `cycles`. `km` is rejected. Required when you send `usage`.\n"},"cost":{"type":["number","string"],"description":"What the task cost, in `currency`: 0 or more, with up to three decimal places.\n"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"The ISO 4217 currency code of `cost`, such as `EUR`. An unknown code returns 422. The current currency stays if you don't send it, and a new task starts with `USD`.\n"},"date_completed":{"type":["integer","string"],"description":"UNIX timestamp of when you did the task. Sending it marks the task done. An empty string reopens a completed task. Don't send it with `date_skipped`.\n"},"date_skipped":{"type":["integer","string"],"description":"UNIX timestamp of when you skipped the task. An empty string reopens a skipped task. Don't send it with `date_completed`.\n"},"occurrence_seq":{"type":["integer","string"],"description":"Update only. When you complete or skip a repeating task, send the `occurrence_seq` you read from it, so that sending the request again can't finish the next occurrence. If that occurrence is already finished, the request returns it unchanged. If no finished occurrence has that number, the request returns 409.\n"},"recurrence":{"type":["object","null"],"description":"When you create a task, send it to make a repeating task; if you don't, the task is a one-off. When you update a task, the task keeps its triggers if you don't send it. `null` or an empty trigger list makes it a one-off task. A non-empty trigger list replaces the task's triggers, so send every trigger you want to keep. Ignored when the `taskid` names a completed or skipped occurrence of a repeating task.\n","properties":{"triggers":{"type":"array","description":"The triggers that say when the task is due. To repeat every 6 months, send `{\"trigger_type\": \"time\", \"metric\": \"elapsed_time\", \"unit\": \"months\", \"repeat_interval\": 6}`. To repeat every 5000 miles, send `{\"trigger_type\": \"usage\", \"metric\": \"usage\", \"unit\": \"miles\", \"repeat_interval\": 5000}`.\n","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}}}}}}}}},"responses":{"200":{"description":"The task, or the finished occurrence when you completed or skipped one, with its current `taskid`. `badge_changes` is there when you asked for it.","content":{"application/json":{"schema":{"allOf":[{"type":"object","description":"One thing to do on an item. It is a one-off task (a single saved event)\nor a repeating task. A repeating task is the current occurrence of a\nschedule: when you complete or skip it, that occurrence moves to the\nhistory and the next one takes its place. The `taskid` says which kind\nit is.\n","required":["taskid","workbench_itemid","title","type","status","source"],"properties":{"taskid":{"type":"string","pattern":"^(event|item-schedule|wiki-schedule):[1-9][0-9]*$","description":"Names the task within its item. A `taskid` is not unique across\nitems, so pair it with `workbench_itemid`. The prefix says what\nbacks the task:\n- `event:` and an event ID, for a one-off task.\n- `item-schedule:` and a schedule ID, for a repeating task.\n- `wiki-schedule:` and a wiki schedule ID, for a task the item\n  inherits from its device's wiki page and has no copy of yet. The\n  first update saves a copy, and the task then has an\n  `item-schedule:` ID.\nRequests accept any ID that names the task. A response gives the\ntask's current ID.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the task belongs to."},"title":{"type":"string","description":"What to do, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value. A reading is created already completed.\n"},"status":{"type":"string","enum":["pending","completed","skipped"],"description":"`pending` means not done or skipped yet. The task lists show a repeating task as `pending`, and `GET /workbench/events` returns its finished occurrences. `completed` and `skipped` appear on a one-off task, and on the occurrence that a request to complete or skip a repeating task returns.\n"},"source":{"type":"string","enum":["user","wiki"],"description":"`wiki` for a task that comes from the maintenance schedules on the device's wiki page, including a copy the item has saved. `user` for every other task.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the task happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or a one-off task saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the task. `null` when there are none."},"cost":{"type":["number","null"],"format":"decimal","description":"What the task cost, in `currency`. `null` when not recorded.\n"},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers the task. `null` when there is none."},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for the task: the parts of `guide`, or only its featured part and kits when it has them. It can also hold store parts that fit the owner's device. Empty when there are none.\n"},"occurrence_seq":{"type":["integer","null"],"minimum":0,"description":"The number of the repeating task's current occurrence. It starts at `0` and goes up by one each time an occurrence is completed or skipped. Send it back when you complete or skip the task. `null` on a one-off task and on an occurrence that is history.\n"},"is_past_first_occurrence":{"type":"boolean","description":"`true` on a repeating task once one of its occurrences has been completed or skipped. From then on `first_due_at` and `first_interval` no longer apply, and only a `repeat_interval` or a `condition` trigger brings the task back. `false` on every other task.\n"},"recurrence":{"type":["object","null"],"description":"How the task repeats. `null` when it does not repeat: a one-off task, or a task whose triggers were removed.\n","properties":{"triggers":{"type":"array","description":"The triggers that say when the task is due.","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}}}},"occurrence":{"type":["object","null"],"description":"The saved event behind the task: the one-off event itself, or a repeating task's current occurrence once it has been saved. `null` while the next occurrence only exists as the schedule's calculation.\n","properties":{"workbench_eventid":{"type":"integer","description":"The ID of the saved event."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when it was completed, or `null`."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when it was skipped, or `null`."},"usage":{"type":["integer","null"],"description":"The usage reading the event recorded, or `null`."},"usage_unit":{"type":["string","null"],"description":"The unit of `usage`, or `null`."},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event."},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved."},"attachments":{"type":"array","items":{"description":"An event attachment with the image or document details included. `image` and `document` are each `null` when the attachment is of another type or you can't view the media. A video attachment has only its `objectid`; `image` and `document` are both `null`.","allOf":[{"type":"object","description":"An image, document, or video attached to an event. Exactly one of `imageid`, `documentid`, or `objectid` is set, and the other two are `null`.","properties":{"workbench_event_attachmentid":{"type":"integer","description":"The ID of the attachment. Use it to remove the attachment."},"workbench_eventid":{"type":"integer","description":"The ID of the event the attachment belongs to."},"imageid":{"type":["integer","null"],"description":"The ID of the attached image, or `null`."},"documentid":{"type":["integer","null"],"description":"The ID of the attached document, or `null`."},"objectid":{"type":["integer","null"],"description":"The ID of the attached video, or `null`."},"date_created":{"type":"integer","description":"UNIX timestamp of when the media was attached."}}},{"type":"object","properties":{"image":{"description":"The attached image's details, or `null` when the attachment isn't an image or you can't view it.","oneOf":[{"type":"object","description":"An image's URLs together with its metadata.","properties":{"image":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy, such as a crop. `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels.","example":2420},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels.","example":1815},"ratio":{"type":"string","description":"Shape the image is held to. `ONE_ONE` is square and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"],"example":"FOUR_THREE"},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source, as steps separated by semicolons, such as `crop,1x1,250x250;enhance;`. `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) read from the image, as an object keyed by tag name. An empty array `[]`, not an object, when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}},{"type":"null"}]},"document":{"description":"The attached document's details, or `null` when the attachment isn't a document or you can't view it.","oneOf":[{"type":"object","description":"A document file, such as a PDF. When the document has no thumbnail, `thumbnailid` and `imageid` are `null`, and `standard`, `thumbnail`, and `mini` hold the URL of a placeholder image.","properties":{"documentid":{"type":"integer","description":"The document's ID."},"guid":{"type":"string","description":"String that identifies the document. `GET /media/documents/{id}` takes it in place of `documentid`."},"filename":{"type":["string","null"],"description":"The document's filename, with its extension. It's the name it was uploaded with unless someone edited it."},"title":{"type":"string","description":"Display title; falls back to the filename when no title is set, and to an empty string when both are unset"},"size":{"type":"integer","description":"Size of the file, in bytes."},"thumbnailid":{"type":["integer","null"],"description":"`imageid` of the document's thumbnail; `null` when the document has no thumbnail"},"imageid":{"type":["integer","null"],"description":"Same value as `thumbnailid`."},"document_type":{"type":"string","description":"The file's format, set by its extension, such as `pdf` or `word`."},"document_extension":{"type":"string","description":"The file's extension in lowercase, without the dot."},"document_group":{"type":"string","description":"The broader kind of file, such as `pdf` or `office`."},"standard":{"type":"string","format":"uri","description":"Thumbnail image URL at standard size"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail image URL at thumbnail size"},"mini":{"type":"string","format":"uri","description":"Thumbnail image URL at mini size"},"edit_url":{"type":"string","description":"Path, without the scheme or host, of the page where the document's details are edited: `/Document/Edit/{guid}`."},"view_url":{"type":"string","description":"Path, without the scheme or host, of the page that shows the document: `/Document/{guid}/{filename}`."},"download_url":{"type":"string","format":"uri","description":"Full URL to download the file."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the document was uploaded."},"summary":{"type":["string","null"],"description":"A short description of the document; `null` when it has none."},"pages":{"type":"integer","description":"Number of pages. `0` when the count isn't known, as it isn't for files that aren't PDFs."},"type":{"type":"string","const":"Document","description":"The kind of media item."}}},{"type":"null"}]}}}]},"description":"The event's attachments. Present only with `include=attachments`.\n"}}}}},{"type":"object","properties":{"badge_changes":{"type":"array","description":"The badges the request earned or moved closer to. Present only when you send `badge_changes`.","items":{"type":"object","description":"A Workbench badge that a completed task earned, or whose progress it changed.","required":["key","badge","earned","from","to"],"properties":{"key":{"type":"string","description":"The badge's identifier, such as `WorkbenchBuilder`."},"badge":{"type":"object","description":"A badge people can earn on iFixit.","properties":{"badgeid":{"type":"integer","description":"The badge's ID, as listed by `GET /users/{userid}/badges`."},"name":{"type":"string","description":"The badge's name, in the language you ask for with `langid`."},"type":{"type":"string","enum":["bronze","silver","gold"],"description":"The badge's tier."},"category":{"type":"string","description":"The part of iFixit the badge belongs to: `badgeGuide` (guides), `badgeAnswers` (Answers), `badgeWorkbench` (Workbench), or `badgeGeneral` (everything else)."},"description":{"type":"string","description":"What a user does to earn the badge, in the language you ask for with `langid`."},"multiple":{"type":"boolean","description":"`true` when the badge can be earned more than once. Workbench badges with this set are earned once per item."},"num_users":{"type":"integer","description":"How many times the badge has been awarded, across all users. A badge that can be earned more than once counts every award, so this can be higher than the number of users who hold it."},"icon":{"type":["string","null"],"description":"The name of the badge's Font Awesome icon, such as `id-card`; `null` when the badge has no icon."},"image":{"type":"string","description":"URL of the badge's image; an empty string when the badge has no image."},"secondary_color":{"type":"string","description":"The badge's color, by name, such as `camelot`."}}},"earned":{"type":"boolean","description":"`true` when the task earned the badge. A badge earned once per item reports `true` each time an item earns it."},"from":{"description":"The badge's progress before the task. `null` when it has nothing to count.","oneOf":[{"description":"How far a user is toward a Workbench badge. `kind` says which shape this is. `count`: one count across the account, `now` of `max`. `items`: a count per item, with one award for each item that reaches `max`. `items` holds each item the badge can be earned on, unearned items first and the closest to `max` first among them. `time`: like `items`, but an item must also have been owned for `days` days. `ready_at` is when it has been. `parts`: several counts, all of which must reach their `max`.","oneOf":[{"type":"object","required":["kind","now","max","unit","requires"],"properties":{"kind":{"const":"count"},"now":{"type":"integer","description":"How many steps are done. Never more than `max`."},"max":{"type":"integer","description":"How many steps earn the badge."},"unit":{"type":"string","description":"What one step is. `items` is an item on the Workbench, `repairs` a repair, `repaired_items` an item with a repair, `tasks` a completed task, and `readings` a logged reading. The other values name a kind of completed task, such as `battery_tasks` or `oil_changes`."},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","max","unit","items","requires"],"properties":{"kind":{"const":"items"},"max":{"type":"integer","description":"How many steps on one item earn the badge."},"unit":{"type":"string","description":"What one step is, with the same values as for `count`."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many steps are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."}}}},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","days","max","items"],"properties":{"kind":{"const":"time"},"days":{"type":"integer","description":"How many days an item must have been owned."},"max":{"type":"integer","description":"How many events on one item earn the badge."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned","owned_since","ready_at"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many events are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."},"owned_since":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item was added to the account."},"ready_at":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item has been owned for `days` days. It can be in the past."}}}}}},{"type":"object","required":["kind","parts"],"properties":{"kind":{"const":"parts"},"parts":{"type":"array","description":"The counts that must all reach their `max`.","items":{"type":"object","required":["key","now","max"],"properties":{"key":{"type":"string","enum":["repairs","tasks","items"],"description":"What this count is of, as `unit` describes it."},"now":{"type":"integer","description":"How many are done. Never more than `max`."},"max":{"type":"integer","description":"How many are needed."}}}}}}]},{"type":"null"}]},"to":{"description":"The badge's progress after the task. `null` when it has nothing to count.","oneOf":[{"description":"How far a user is toward a Workbench badge. `kind` says which shape this is. `count`: one count across the account, `now` of `max`. `items`: a count per item, with one award for each item that reaches `max`. `items` holds each item the badge can be earned on, unearned items first and the closest to `max` first among them. `time`: like `items`, but an item must also have been owned for `days` days. `ready_at` is when it has been. `parts`: several counts, all of which must reach their `max`.","oneOf":[{"type":"object","required":["kind","now","max","unit","requires"],"properties":{"kind":{"const":"count"},"now":{"type":"integer","description":"How many steps are done. Never more than `max`."},"max":{"type":"integer","description":"How many steps earn the badge."},"unit":{"type":"string","description":"What one step is. `items` is an item on the Workbench, `repairs` a repair, `repaired_items` an item with a repair, `tasks` a completed task, and `readings` a logged reading. The other values name a kind of completed task, such as `battery_tasks` or `oil_changes`."},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","max","unit","items","requires"],"properties":{"kind":{"const":"items"},"max":{"type":"integer","description":"How many steps on one item earn the badge."},"unit":{"type":"string","description":"What one step is, with the same values as for `count`."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many steps are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."}}}},"requires":{"type":["object","null"],"description":"The kind of item the badge can only be earned on. `null` when any item counts.","required":["kind","has"],"properties":{"kind":{"type":"string","enum":["vehicle","appliance"],"description":"`vehicle`: the badge can be earned only on a car or truck. `appliance`: only on an appliance."},"has":{"type":"boolean","description":"`true` when the user already has an item of that kind on their Workbench."}}}}},{"type":"object","required":["kind","days","max","items"],"properties":{"kind":{"const":"time"},"days":{"type":"integer","description":"How many days an item must have been owned."},"max":{"type":"integer","description":"How many events on one item earn the badge."},"items":{"type":"array","description":"Each item the badge can be earned on, with its count.","items":{"type":"object","required":["workbench_itemid","now","earned","owned_since","ready_at"],"properties":{"workbench_itemid":{"type":"integer","description":"The `workbench_itemid` of the item, from `GET /workbench/items`."},"now":{"type":"integer","description":"How many events are done on this item. Never more than `max`."},"earned":{"type":"boolean","description":"Whether this item has earned the badge."},"owned_since":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item was added to the account."},"ready_at":{"type":"integer","format":"int64","description":"UNIX timestamp of when the item has been owned for `days` days. It can be in the past."}}}}}},{"type":"object","required":["kind","parts"],"properties":{"kind":{"const":"parts"},"parts":{"type":"array","description":"The counts that must all reach their `max`.","items":{"type":"object","required":["key","now","max"],"properties":{"key":{"type":"string","enum":["repairs","tasks","items"],"description":"What this count is of, as `unit` describes it."},"now":{"type":"integer","description":"How many are done. Never more than `max`."},"max":{"type":"integer","description":"How many are needed."}}}}}}]},{"type":"null"}]}}}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The `taskid` is malformed or unknown, or names a task that `GET /workbench/items/{workbenchItemid}/tasks/{taskid}` returns 404 for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"409":{"description":"`occurrence_seq` isn't the current occurrence's number, and the request isn't a repeat of a completion or skip that already went through. Read the task again and use its current `occurrence_seq`."},"422":{"description":"A field isn't valid, or a reopen is rejected. The `message` says why.","content":{"application/json":{"schema":{"type":"object","required":["message"],"description":"The body of a 422 on a task or event update. It always has `message`. Reopening an occurrence can also return `code` and `next_task`.","properties":{"message":{"type":"string","description":"Says why the request was rejected."},"code":{"type":"string","enum":["next-occurrence-pending"],"description":"Present only when there is a way past the refusal. `next-occurrence-pending` means you tried to reopen an occurrence while the task's next occurrence already holds the owner's changes (notes, a cost, a reading, an attachment, or a moved date). Finish or skip the task in `next_task` first."},"next_task":{"type":"object","required":["workbench_itemid","taskid","title"],"description":"Sent with `next-occurrence-pending`: the task to finish or skip first.","properties":{"workbench_itemid":{"type":"integer","description":"The ID of the item the task belongs to."},"taskid":{"type":"string","pattern":"^item-schedule:[1-9][0-9]*$","description":"The `taskid` of the task to finish or skip."},"title":{"type":"string","description":"The task's title."}}}}}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"deleteWorkbenchTask","summary":"Delete a workbench task","description":"Deletes a task for good. A repeating task (a schedule ID, or the `event:` ID of its current occurrence) loses its schedule. A device's task (`wiki-schedule:`) is dismissed. Any other `event:` ID is one event, which is deleted, except that a completed occurrence of a repeating task is kept as skipped at its completion date, so the schedule keeps its due date. A finished non-repeating task goes with its only occurrence.\nTo skip the current occurrence instead, send `date_skipped` to `PATCH /workbench/items/{workbenchItemid}/tasks/{taskid}`.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"taskid","in":"path","required":true,"description":"The task's `taskid` from `GET /workbench/items/{workbenchItemid}/tasks`: `event:{id}`, `item-schedule:{id}` or `wiki-schedule:{id}`.","schema":{"type":"string","pattern":"^(event|item-schedule|wiki-schedule):[1-9][0-9]*$"}}],"responses":{"204":{"description":"The task is gone. A completed occurrence of a repeating task stays, as skipped at its completion date."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The `taskid` is malformed or unknown, or names a task that `GET /workbench/items/{workbenchItemid}/tasks/{taskid}` returns 404 for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/workbench/items/clear_active":{"post":{"operationId":"clearActiveWorkbenchItem","summary":"Clear the active workbench item","description":"Clears your active item, also when no item was active.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"responses":{"204":{"description":"Active item cleared (empty response body)"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The request has no account or guest session.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}}},"x-api-usage-kind":"write"}},"/workbench/events":{"get":{"operationId":"listAllWorkbenchEvents","summary":"List events on the whole workbench","description":"Returns the events of every item on your workbench. An event is one occurrence of a task, saved or upcoming, or a reading. Without `status`, or with `status=pending`, the list also holds upcoming occurrences that haven't been saved yet, for item schedules and for device schedules. These have a `null` `workbench_eventid`. Sorted by `date_event`, soonest first, events with no date first. The list isn't paged.\nWith `status=completed`, `skipped` or `resolved`, only saved events are returned.\nOnce an item has its own copy of a device's schedule, the copy's occurrences replace the device's own upcoming task while the copy is `active`. A muted, archived, done or deleted copy leaves none, so the task is dismissed.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["pending","completed","skipped","resolved"]},"description":"Returns only events with this status. `resolved` is completed and skipped together. Every event is returned if you don't send it. The finished values leave out upcoming occurrences that haven't been saved yet."},{"name":"include","in":"query","required":false,"schema":{"type":"string","enum":["attachments"]},"description":"Send `attachments` to include each event's attachments, with image and document details."},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"responses":{"200":{"description":"List of events","content":{"application/json":{"schema":{"type":"object","description":"Holds an `events` array. It can mix saved events and upcoming occurrences that are not saved yet.","properties":{"events":{"type":"array","description":"The events, soonest first, and those with no date before them.","items":{"description":"An event as `GET /workbench/events` and `GET /workbench/events/{workbenchItemid}` return it. With `include=attachments` every event has an `attachments` array holding its media, with the image or document details included. The array is empty for an event with none and for an occurrence that has not been saved yet. Without the parameter, `attachments` is absent.","allOf":[{"type":"object","description":"Something that happened to an item or is due on it: a repair, service\nwork, or a reading. An upcoming occurrence of a repeating task that has\nnot been saved yet is an event too, and its date comes from the task's\ntriggers. An occurrence of a repeating task comes from one of the item's\nown schedules (`workbench_item_maintenance_scheduleid` is set) or from a\nschedule the item inherits from its device's wiki page\n(`wiki_maintenance_scheduleid` is set). A one-off event or a reading has\nneither. An inherited occurrence becomes a copy that belongs to the item\nwhen you complete, skip, or update it.\n","properties":{"workbench_eventid":{"type":["integer","null"],"description":"The ID of the saved event. `null` for an upcoming occurrence that has not been saved yet.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the event belongs to."},"title":{"type":"string","description":"What was done or is due, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value or a cycle count. A reading has a `usage`, is created already completed, and has no schedule. You set `type` when you create the event, and a different `type` on a later update returns 422. An upcoming occurrence is always a `task`.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the event happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or an event saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the event. `null` when there are none."},"usage":{"type":["integer","null"],"description":"The item's total usage when the event happened, in `usage_unit`. It is a running total, not an amount since the last event: an odometer at 75000, a battery at 312 cycles. `null` when not recorded.\n"},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles",null],"description":"The unit of `usage`. It is set whenever `usage` is."},"cost":{"type":["number","null"],"format":"decimal","description":"What the event cost, in `currency`. `null` when not recorded and on an upcoming occurrence that has not been saved yet."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when the event was completed. `null` until then."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when the event was skipped. `null` unless it was. An event is completed or skipped, not both.\n"},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event. `null` on an occurrence that has not been saved yet.\n"},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved. `null` on an occurrence that has not been saved yet.\n"},"workbench_item_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the item's own schedule for this task. `null` for a one-off event and for an occurrence inherited from a wiki page that the item has no copy of yet.\n"},"wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule, set only on an occurrence the item inherits and has no copy of yet. Use it as `{scheduleid}` in `/workbench/events/{workbenchItemid}/schedule/wiki/{scheduleid}`. `null` otherwise.\n"},"triggers":{"type":["array","null"],"items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}},"description":"The triggers of the event's schedule as they are now, not as they were when the event was saved. `null` when the event has no schedule, which makes it a one-off. `[]` when the schedule has no triggers.\n"},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task. It is the guide set on the event's schedule. When there is none, an open task can get the device's public guide for replacing the part it needs, and a task whose title says to replace or change a battery gets the device's public battery guide. `null` when there is no guide.\n"},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for this task. They are the parts of `guide`: only the featured part and any kits when the guide has them, otherwise every part, in the guide's order. It can also hold store parts that fit the owner's device, such as batteries for a battery replacement, so it can hold parts when `guide` is `null`. Empty when there are none.\n"}}},{"type":"object","properties":{"attachments":{"type":"array","description":"The event's attachments. Present only with `include=attachments`.","items":{"description":"An event attachment with the image or document details included. `image` and `document` are each `null` when the attachment is of another type or you can't view the media. A video attachment has only its `objectid`; `image` and `document` are both `null`.","allOf":[{"type":"object","description":"An image, document, or video attached to an event. Exactly one of `imageid`, `documentid`, or `objectid` is set, and the other two are `null`.","properties":{"workbench_event_attachmentid":{"type":"integer","description":"The ID of the attachment. Use it to remove the attachment."},"workbench_eventid":{"type":"integer","description":"The ID of the event the attachment belongs to."},"imageid":{"type":["integer","null"],"description":"The ID of the attached image, or `null`."},"documentid":{"type":["integer","null"],"description":"The ID of the attached document, or `null`."},"objectid":{"type":["integer","null"],"description":"The ID of the attached video, or `null`."},"date_created":{"type":"integer","description":"UNIX timestamp of when the media was attached."}}},{"type":"object","properties":{"image":{"description":"The attached image's details, or `null` when the attachment isn't an image or you can't view it.","oneOf":[{"type":"object","description":"An image's URLs together with its metadata.","properties":{"image":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy, such as a crop. `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels.","example":2420},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels.","example":1815},"ratio":{"type":"string","description":"Shape the image is held to. `ONE_ONE` is square and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"],"example":"FOUR_THREE"},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source, as steps separated by semicolons, such as `crop,1x1,250x250;enhance;`. `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) read from the image, as an object keyed by tag name. An empty array `[]`, not an object, when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}},{"type":"null"}]},"document":{"description":"The attached document's details, or `null` when the attachment isn't a document or you can't view it.","oneOf":[{"type":"object","description":"A document file, such as a PDF. When the document has no thumbnail, `thumbnailid` and `imageid` are `null`, and `standard`, `thumbnail`, and `mini` hold the URL of a placeholder image.","properties":{"documentid":{"type":"integer","description":"The document's ID."},"guid":{"type":"string","description":"String that identifies the document. `GET /media/documents/{id}` takes it in place of `documentid`."},"filename":{"type":["string","null"],"description":"The document's filename, with its extension. It's the name it was uploaded with unless someone edited it."},"title":{"type":"string","description":"Display title; falls back to the filename when no title is set, and to an empty string when both are unset"},"size":{"type":"integer","description":"Size of the file, in bytes."},"thumbnailid":{"type":["integer","null"],"description":"`imageid` of the document's thumbnail; `null` when the document has no thumbnail"},"imageid":{"type":["integer","null"],"description":"Same value as `thumbnailid`."},"document_type":{"type":"string","description":"The file's format, set by its extension, such as `pdf` or `word`."},"document_extension":{"type":"string","description":"The file's extension in lowercase, without the dot."},"document_group":{"type":"string","description":"The broader kind of file, such as `pdf` or `office`."},"standard":{"type":"string","format":"uri","description":"Thumbnail image URL at standard size"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail image URL at thumbnail size"},"mini":{"type":"string","format":"uri","description":"Thumbnail image URL at mini size"},"edit_url":{"type":"string","description":"Path, without the scheme or host, of the page where the document's details are edited: `/Document/Edit/{guid}`."},"view_url":{"type":"string","description":"Path, without the scheme or host, of the page that shows the document: `/Document/{guid}/{filename}`."},"download_url":{"type":"string","format":"uri","description":"Full URL to download the file."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the document was uploaded."},"summary":{"type":["string","null"],"description":"A short description of the document; `null` when it has none."},"pages":{"type":"integer","description":"Number of pages. `0` when the count isn't known, as it isn't for files that aren't PDFs."},"type":{"type":"string","const":"Document","description":"The kind of media item."}}},{"type":"null"}]}}}]}}}}]}}}}}}},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"422":{"description":"The `status` or `include` value isn't listed."}},"x-api-usage-kind":"account"}},"/workbench/events/{workbenchItemid}":{"get":{"operationId":"listWorkbenchEvents","summary":"List events for a workbench item","description":"Returns the events of one item: occurrences of its tasks, saved or upcoming, and readings. Without `status`, or with `status=pending`, the list also holds upcoming occurrences that haven't been saved yet, which have a `null` `workbench_eventid`. An upcoming occurrence from a device's schedule has `wiki_maintenance_scheduleid` set; read and change it with `GET` and `PATCH /workbench/events/{workbenchItemid}/schedule/wiki/{scheduleid}`.\nSorted by `date_event`, soonest first, events with no date first. With `status=completed`, `skipped` or `resolved`, only saved events are returned. The list isn't paged.\nOnce the item has its own copy of a device's schedule, the copy's occurrences replace the device's own upcoming task while the copy is `active`. A muted, archived, done or deleted copy leaves none, so the task is dismissed.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["pending","completed","skipped","resolved"]},"description":"Returns only events with this status. `resolved` is completed and skipped together. The rest is as for `GET /workbench/events`."},{"name":"include","in":"query","required":false,"schema":{"type":"string","enum":["attachments"]},"description":"Send `attachments` to include each event's attachments, with image and document details."},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"responses":{"200":{"description":"List of events","content":{"application/json":{"schema":{"type":"object","description":"Holds an `events` array. It can mix saved events and upcoming occurrences that are not saved yet.","properties":{"events":{"type":"array","description":"The events, soonest first, and those with no date before them.","items":{"description":"An event as `GET /workbench/events` and `GET /workbench/events/{workbenchItemid}` return it. With `include=attachments` every event has an `attachments` array holding its media, with the image or document details included. The array is empty for an event with none and for an occurrence that has not been saved yet. Without the parameter, `attachments` is absent.","allOf":[{"type":"object","description":"Something that happened to an item or is due on it: a repair, service\nwork, or a reading. An upcoming occurrence of a repeating task that has\nnot been saved yet is an event too, and its date comes from the task's\ntriggers. An occurrence of a repeating task comes from one of the item's\nown schedules (`workbench_item_maintenance_scheduleid` is set) or from a\nschedule the item inherits from its device's wiki page\n(`wiki_maintenance_scheduleid` is set). A one-off event or a reading has\nneither. An inherited occurrence becomes a copy that belongs to the item\nwhen you complete, skip, or update it.\n","properties":{"workbench_eventid":{"type":["integer","null"],"description":"The ID of the saved event. `null` for an upcoming occurrence that has not been saved yet.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the event belongs to."},"title":{"type":"string","description":"What was done or is due, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value or a cycle count. A reading has a `usage`, is created already completed, and has no schedule. You set `type` when you create the event, and a different `type` on a later update returns 422. An upcoming occurrence is always a `task`.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the event happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or an event saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the event. `null` when there are none."},"usage":{"type":["integer","null"],"description":"The item's total usage when the event happened, in `usage_unit`. It is a running total, not an amount since the last event: an odometer at 75000, a battery at 312 cycles. `null` when not recorded.\n"},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles",null],"description":"The unit of `usage`. It is set whenever `usage` is."},"cost":{"type":["number","null"],"format":"decimal","description":"What the event cost, in `currency`. `null` when not recorded and on an upcoming occurrence that has not been saved yet."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when the event was completed. `null` until then."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when the event was skipped. `null` unless it was. An event is completed or skipped, not both.\n"},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event. `null` on an occurrence that has not been saved yet.\n"},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved. `null` on an occurrence that has not been saved yet.\n"},"workbench_item_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the item's own schedule for this task. `null` for a one-off event and for an occurrence inherited from a wiki page that the item has no copy of yet.\n"},"wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule, set only on an occurrence the item inherits and has no copy of yet. Use it as `{scheduleid}` in `/workbench/events/{workbenchItemid}/schedule/wiki/{scheduleid}`. `null` otherwise.\n"},"triggers":{"type":["array","null"],"items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}},"description":"The triggers of the event's schedule as they are now, not as they were when the event was saved. `null` when the event has no schedule, which makes it a one-off. `[]` when the schedule has no triggers.\n"},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task. It is the guide set on the event's schedule. When there is none, an open task can get the device's public guide for replacing the part it needs, and a task whose title says to replace or change a battery gets the device's public battery guide. `null` when there is no guide.\n"},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for this task. They are the parts of `guide`: only the featured part and any kits when the guide has them, otherwise every part, in the guide's order. It can also hold store parts that fit the owner's device, such as batteries for a battery replacement, so it can hold parts when `guide` is `null`. Empty when there are none.\n"}}},{"type":"object","properties":{"attachments":{"type":"array","description":"The event's attachments. Present only with `include=attachments`.","items":{"description":"An event attachment with the image or document details included. `image` and `document` are each `null` when the attachment is of another type or you can't view the media. A video attachment has only its `objectid`; `image` and `document` are both `null`.","allOf":[{"type":"object","description":"An image, document, or video attached to an event. Exactly one of `imageid`, `documentid`, or `objectid` is set, and the other two are `null`.","properties":{"workbench_event_attachmentid":{"type":"integer","description":"The ID of the attachment. Use it to remove the attachment."},"workbench_eventid":{"type":"integer","description":"The ID of the event the attachment belongs to."},"imageid":{"type":["integer","null"],"description":"The ID of the attached image, or `null`."},"documentid":{"type":["integer","null"],"description":"The ID of the attached document, or `null`."},"objectid":{"type":["integer","null"],"description":"The ID of the attached video, or `null`."},"date_created":{"type":"integer","description":"UNIX timestamp of when the media was attached."}}},{"type":"object","properties":{"image":{"description":"The attached image's details, or `null` when the attachment isn't an image or you can't view it.","oneOf":[{"type":"object","description":"An image's URLs together with its metadata.","properties":{"image":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy, such as a crop. `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels.","example":2420},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels.","example":1815},"ratio":{"type":"string","description":"Shape the image is held to. `ONE_ONE` is square and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"],"example":"FOUR_THREE"},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source, as steps separated by semicolons, such as `crop,1x1,250x250;enhance;`. `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) read from the image, as an object keyed by tag name. An empty array `[]`, not an object, when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}},{"type":"null"}]},"document":{"description":"The attached document's details, or `null` when the attachment isn't a document or you can't view it.","oneOf":[{"type":"object","description":"A document file, such as a PDF. When the document has no thumbnail, `thumbnailid` and `imageid` are `null`, and `standard`, `thumbnail`, and `mini` hold the URL of a placeholder image.","properties":{"documentid":{"type":"integer","description":"The document's ID."},"guid":{"type":"string","description":"String that identifies the document. `GET /media/documents/{id}` takes it in place of `documentid`."},"filename":{"type":["string","null"],"description":"The document's filename, with its extension. It's the name it was uploaded with unless someone edited it."},"title":{"type":"string","description":"Display title; falls back to the filename when no title is set, and to an empty string when both are unset"},"size":{"type":"integer","description":"Size of the file, in bytes."},"thumbnailid":{"type":["integer","null"],"description":"`imageid` of the document's thumbnail; `null` when the document has no thumbnail"},"imageid":{"type":["integer","null"],"description":"Same value as `thumbnailid`."},"document_type":{"type":"string","description":"The file's format, set by its extension, such as `pdf` or `word`."},"document_extension":{"type":"string","description":"The file's extension in lowercase, without the dot."},"document_group":{"type":"string","description":"The broader kind of file, such as `pdf` or `office`."},"standard":{"type":"string","format":"uri","description":"Thumbnail image URL at standard size"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail image URL at thumbnail size"},"mini":{"type":"string","format":"uri","description":"Thumbnail image URL at mini size"},"edit_url":{"type":"string","description":"Path, without the scheme or host, of the page where the document's details are edited: `/Document/Edit/{guid}`."},"view_url":{"type":"string","description":"Path, without the scheme or host, of the page that shows the document: `/Document/{guid}/{filename}`."},"download_url":{"type":"string","format":"uri","description":"Full URL to download the file."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the document was uploaded."},"summary":{"type":["string","null"],"description":"A short description of the document; `null` when it has none."},"pages":{"type":"integer","description":"Number of pages. `0` when the count isn't known, as it isn't for files that aren't PDFs."},"type":{"type":"string","const":"Document","description":"The kind of media item."}}},{"type":"null"}]}}}]}}}}]}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"422":{"description":"The `status` or `include` value isn't listed."}},"x-api-usage-kind":"account"},"post":{"operationId":"createWorkbenchEvent","summary":"Log a maintenance event","description":"Logs an event on an item: work you did or will do, or a reading. To log a repair you did, send `title`, `date_completed`, and optionally `date_event`, `notes`, `usage` with `usage_unit`, and `cost` with `currency`. The smallest request is `{\"title\": \"Clean the filter\"}`, a task with no date. With neither `date_completed` nor `date_skipped`, the event is pending. To log a reading such as an odometer value, send `type: \"reading\"`.\nLink a schedule only when the event belongs to a repeating task. Send `triggers` to create a schedule with the event, `workbench_item_maintenance_scheduleid` for one the item has, or `wiki_maintenance_scheduleid` for one from the device's page. Send only one of the three. A device schedule is copied to the item first, and the response holds the copy's `workbench_item_maintenance_scheduleid`. A schedule has at most one pending event. To finish a repeating task's current occurrence, `PATCH` the task instead.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title"],"properties":{"title":{"type":"string","maxLength":255,"description":"What was done or is to do."},"type":{"type":"string","enum":["task","reading"],"default":"task","description":"`task` is work to do or done. `reading` is a standalone measurement and needs `usage` and `date_completed` but no schedule. The type can't be changed later."},"date_event":{"type":"integer","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the event happened or is due."},"notes":{"type":"string","maxLength":10000,"description":"Free text."},"usage":{"type":"integer","description":"The item's total usage at the time of the event, such as 75000 on an odometer. It is the running total, not the amount used since the last event."},"usage_unit":{"type":"string","enum":["miles","kilometers","hours","pages","cycles",""],"description":"What `usage` counts. Required when you send `usage`."},"cost":{"type":"number","format":"decimal","minimum":0,"maximum":99999999999.999,"multipleOf":0.001,"description":"What the work cost, in `currency`."},"currency":{"type":"string","pattern":"^([A-Z]{3})?$","description":"The ISO 4217 currency code of `cost`, such as `USD`. An unknown code returns 422. `USD` is used if you don't send it."},"date_completed":{"type":"integer","description":"UNIX timestamp of when you did it. Don't send it with `date_skipped`."},"date_skipped":{"type":"integer","description":"UNIX timestamp of when you skipped it. Don't send it with `date_completed`."},"workbench_item_maintenance_scheduleid":{"type":"integer","description":"The `workbench_item_maintenance_scheduleid` of one of this item's schedules, from `GET /workbench/schedules/{workbenchItemid}`. A pending event needs an `active` schedule. Don't send it with `triggers` or `wiki_maintenance_scheduleid`."},"wiki_maintenance_scheduleid":{"type":"integer","description":"The `wiki_maintenance_scheduleid` of a schedule from the item's device page, from `GET /workbench/events/{workbenchItemid}`. Don't send it with `triggers` or `workbench_item_maintenance_scheduleid`."},"triggers":{"type":"array","description":"When to repeat the task. A non-empty list creates a schedule with these triggers and links the event to it. Leave it out, or send `[]`, for a plain event.","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}}}},"examples":{"usageReading":{"summary":"Log an odometer reading","value":{"title":"Odometer reading","type":"reading","date_event":1709856000,"usage":75000,"usage_unit":"miles","date_completed":1709856000}},"batteryCycles":{"summary":"Log battery cycle count","value":{"title":"Battery cycle count","type":"reading","date_event":1709856000,"usage":312,"usage_unit":"cycles","date_completed":1709856000}},"maintenanceWithUsage":{"summary":"Oil change with odometer reading","value":{"title":"Oil change","date_event":1709856000,"usage":75000,"usage_unit":"miles","cost":45.99,"date_completed":1709856000,"workbench_item_maintenance_scheduleid":42}}}}}},"responses":{"201":{"description":"The event was created. The body is the event.","content":{"application/json":{"schema":{"type":"object","description":"Something that happened to an item or is due on it: a repair, service\nwork, or a reading. An upcoming occurrence of a repeating task that has\nnot been saved yet is an event too, and its date comes from the task's\ntriggers. An occurrence of a repeating task comes from one of the item's\nown schedules (`workbench_item_maintenance_scheduleid` is set) or from a\nschedule the item inherits from its device's wiki page\n(`wiki_maintenance_scheduleid` is set). A one-off event or a reading has\nneither. An inherited occurrence becomes a copy that belongs to the item\nwhen you complete, skip, or update it.\n","properties":{"workbench_eventid":{"type":["integer","null"],"description":"The ID of the saved event. `null` for an upcoming occurrence that has not been saved yet.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the event belongs to."},"title":{"type":"string","description":"What was done or is due, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value or a cycle count. A reading has a `usage`, is created already completed, and has no schedule. You set `type` when you create the event, and a different `type` on a later update returns 422. An upcoming occurrence is always a `task`.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the event happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or an event saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the event. `null` when there are none."},"usage":{"type":["integer","null"],"description":"The item's total usage when the event happened, in `usage_unit`. It is a running total, not an amount since the last event: an odometer at 75000, a battery at 312 cycles. `null` when not recorded.\n"},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles",null],"description":"The unit of `usage`. It is set whenever `usage` is."},"cost":{"type":["number","null"],"format":"decimal","description":"What the event cost, in `currency`. `null` when not recorded and on an upcoming occurrence that has not been saved yet."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when the event was completed. `null` until then."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when the event was skipped. `null` unless it was. An event is completed or skipped, not both.\n"},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event. `null` on an occurrence that has not been saved yet.\n"},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved. `null` on an occurrence that has not been saved yet.\n"},"workbench_item_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the item's own schedule for this task. `null` for a one-off event and for an occurrence inherited from a wiki page that the item has no copy of yet.\n"},"wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule, set only on an occurrence the item inherits and has no copy of yet. Use it as `{scheduleid}` in `/workbench/events/{workbenchItemid}/schedule/wiki/{scheduleid}`. `null` otherwise.\n"},"triggers":{"type":["array","null"],"items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}},"description":"The triggers of the event's schedule as they are now, not as they were when the event was saved. `null` when the event has no schedule, which makes it a one-off. `[]` when the schedule has no triggers.\n"},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task. It is the guide set on the event's schedule. When there is none, an open task can get the device's public guide for replacing the part it needs, and a task whose title says to replace or change a battery gets the device's public battery guide. `null` when there is no guide.\n"},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for this task. They are the parts of `guide`: only the featured part and any kits when the guide has them, otherwise every part, in the guide's order. It can also hold store parts that fit the owner's device, such as batteries for a battery replacement, so it can hold parts when `guide` is `null`. Empty when there are none.\n"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"422":{"description":"A field isn't valid, `date_completed` and `date_skipped` were both sent, the schedule isn't this item's or already has a pending event, or the event breaks the rules for its `type`. The `message` says which."}},"x-api-usage-kind":"write"}},"/workbench/events/{workbenchItemid}/{workbenchEventid}":{"get":{"operationId":"getWorkbenchEvent","summary":"Get an event","description":"Returns one saved event. An upcoming occurrence that hasn't been saved yet has no `workbench_eventid` and can't be fetched here; use `GET /workbench/events/{workbenchItemid}/schedule/item/{scheduleid}` or `.../schedule/wiki/{scheduleid}`. `triggers` holds the schedule's current triggers, and is `null` when the event has no schedule. `wiki_maintenance_scheduleid` is always `null` on a saved event.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"workbenchEventid","in":"path","required":true,"description":"The `workbench_eventid` of the event, from `GET /workbench/events/{workbenchItemid}`.","schema":{"type":"integer"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"responses":{"200":{"description":"Event details","content":{"application/json":{"schema":{"type":"object","description":"Something that happened to an item or is due on it: a repair, service\nwork, or a reading. An upcoming occurrence of a repeating task that has\nnot been saved yet is an event too, and its date comes from the task's\ntriggers. An occurrence of a repeating task comes from one of the item's\nown schedules (`workbench_item_maintenance_scheduleid` is set) or from a\nschedule the item inherits from its device's wiki page\n(`wiki_maintenance_scheduleid` is set). A one-off event or a reading has\nneither. An inherited occurrence becomes a copy that belongs to the item\nwhen you complete, skip, or update it.\n","properties":{"workbench_eventid":{"type":["integer","null"],"description":"The ID of the saved event. `null` for an upcoming occurrence that has not been saved yet.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the event belongs to."},"title":{"type":"string","description":"What was done or is due, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value or a cycle count. A reading has a `usage`, is created already completed, and has no schedule. You set `type` when you create the event, and a different `type` on a later update returns 422. An upcoming occurrence is always a `task`.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the event happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or an event saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the event. `null` when there are none."},"usage":{"type":["integer","null"],"description":"The item's total usage when the event happened, in `usage_unit`. It is a running total, not an amount since the last event: an odometer at 75000, a battery at 312 cycles. `null` when not recorded.\n"},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles",null],"description":"The unit of `usage`. It is set whenever `usage` is."},"cost":{"type":["number","null"],"format":"decimal","description":"What the event cost, in `currency`. `null` when not recorded and on an upcoming occurrence that has not been saved yet."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when the event was completed. `null` until then."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when the event was skipped. `null` unless it was. An event is completed or skipped, not both.\n"},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event. `null` on an occurrence that has not been saved yet.\n"},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved. `null` on an occurrence that has not been saved yet.\n"},"workbench_item_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the item's own schedule for this task. `null` for a one-off event and for an occurrence inherited from a wiki page that the item has no copy of yet.\n"},"wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule, set only on an occurrence the item inherits and has no copy of yet. Use it as `{scheduleid}` in `/workbench/events/{workbenchItemid}/schedule/wiki/{scheduleid}`. `null` otherwise.\n"},"triggers":{"type":["array","null"],"items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}},"description":"The triggers of the event's schedule as they are now, not as they were when the event was saved. `null` when the event has no schedule, which makes it a one-off. `[]` when the schedule has no triggers.\n"},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task. It is the guide set on the event's schedule. When there is none, an open task can get the device's public guide for replacing the part it needs, and a task whose title says to replace or change a battery gets the device's public battery guide. `null` when there is no guide.\n"},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for this task. They are the parts of `guide`: only the featured part and any kits when the guide has them, otherwise every part, in the guide's order. It can also hold store parts that fit the owner's device, such as batteries for a battery replacement, so it can hold parts when `guide` is `null`. Empty when there are none.\n"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"The item doesn't exist or isn't on your workbench.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}}},"x-api-usage-kind":"account"},"patch":{"operationId":"updateWorkbenchEvent","summary":"Update an event","description":"Changes an event. Send only the fields to change; fields this operation doesn't list are ignored. For a field that can be `null`, `null` and an empty string both clear it, but `title` can't be `null` or empty. Setting `date_completed` clears `date_skipped` and the other way round. If you send both, `date_skipped` is used. A schedule has at most one pending event.\n`triggers` replaces all the triggers of the event's schedule. An event with no schedule gets a new one. `[]` clears the triggers of a scheduled event but keeps the schedule, so it stops producing occurrences; on an event with no schedule it does nothing.\nA reading keeps the shape it was created with. It can't gain a schedule, lose its `usage` or `date_completed`, or be skipped. You can correct its `usage` and `date_completed`.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"workbenchEventid","in":"path","required":true,"description":"The `workbench_eventid` of the event, from `GET /workbench/events/{workbenchItemid}`.","schema":{"type":"integer"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","maxLength":255,"description":"What was done or is to do. It can't be `null` or empty."},"type":{"type":"string","enum":["task","reading"],"description":"`task` for work, `reading` for a measurement of the item. It can't change: a value different from the event's own returns 422."},"date_event":{"type":"integer","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the event happened or is due."},"notes":{"type":"string","maxLength":10000,"description":"Free text."},"usage":{"type":"integer","description":"The item's total usage at the time of the event. It is the running total, not the amount used since the last event."},"usage_unit":{"type":"string","enum":["miles","kilometers","hours","pages","cycles",""],"description":"What `usage` counts. An event with a `usage` needs one."},"cost":{"type":"number","format":"decimal","minimum":0,"maximum":99999999999.999,"multipleOf":0.001,"description":"What the work cost, in `currency`."},"currency":{"type":"string","pattern":"^([A-Z]{3})?$","description":"The ISO 4217 currency code of `cost`, such as `USD`. An unknown code returns 422."},"date_completed":{"type":"integer","description":"UNIX timestamp of when you did it. An empty string clears it and reopens the event."},"date_skipped":{"type":"integer","description":"UNIX timestamp of when you skipped it."},"workbench_item_maintenance_scheduleid":{"type":"integer","nullable":true,"description":"The `workbench_item_maintenance_scheduleid` of one of this item's schedules, from `GET /workbench/schedules/{workbenchItemid}`, to link the event to it. `null` or an empty string unlinks it. A pending event can join only an `active` schedule. Linking a pending event that has no `date_event` sets its due date from the schedule. Don't send it with `triggers`."},"triggers":{"type":"array","description":"The event's schedule triggers, all of them: the list replaces the old one. Creates the schedule if the event has none. A non-empty `title` also renames the schedule. Leave it out to keep the triggers. Don't send it with `workbench_item_maintenance_scheduleid`.","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}}}}}}},"responses":{"200":{"description":"Event updated","content":{"application/json":{"schema":{"type":"object","description":"Something that happened to an item or is due on it: a repair, service\nwork, or a reading. An upcoming occurrence of a repeating task that has\nnot been saved yet is an event too, and its date comes from the task's\ntriggers. An occurrence of a repeating task comes from one of the item's\nown schedules (`workbench_item_maintenance_scheduleid` is set) or from a\nschedule the item inherits from its device's wiki page\n(`wiki_maintenance_scheduleid` is set). A one-off event or a reading has\nneither. An inherited occurrence becomes a copy that belongs to the item\nwhen you complete, skip, or update it.\n","properties":{"workbench_eventid":{"type":["integer","null"],"description":"The ID of the saved event. `null` for an upcoming occurrence that has not been saved yet.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the event belongs to."},"title":{"type":"string","description":"What was done or is due, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value or a cycle count. A reading has a `usage`, is created already completed, and has no schedule. You set `type` when you create the event, and a different `type` on a later update returns 422. An upcoming occurrence is always a `task`.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the event happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or an event saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the event. `null` when there are none."},"usage":{"type":["integer","null"],"description":"The item's total usage when the event happened, in `usage_unit`. It is a running total, not an amount since the last event: an odometer at 75000, a battery at 312 cycles. `null` when not recorded.\n"},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles",null],"description":"The unit of `usage`. It is set whenever `usage` is."},"cost":{"type":["number","null"],"format":"decimal","description":"What the event cost, in `currency`. `null` when not recorded and on an upcoming occurrence that has not been saved yet."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when the event was completed. `null` until then."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when the event was skipped. `null` unless it was. An event is completed or skipped, not both.\n"},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event. `null` on an occurrence that has not been saved yet.\n"},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved. `null` on an occurrence that has not been saved yet.\n"},"workbench_item_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the item's own schedule for this task. `null` for a one-off event and for an occurrence inherited from a wiki page that the item has no copy of yet.\n"},"wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule, set only on an occurrence the item inherits and has no copy of yet. Use it as `{scheduleid}` in `/workbench/events/{workbenchItemid}/schedule/wiki/{scheduleid}`. `null` otherwise.\n"},"triggers":{"type":["array","null"],"items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}},"description":"The triggers of the event's schedule as they are now, not as they were when the event was saved. `null` when the event has no schedule, which makes it a one-off. `[]` when the schedule has no triggers.\n"},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task. It is the guide set on the event's schedule. When there is none, an open task can get the device's public guide for replacing the part it needs, and a task whose title says to replace or change a battery gets the device's public battery guide. `null` when there is no guide.\n"},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for this task. They are the parts of `guide`: only the featured part and any kits when the guide has them, otherwise every part, in the guide's order. It can also hold store parts that fit the owner's device, such as batteries for a battery replacement, so it can hold parts when `guide` is `null`. Empty when there are none.\n"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"Nothing matches what you asked for.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Guide not found"}}}},"422":{"description":"A field isn't valid, or the change conflicts with the schedule or the event's type. The `message` says which.","content":{"application/json":{"schema":{"type":"object","required":["message"],"description":"The body of a 422 on a task or event update. It always has `message`. Reopening an occurrence can also return `code` and `next_task`.","properties":{"message":{"type":"string","description":"Says why the request was rejected."},"code":{"type":"string","enum":["next-occurrence-pending"],"description":"Present only when there is a way past the refusal. `next-occurrence-pending` means you tried to reopen an occurrence while the task's next occurrence already holds the owner's changes (notes, a cost, a reading, an attachment, or a moved date). Finish or skip the task in `next_task` first."},"next_task":{"type":"object","required":["workbench_itemid","taskid","title"],"description":"Sent with `next-occurrence-pending`: the task to finish or skip first.","properties":{"workbench_itemid":{"type":"integer","description":"The ID of the item the task belongs to."},"taskid":{"type":"string","pattern":"^item-schedule:[1-9][0-9]*$","description":"The `taskid` of the task to finish or skip."},"title":{"type":"string","description":"The task's title."}}}}}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"deleteWorkbenchEvent","summary":"Delete an event","description":"Deletes an event. What that does depends on its schedule. The only event of a one-shot schedule (no trigger repeats, and none is a condition) deletes the whole schedule, as `DELETE /workbench/schedules/{workbenchItemid}/{scheduleid}` does. Any other completed event of a schedule is kept as skipped at its completion date, so the schedule keeps its due date. Any other event is deleted, and a repeating schedule with triggers then shows a new pending occurrence.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"workbenchEventid","in":"path","required":true,"description":"The `workbench_eventid` of the event, from `GET /workbench/events/{workbenchItemid}`.","schema":{"type":"integer"}}],"responses":{"204":{"description":"Event deleted (empty response body)"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The event doesn't exist under this item, or you already deleted it.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/workbench/events/{workbenchItemid}/schedule/item/{scheduleid}":{"get":{"operationId":"getItemScheduledEvent","summary":"Get the current event for an item schedule","description":"Returns the pending event of one of the item's schedules: the saved pending event if there is one, otherwise the next occurrence as an upcoming event that hasn't been saved yet. A schedule that isn't `active` has no next occurrence.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"scheduleid","in":"path","required":true,"description":"The `workbench_item_maintenance_scheduleid` of a schedule on this item, from `GET /workbench/schedules/{workbenchItemid}`.","schema":{"type":"integer"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"responses":{"200":{"description":"The pending event, or the next occurrence if none is saved yet","content":{"application/json":{"schema":{"type":"object","description":"Something that happened to an item or is due on it: a repair, service\nwork, or a reading. An upcoming occurrence of a repeating task that has\nnot been saved yet is an event too, and its date comes from the task's\ntriggers. An occurrence of a repeating task comes from one of the item's\nown schedules (`workbench_item_maintenance_scheduleid` is set) or from a\nschedule the item inherits from its device's wiki page\n(`wiki_maintenance_scheduleid` is set). A one-off event or a reading has\nneither. An inherited occurrence becomes a copy that belongs to the item\nwhen you complete, skip, or update it.\n","properties":{"workbench_eventid":{"type":["integer","null"],"description":"The ID of the saved event. `null` for an upcoming occurrence that has not been saved yet.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the event belongs to."},"title":{"type":"string","description":"What was done or is due, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value or a cycle count. A reading has a `usage`, is created already completed, and has no schedule. You set `type` when you create the event, and a different `type` on a later update returns 422. An upcoming occurrence is always a `task`.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the event happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or an event saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the event. `null` when there are none."},"usage":{"type":["integer","null"],"description":"The item's total usage when the event happened, in `usage_unit`. It is a running total, not an amount since the last event: an odometer at 75000, a battery at 312 cycles. `null` when not recorded.\n"},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles",null],"description":"The unit of `usage`. It is set whenever `usage` is."},"cost":{"type":["number","null"],"format":"decimal","description":"What the event cost, in `currency`. `null` when not recorded and on an upcoming occurrence that has not been saved yet."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when the event was completed. `null` until then."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when the event was skipped. `null` unless it was. An event is completed or skipped, not both.\n"},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event. `null` on an occurrence that has not been saved yet.\n"},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved. `null` on an occurrence that has not been saved yet.\n"},"workbench_item_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the item's own schedule for this task. `null` for a one-off event and for an occurrence inherited from a wiki page that the item has no copy of yet.\n"},"wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule, set only on an occurrence the item inherits and has no copy of yet. Use it as `{scheduleid}` in `/workbench/events/{workbenchItemid}/schedule/wiki/{scheduleid}`. `null` otherwise.\n"},"triggers":{"type":["array","null"],"items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}},"description":"The triggers of the event's schedule as they are now, not as they were when the event was saved. `null` when the event has no schedule, which makes it a one-off. `[]` when the schedule has no triggers.\n"},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task. It is the guide set on the event's schedule. When there is none, an open task can get the device's public guide for replacing the part it needs, and a task whose title says to replace or change a battery gets the device's public battery guide. `null` when there is no guide.\n"},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for this task. They are the parts of `guide`: only the featured part and any kits when the guide has them, otherwise every part, in the guide's order. It can also hold store parts that fit the owner's device, such as batteries for a battery replacement, so it can hold parts when `guide` is `null`. Empty when there are none.\n"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The schedule doesn't exist, was deleted, or belongs to another item. It also returns 404 when there is no pending event and the schedule isn't `active` or has no triggers.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"account"},"patch":{"operationId":"updateItemScheduledEvent","summary":"Update an item schedule's pending event","description":"Changes the pending event of one of the item's schedules, which is how you complete or skip a repeating task from its schedule. To mark it done, send only `date_completed`. If no pending event is saved yet and the schedule is `active`, one is created first with the schedule's task name and next due date; `title` and `date_event` in your request replace those, and a new `title` also renames the schedule. The event stays on this schedule. To move it to another schedule, use `PATCH /workbench/events/{workbenchItemid}/{workbenchEventid}`.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"scheduleid","in":"path","required":true,"description":"The `workbench_item_maintenance_scheduleid` of a schedule on this item, from `GET /workbench/schedules/{workbenchItemid}`.","schema":{"type":"integer"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","description":"The body to update a repeating task's current occurrence, or to create it if it is not saved yet, with `PATCH /workbench/events/{workbenchItemid}/schedule/item/{scheduleid}` or the same path ending `schedule/wiki/{scheduleid}`. To mark the occurrence done, send only `date_completed`. Fields you leave out stay the same, and `null` or an empty string clears a field that can be `null`. Don't send `date_completed` and `date_skipped` together. Sending `triggers` changes the schedule's triggers and the occurrence together.","properties":{"title":{"type":"string","maxLength":255,"description":"What to do. It can't be `null` or empty. A new title also renames the schedule, so later occurrences carry it.\n"},"date_event":{"type":["integer","null"],"minimum":1,"description":"UNIX timestamp of when the occurrence is due."},"notes":{"type":["string","null"],"maxLength":10000,"description":"The owner's notes on the occurrence."},"usage":{"type":["integer","null"],"minimum":1,"description":"The item's total usage when the occurrence happened, in `usage_unit`. Send `usage_unit` with it."},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles","",null],"description":"The unit of `usage`. `''` and `null` mean no unit. Required when you send `usage`."},"cost":{"type":["number","null"],"format":"decimal","minimum":0,"maximum":99999999999.999,"multipleOf":0.001,"description":"What the occurrence cost, in `currency`."},"currency":{"type":"string","pattern":"^([A-Z]{3})?$","description":"The ISO 4217 currency code of `cost`, such as `EUR`. An unknown code returns 422. The current currency stays if you don't send it, and it can't be cleared."},"date_completed":{"type":["integer","null"],"minimum":1,"description":"UNIX timestamp of when you did the task. Sending it completes the occurrence."},"date_skipped":{"type":["integer","null"],"minimum":1,"description":"UNIX timestamp of when you skipped the occurrence. Sending it skips the occurrence."},"triggers":{"type":"array","description":"The schedule's new triggers. They replace the existing ones instead of adding to them. On the wiki endpoint the item first gets its own copy of the schedule. Leave it out to keep the triggers. Send `[]` to clear them: the schedule stays, but it brings back no later occurrence.\n","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}}}}}}},"responses":{"200":{"description":"Event updated or created","content":{"application/json":{"schema":{"type":"object","description":"Something that happened to an item or is due on it: a repair, service\nwork, or a reading. An upcoming occurrence of a repeating task that has\nnot been saved yet is an event too, and its date comes from the task's\ntriggers. An occurrence of a repeating task comes from one of the item's\nown schedules (`workbench_item_maintenance_scheduleid` is set) or from a\nschedule the item inherits from its device's wiki page\n(`wiki_maintenance_scheduleid` is set). A one-off event or a reading has\nneither. An inherited occurrence becomes a copy that belongs to the item\nwhen you complete, skip, or update it.\n","properties":{"workbench_eventid":{"type":["integer","null"],"description":"The ID of the saved event. `null` for an upcoming occurrence that has not been saved yet.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the event belongs to."},"title":{"type":"string","description":"What was done or is due, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value or a cycle count. A reading has a `usage`, is created already completed, and has no schedule. You set `type` when you create the event, and a different `type` on a later update returns 422. An upcoming occurrence is always a `task`.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the event happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or an event saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the event. `null` when there are none."},"usage":{"type":["integer","null"],"description":"The item's total usage when the event happened, in `usage_unit`. It is a running total, not an amount since the last event: an odometer at 75000, a battery at 312 cycles. `null` when not recorded.\n"},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles",null],"description":"The unit of `usage`. It is set whenever `usage` is."},"cost":{"type":["number","null"],"format":"decimal","description":"What the event cost, in `currency`. `null` when not recorded and on an upcoming occurrence that has not been saved yet."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when the event was completed. `null` until then."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when the event was skipped. `null` unless it was. An event is completed or skipped, not both.\n"},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event. `null` on an occurrence that has not been saved yet.\n"},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved. `null` on an occurrence that has not been saved yet.\n"},"workbench_item_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the item's own schedule for this task. `null` for a one-off event and for an occurrence inherited from a wiki page that the item has no copy of yet.\n"},"wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule, set only on an occurrence the item inherits and has no copy of yet. Use it as `{scheduleid}` in `/workbench/events/{workbenchItemid}/schedule/wiki/{scheduleid}`. `null` otherwise.\n"},"triggers":{"type":["array","null"],"items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}},"description":"The triggers of the event's schedule as they are now, not as they were when the event was saved. `null` when the event has no schedule, which makes it a one-off. `[]` when the schedule has no triggers.\n"},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task. It is the guide set on the event's schedule. When there is none, an open task can get the device's public guide for replacing the part it needs, and a task whose title says to replace or change a battery gets the device's public battery guide. `null` when there is no guide.\n"},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for this task. They are the parts of `guide`: only the featured part and any kits when the guide has them, otherwise every part, in the guide's order. It can also hold store parts that fit the owner's device, such as batteries for a battery replacement, so it can hold parts when `guide` is `null`. Empty when there are none.\n"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The schedule doesn't exist or belongs to another item. It also returns 404 when there is no pending event and the schedule isn't `active`.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"422":{"description":"`date_completed` and `date_skipped` were both sent, `title` is `null` or empty, or a field isn't valid."}},"x-api-usage-kind":"write"}},"/workbench/events/{workbenchItemid}/schedule/wiki/{scheduleid}":{"get":{"operationId":"getWikiScheduledEvent","summary":"Get the current event for a wiki schedule","description":"Returns the pending event of a schedule the item inherits from its device's page. If the item has its own active copy of the schedule, you get the copy's pending event, or its next occurrence, with `workbench_item_maintenance_scheduleid` set. If the copy is muted, archived, done or deleted, the task was dismissed and the request returns 404. With no copy, you get the next occurrence as an upcoming event that hasn't been saved yet, with `wiki_maintenance_scheduleid` set. Reading doesn't create a copy.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"scheduleid","in":"path","required":true,"description":"The `wiki_maintenance_scheduleid` of a schedule the item inherits, from `GET /workbench/events/{workbenchItemid}`.","schema":{"type":"integer"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"responses":{"200":{"description":"The pending event, or the next occurrence if none is saved yet","content":{"application/json":{"schema":{"type":"object","description":"Something that happened to an item or is due on it: a repair, service\nwork, or a reading. An upcoming occurrence of a repeating task that has\nnot been saved yet is an event too, and its date comes from the task's\ntriggers. An occurrence of a repeating task comes from one of the item's\nown schedules (`workbench_item_maintenance_scheduleid` is set) or from a\nschedule the item inherits from its device's wiki page\n(`wiki_maintenance_scheduleid` is set). A one-off event or a reading has\nneither. An inherited occurrence becomes a copy that belongs to the item\nwhen you complete, skip, or update it.\n","properties":{"workbench_eventid":{"type":["integer","null"],"description":"The ID of the saved event. `null` for an upcoming occurrence that has not been saved yet.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the event belongs to."},"title":{"type":"string","description":"What was done or is due, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value or a cycle count. A reading has a `usage`, is created already completed, and has no schedule. You set `type` when you create the event, and a different `type` on a later update returns 422. An upcoming occurrence is always a `task`.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the event happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or an event saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the event. `null` when there are none."},"usage":{"type":["integer","null"],"description":"The item's total usage when the event happened, in `usage_unit`. It is a running total, not an amount since the last event: an odometer at 75000, a battery at 312 cycles. `null` when not recorded.\n"},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles",null],"description":"The unit of `usage`. It is set whenever `usage` is."},"cost":{"type":["number","null"],"format":"decimal","description":"What the event cost, in `currency`. `null` when not recorded and on an upcoming occurrence that has not been saved yet."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when the event was completed. `null` until then."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when the event was skipped. `null` unless it was. An event is completed or skipped, not both.\n"},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event. `null` on an occurrence that has not been saved yet.\n"},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved. `null` on an occurrence that has not been saved yet.\n"},"workbench_item_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the item's own schedule for this task. `null` for a one-off event and for an occurrence inherited from a wiki page that the item has no copy of yet.\n"},"wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule, set only on an occurrence the item inherits and has no copy of yet. Use it as `{scheduleid}` in `/workbench/events/{workbenchItemid}/schedule/wiki/{scheduleid}`. `null` otherwise.\n"},"triggers":{"type":["array","null"],"items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}},"description":"The triggers of the event's schedule as they are now, not as they were when the event was saved. `null` when the event has no schedule, which makes it a one-off. `[]` when the schedule has no triggers.\n"},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task. It is the guide set on the event's schedule. When there is none, an open task can get the device's public guide for replacing the part it needs, and a task whose title says to replace or change a battery gets the device's public battery guide. `null` when there is no guide.\n"},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for this task. They are the parts of `guide`: only the featured part and any kits when the guide has them, otherwise every part, in the guide's order. It can also hold store parts that fit the owner's device, such as batteries for a battery replacement, so it can hold parts when `guide` is `null`. Empty when there are none.\n"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The item has no device page, the schedule isn't one the item inherits, or the task was dismissed.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"account"},"patch":{"operationId":"updateWikiScheduledEvent","summary":"Update a wiki schedule's pending event","description":"Changes the pending event of a schedule the item inherits from its device's page. It works like `PATCH /workbench/events/{workbenchItemid}/schedule/item/{scheduleid}`, except that it first creates the item's own copy of the schedule if there isn't one. The response holds the copy's `workbench_item_maintenance_scheduleid`.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"scheduleid","in":"path","required":true,"description":"The `wiki_maintenance_scheduleid` of a schedule the item inherits, from `GET /workbench/events/{workbenchItemid}`.","schema":{"type":"integer"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `guide` and `guide_parts`."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","description":"The body to update a repeating task's current occurrence, or to create it if it is not saved yet, with `PATCH /workbench/events/{workbenchItemid}/schedule/item/{scheduleid}` or the same path ending `schedule/wiki/{scheduleid}`. To mark the occurrence done, send only `date_completed`. Fields you leave out stay the same, and `null` or an empty string clears a field that can be `null`. Don't send `date_completed` and `date_skipped` together. Sending `triggers` changes the schedule's triggers and the occurrence together.","properties":{"title":{"type":"string","maxLength":255,"description":"What to do. It can't be `null` or empty. A new title also renames the schedule, so later occurrences carry it.\n"},"date_event":{"type":["integer","null"],"minimum":1,"description":"UNIX timestamp of when the occurrence is due."},"notes":{"type":["string","null"],"maxLength":10000,"description":"The owner's notes on the occurrence."},"usage":{"type":["integer","null"],"minimum":1,"description":"The item's total usage when the occurrence happened, in `usage_unit`. Send `usage_unit` with it."},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles","",null],"description":"The unit of `usage`. `''` and `null` mean no unit. Required when you send `usage`."},"cost":{"type":["number","null"],"format":"decimal","minimum":0,"maximum":99999999999.999,"multipleOf":0.001,"description":"What the occurrence cost, in `currency`."},"currency":{"type":"string","pattern":"^([A-Z]{3})?$","description":"The ISO 4217 currency code of `cost`, such as `EUR`. An unknown code returns 422. The current currency stays if you don't send it, and it can't be cleared."},"date_completed":{"type":["integer","null"],"minimum":1,"description":"UNIX timestamp of when you did the task. Sending it completes the occurrence."},"date_skipped":{"type":["integer","null"],"minimum":1,"description":"UNIX timestamp of when you skipped the occurrence. Sending it skips the occurrence."},"triggers":{"type":"array","description":"The schedule's new triggers. They replace the existing ones instead of adding to them. On the wiki endpoint the item first gets its own copy of the schedule. Leave it out to keep the triggers. Send `[]` to clear them: the schedule stays, but it brings back no later occurrence.\n","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}}}}}}},"responses":{"200":{"description":"Event updated or created","content":{"application/json":{"schema":{"type":"object","description":"Something that happened to an item or is due on it: a repair, service\nwork, or a reading. An upcoming occurrence of a repeating task that has\nnot been saved yet is an event too, and its date comes from the task's\ntriggers. An occurrence of a repeating task comes from one of the item's\nown schedules (`workbench_item_maintenance_scheduleid` is set) or from a\nschedule the item inherits from its device's wiki page\n(`wiki_maintenance_scheduleid` is set). A one-off event or a reading has\nneither. An inherited occurrence becomes a copy that belongs to the item\nwhen you complete, skip, or update it.\n","properties":{"workbench_eventid":{"type":["integer","null"],"description":"The ID of the saved event. `null` for an upcoming occurrence that has not been saved yet.\n"},"workbench_itemid":{"type":"integer","description":"The ID of the item the event belongs to."},"title":{"type":"string","description":"What was done or is due, in the request language when the task comes from a device's wiki page and has a translation.\n"},"type":{"type":"string","enum":["task","reading"],"description":"`task` is maintenance or service work. `reading` is a measurement of the item, such as an odometer value or a cycle count. A reading has a `usage`, is created already completed, and has no schedule. You set `type` when you create the event, and a different `type` on a later update returns 422. An upcoming occurrence is always a `task`.\n"},"date_event":{"type":["integer","null"],"description":"UNIX timestamp of when the event happened, is scheduled, or is next due. `null` when it has no date: a repeating task that has only `usage` or `condition` triggers, or an event saved without one.\n"},"notes":{"type":["string","null"],"description":"The owner's notes on the event. `null` when there are none."},"usage":{"type":["integer","null"],"description":"The item's total usage when the event happened, in `usage_unit`. It is a running total, not an amount since the last event: an odometer at 75000, a battery at 312 cycles. `null` when not recorded.\n"},"usage_unit":{"type":["string","null"],"enum":["miles","kilometers","hours","pages","cycles",null],"description":"The unit of `usage`. It is set whenever `usage` is."},"cost":{"type":["number","null"],"format":"decimal","description":"What the event cost, in `currency`. `null` when not recorded and on an upcoming occurrence that has not been saved yet."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","default":"USD","description":"The ISO 4217 currency code of `cost`, such as `EUR`. It is `USD` on an occurrence that has not been saved yet."},"date_completed":{"type":["integer","null"],"description":"UNIX timestamp of when the event was completed. `null` until then."},"date_skipped":{"type":["integer","null"],"description":"UNIX timestamp of when the event was skipped. `null` unless it was. An event is completed or skipped, not both.\n"},"created_by_userid":{"type":["integer","null"],"description":"The ID of the account that saved the event. `null` on an occurrence that has not been saved yet.\n"},"date_created":{"type":["integer","null"],"description":"UNIX timestamp of when the event was saved. `null` on an occurrence that has not been saved yet.\n"},"workbench_item_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the item's own schedule for this task. `null` for a one-off event and for an occurrence inherited from a wiki page that the item has no copy of yet.\n"},"wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule, set only on an occurrence the item inherits and has no copy of yet. Use it as `{scheduleid}` in `/workbench/events/{workbenchItemid}/schedule/wiki/{scheduleid}`. `null` otherwise.\n"},"triggers":{"type":["array","null"],"items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}},"description":"The triggers of the event's schedule as they are now, not as they were when the event was saved. `null` when the event has no schedule, which makes it a one-off. `[]` when the schedule has no triggers.\n"},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task. It is the guide set on the event's schedule. When there is none, an open task can get the device's public guide for replacing the part it needs, and a task whose title says to replace or change a battery gets the device's public battery guide. `null` when there is no guide.\n"},"guide":{"oneOf":[{"type":"object","description":"The short form of a guide, used in lists. `time_required_max` is here, but `time_required` and `time_required_min` are only in the full guide.","properties":{"dataType":{"type":"string","const":"guide","description":"Always `guide`."},"guideid":{"type":"integer","description":"The guide's ID."},"locale":{"type":"string","description":"Language code of this version of the guide. If the guide isn't translated into the language asked for, this is the language it was written in."},"revisionid":{"type":"integer","description":"Changes whenever the guide's details or text in this language change. Send it as `revisionid` when you update, delete, make public or private, or reorder the steps of the guide, using the version in the guide's original language. For a translation, send the `revisionid` from the response to your last save to `PATCH /guides/{guideid}/{langid}`. Steps have their own `revisionid`. If the guide has changed since, the request returns 409."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of the guide's latest edit in this language."},"prereq_modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the latest edit among the guide's prerequisites; 0 when it has none."},"url":{"type":"string","format":"uri","description":"URL of the guide's page."},"type":{"type":"string","description":"The kind of guide. `replacement` swaps out a component. `installation` adds one. `repair` fixes a specific problem. `disassembly` takes the device apart. `teardown` takes it apart to look inside, and isn't meant for repair. `technique` explains how to do something, like use a tool or calibrate a part. `maintenance` covers routine upkeep. `how-to` is any other set of instructions.","enum":["replacement","installation","repair","disassembly","teardown","technique","maintenance","how-to"]},"category":{"type":"string","description":"Title of the category the guide belongs to."},"subject":{"type":"string","description":"Free text naming the part or thing the guide works on, such as `Battery`. An empty string when the guide has none."},"title":{"type":"string","description":"The guide's full title."},"summary":{"type":"string","description":"A short excerpt from the start of the guide's introduction, about 50 characters long. It isn't the `summary` you send when you create or update a guide."},"difficulty":{"oneOf":[{"type":"string","description":"How hard the guide is, from easiest to hardest in the order listed. `Very easy` doesn't need the device opened. `Easy` needs minimal disassembly with basic tools. `Moderate` needs so much disassembly that most people would want instructions. `Difficult` needs significant disassembly and may need specialized tasks like soldering. `Very difficult` is quite challenging, may need specialized tools, and could risk damage to the device. Requests accept only the English values listed here, even when you ask for responses in another language.","enum":["Very easy","Easy","Moderate","Difficult","Very difficult"]},{"type":"null"}],"description":"How hard the guide is. `null` when the guide has no difficulty."},"time_required_max":{"type":"integer","description":"The longest the guide takes, in seconds."},"public":{"type":"boolean","description":"`false` for a private guide, which only people with access can see."},"userid":{"type":"integer","description":"ID of the guide's author."},"username":{"type":"string","description":"Username of the guide's author."},"flags":{"type":"array","description":"The `flagid`s of the flags on the guide. `GET /guides/{guideid}` returns each flag as an object instead.","items":{"type":"string"}},"image":{"oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}],"description":"The guide's main image; `null` when it has none."}}},{"type":"null"}],"description":"The guide `guideid` names, in the request language, or in the guide's own language when it has no translation. `null` when `guideid` is `null` and when you can't view the guide.\n"},"guide_parts":{"type":"array","items":{"type":"object","description":"A part to buy for a task, linked to where it is sold.","required":["name","url","thumbnail","quantity","optional"],"properties":{"name":{"type":"string","description":"The part's name, in the store's language when iFixit sells it."},"url":{"type":"string","description":"Where to buy the part: the store product page when iFixit sells it, otherwise the outside supplier's link when the part has one, otherwise the part's Item wiki page.\n"},"thumbnail":{"type":["string","null"],"description":"URL of a small image of the part. `null` when it has none."},"quantity":{"type":"number","description":"How many of the part are needed."},"optional":{"type":"boolean","description":"Whether the guide marks the part optional."}}},"description":"The parts to buy for this task. They are the parts of `guide`: only the featured part and any kits when the guide has them, otherwise every part, in the guide's order. It can also hold store parts that fit the owner's device, such as batteries for a battery replacement, so it can hold parts when `guide` is `null`. Empty when there are none.\n"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The item has no device page, the schedule isn't one the item inherits, or the task was dismissed. Changing the event doesn't bring a dismissed task back.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"422":{"description":"`date_completed` and `date_skipped` were both sent, or a field isn't valid."}},"x-api-usage-kind":"write"}},"/workbench/schedules/{workbenchItemid}":{"get":{"operationId":"listMaintenanceSchedules","summary":"List maintenance schedules for a workbench item","description":"Returns the item's own schedules, of every status, lowest `workbench_item_maintenance_scheduleid` first. These are the schedules made on the item and the copies it made of device schedules. A device schedule the item hasn't copied appears only as an upcoming event in the `GET /workbench/events` and `GET /workbench/events/{workbenchItemid}`. The list isn't paged.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `task`."}],"responses":{"200":{"description":"List of schedules","content":{"application/json":{"schema":{"type":"object","description":"Holds a `schedules` array: the item's own schedules of every status, oldest first.","properties":{"schedules":{"type":"array","description":"The item's schedules, oldest first.","items":{"type":"object","description":"A repeating task on an item: a name and the triggers that say when it is due. You create it on the item, or the item gets it as a copy of a schedule on its device's wiki page (`source_wiki_maintenance_scheduleid` names the original).","properties":{"workbench_item_maintenance_scheduleid":{"type":"integer","description":"The ID of the schedule."},"workbench_itemid":{"type":"integer","description":"The ID of the item the schedule belongs to."},"task":{"type":"string","description":"The name of the task, such as \"Replace air filter\". It becomes the `title` of each occurrence."},"status":{"type":"string","enum":["active","muted","archived","done"],"description":"Only an `active` schedule has upcoming occurrences. A `muted`, `archived`, or `done` schedule is kept but brings back none, and the three act the same: pick the one that says why you stopped the task."},"source_wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule this one was copied from, which is the `wiki_maintenance_scheduleid` of the inherited occurrence. `null` for a schedule you created on the item.\n"},"triggers":{"type":"array","description":"The triggers that say when the task is due. The task is due when\nthe first of them fires. Sending `triggers` on an update replaces\nall the existing triggers instead of adding to them.\n","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task, as in the guides API. `null` when none is set.\n"},"parts":{"type":["array","null"],"description":"The parts the task needs. Each item is an object with a `name` string. `null` when none are set.\n","items":{"type":"object","properties":{"name":{"type":"string","description":"The part's name."}}}},"date_created":{"type":"integer","description":"UNIX timestamp of when the schedule was created. A `time` trigger with no `first_due_at` counts its first occurrence from here."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}}},"x-api-usage-kind":"account"},"post":{"operationId":"createMaintenanceSchedule","summary":"Create a maintenance schedule","description":"Creates a schedule on an item. A schedule is the repeating part of a repeating task. `POST /workbench/items/{workbenchItemid}/tasks` with `recurrence` makes one too; use this operation to also set the guide, parts, or status. The smallest request is `{\"task\": \"Change oil\"}`, which never produces an event until it has `triggers`.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `task`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["task"],"properties":{"task":{"type":"string","maxLength":1024,"description":"What to do, such as \"Change oil\"."},"triggers":{"type":"array","description":"When the task is due. The date of the next occurrence comes from the earliest `time` trigger. Other triggers, such as 5000 miles, are stored for your app to check.","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}},"status":{"type":"string","enum":["active","muted","archived","done"],"default":"active","description":"Only an `active` schedule has upcoming occurrences. `muted`, `archived` and `done` have none and act the same, so pick the one that says why you stopped the task."},"source_wiki_maintenance_scheduleid":{"type":"integer","description":"The `wiki_maintenance_scheduleid` of the device schedule this one is a copy of, from `GET /workbench/events/{workbenchItemid}`. It must exist, or the request returns 422. If the item already has a copy of it, that copy is returned with only `status` applied."},"guideid":{"type":"integer","description":"The `guideid` of a guide that shows how to do the task. It must exist, or the request returns 422."},"parts":{"type":"array","description":"The parts the task needs. Each part is an object with a required `name`, and an optional `part_category`: the code of an iFixit store category, 1 to 40 lowercase letters, digits, or underscores, such as `filters` or `batteries`. A part with a category links to a matching store product for the item's device when there is one.","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The part's name."}}}}}}}}},"responses":{"201":{"description":"Schedule created","content":{"application/json":{"schema":{"type":"object","description":"A repeating task on an item: a name and the triggers that say when it is due. You create it on the item, or the item gets it as a copy of a schedule on its device's wiki page (`source_wiki_maintenance_scheduleid` names the original).","properties":{"workbench_item_maintenance_scheduleid":{"type":"integer","description":"The ID of the schedule."},"workbench_itemid":{"type":"integer","description":"The ID of the item the schedule belongs to."},"task":{"type":"string","description":"The name of the task, such as \"Replace air filter\". It becomes the `title` of each occurrence."},"status":{"type":"string","enum":["active","muted","archived","done"],"description":"Only an `active` schedule has upcoming occurrences. A `muted`, `archived`, or `done` schedule is kept but brings back none, and the three act the same: pick the one that says why you stopped the task."},"source_wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule this one was copied from, which is the `wiki_maintenance_scheduleid` of the inherited occurrence. `null` for a schedule you created on the item.\n"},"triggers":{"type":"array","description":"The triggers that say when the task is due. The task is due when\nthe first of them fires. Sending `triggers` on an update replaces\nall the existing triggers instead of adding to them.\n","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task, as in the guides API. `null` when none is set.\n"},"parts":{"type":["array","null"],"description":"The parts the task needs. Each item is an object with a `name` string. `null` when none are set.\n","items":{"type":"object","properties":{"name":{"type":"string","description":"The part's name."}}}},"date_created":{"type":"integer","description":"UNIX timestamp of when the schedule was created. A `time` trigger with no `first_due_at` counts its first occurrence from here."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"422":{"description":"`task` is missing, `source_wiki_maintenance_scheduleid` or `guideid` doesn't exist, or a trigger isn't valid. The `message` says which."}},"x-api-usage-kind":"write"}},"/workbench/schedules/{workbenchItemid}/{scheduleid}":{"get":{"operationId":"getMaintenanceSchedule","summary":"Get a maintenance schedule","description":"Returns one schedule with its current triggers.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"scheduleid","in":"path","required":true,"description":"The `workbench_item_maintenance_scheduleid` of a schedule on this item, from `GET /workbench/schedules/{workbenchItemid}`.","schema":{"type":"integer"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `task`."}],"responses":{"200":{"description":"Schedule details","content":{"application/json":{"schema":{"type":"object","description":"A repeating task on an item: a name and the triggers that say when it is due. You create it on the item, or the item gets it as a copy of a schedule on its device's wiki page (`source_wiki_maintenance_scheduleid` names the original).","properties":{"workbench_item_maintenance_scheduleid":{"type":"integer","description":"The ID of the schedule."},"workbench_itemid":{"type":"integer","description":"The ID of the item the schedule belongs to."},"task":{"type":"string","description":"The name of the task, such as \"Replace air filter\". It becomes the `title` of each occurrence."},"status":{"type":"string","enum":["active","muted","archived","done"],"description":"Only an `active` schedule has upcoming occurrences. A `muted`, `archived`, or `done` schedule is kept but brings back none, and the three act the same: pick the one that says why you stopped the task."},"source_wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule this one was copied from, which is the `wiki_maintenance_scheduleid` of the inherited occurrence. `null` for a schedule you created on the item.\n"},"triggers":{"type":"array","description":"The triggers that say when the task is due. The task is due when\nthe first of them fires. Sending `triggers` on an update replaces\nall the existing triggers instead of adding to them.\n","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task, as in the guides API. `null` when none is set.\n"},"parts":{"type":["array","null"],"description":"The parts the task needs. Each item is an object with a `name` string. `null` when none are set.\n","items":{"type":"object","properties":{"name":{"type":"string","description":"The part's name."}}}},"date_created":{"type":"integer","description":"UNIX timestamp of when the schedule was created. A `time` trigger with no `first_due_at` counts its first occurrence from here."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The schedule doesn't exist, belongs to another item, or was deleted.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"account"},"patch":{"operationId":"updateMaintenanceSchedule","summary":"Update a maintenance schedule","description":"Changes a schedule. Send only the fields to change. Setting `status` back to `active` works out the next occurrence from scratch, without the date, notes or attachments of the one that was pending before.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"scheduleid","in":"path","required":true,"description":"The `workbench_item_maintenance_scheduleid` of a schedule on this item, from `GET /workbench/schedules/{workbenchItemid}`.","schema":{"type":"integer"}},{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for `task`."}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"task":{"type":"string","maxLength":1024,"description":"What to do. It can't be empty."},"triggers":{"type":"array","description":"All the schedule's triggers: the list replaces the old ones, and each new trigger replaces the old one completely. Send every field you want kept, including `first_due_at`. Leave it out to keep the triggers.","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}},"status":{"type":"string","enum":["active","muted","archived","done"],"description":"Only an `active` schedule has upcoming occurrences. The other three act the same, so pick the one that says why you stopped the task."},"guideid":{"type":"integer","description":"The `guideid` of a guide that shows how to do the task. It must exist, or the request returns 422."},"parts":{"description":"The parts the task needs. The list replaces the old one. Each part is an object with a required `name`, and an optional `part_category`: the code of an iFixit store category, 1 to 40 lowercase letters, digits, or underscores, such as `filters` or `batteries`. A part with a category links to a matching store product for the item's device when there is one."}}}}}},"responses":{"200":{"description":"Schedule updated","content":{"application/json":{"schema":{"type":"object","description":"A repeating task on an item: a name and the triggers that say when it is due. You create it on the item, or the item gets it as a copy of a schedule on its device's wiki page (`source_wiki_maintenance_scheduleid` names the original).","properties":{"workbench_item_maintenance_scheduleid":{"type":"integer","description":"The ID of the schedule."},"workbench_itemid":{"type":"integer","description":"The ID of the item the schedule belongs to."},"task":{"type":"string","description":"The name of the task, such as \"Replace air filter\". It becomes the `title` of each occurrence."},"status":{"type":"string","enum":["active","muted","archived","done"],"description":"Only an `active` schedule has upcoming occurrences. A `muted`, `archived`, or `done` schedule is kept but brings back none, and the three act the same: pick the one that says why you stopped the task."},"source_wiki_maintenance_scheduleid":{"type":["integer","null"],"description":"The ID of the wiki page's schedule this one was copied from, which is the `wiki_maintenance_scheduleid` of the inherited occurrence. `null` for a schedule you created on the item.\n"},"triggers":{"type":"array","description":"The triggers that say when the task is due. The task is due when\nthe first of them fires. Sending `triggers` on an update replaces\nall the existing triggers instead of adding to them.\n","items":{"type":"object","description":"Says when a repeating task is due. A task can have several triggers,\nand it is due when the first of them fires. Only a `time` trigger gives\nthe task a date (`date_event`). A `usage` or `condition` trigger leaves\nthe date empty.\n","required":["trigger_type","metric","unit"],"properties":{"trigger_type":{"type":"string","enum":["usage","time","condition"],"description":"What the trigger measures:\n- `usage`: how much the item has been used (miles, kilometers,\n  hours, pages, or cycles)\n- `time`: calendar time since the last occurrence\n- `condition`: a metric reaching a threshold, such as oil life\n"},"metric":{"type":"string","description":"What is measured. The value depends on `trigger_type`, and any\nother value returns 422:\n- `usage` triggers: `usage`\n- `time` triggers: `elapsed_time`\n- `condition` triggers: one of `battery_cycle_count`,\n  `battery_health_percent`, `belt_wear`, `brake_pad_thickness_mm`,\n  `controller_runtime_hours`, `coolant_ph`, `filter_life_percent`,\n  `filter_pressure_drop`, `oil_life`, `oil_life_percent`,\n  `temperature_celsius`, `tire_tread_depth_mm`, `visible_wear`,\n  `water_hardness`\n\n`oil_life` is measured in hours and `oil_life_percent` as a\npercentage, so send `hours` with the first and `%` or `percent` with\nthe second.\n"},"unit":{"type":"string","description":"The unit of the trigger's numbers. `unit` follows `trigger_type`; any value not listed for it returns 422. `usage` accepts `miles`, `kilometers`, `hours`, `pages`, `cycles`; `time` accepts `days`, `weeks`, `months`, `years`. `condition` accepts `%`, `percent`, `score`, `hours`, `miles`, `kilometers`, `mm`, `psi`, `volts`, `celsius`, `fahrenheit`, `ph`, `count`, with any `metric`. Send the one that matches the metric, such as `percent` for `filter_life_percent` and `mm` for `brake_pad_thickness_mm`. `km` is rejected: send `kilometers`. `score` is a plain number: use the same scale for every threshold and reading of that metric."},"first_due_at":{"type":["integer","null"],"description":"**Time triggers only.** UNIX timestamp of the first occurrence, for \"first on this date, then every N units\". Optional. If you don't send it, the first occurrence falls one `repeat_interval` after the schedule was created. It no longer applies once an occurrence has been completed or skipped. Send it as midnight UTC of the day you mean. Always `null` on `usage` and `condition` triggers, and sending a value there returns 422.\n"},"first_interval":{"type":["number","null"],"description":"**Usage triggers only.** The usage at which the first occurrence is due, in the trigger's `unit`, for \"first at N, then every M\". It no longer applies once an occurrence has been completed or skipped. Always `null` on `time` and `condition` triggers, and sending a value there returns 422.\n"},"repeat_interval":{"type":["number","null"],"description":"How far apart later occurrences are, in the trigger's `unit`. It must be greater than 0. A `time` trigger needs it or `first_due_at`. A `usage` trigger needs it or `first_interval`. A trigger with neither returns 422. If you don't send it, the trigger brings back no later occurrence. For `months` and `years` it must be a whole number, so use `days` or `weeks` for anything shorter. A `time` trigger counts the next date from the last due date if you finish within a quarter of the interval of it, and at most 45 days (3 days for a 2-week interval, 45 for 6 months). If you finish later or earlier than that, it counts from the day you finished. Month and year math runs in UTC.\n"},"comparator":{"type":["string","null"],"description":"How to compare the metric with `threshold`: `<=` (at or below), `>=` (at or above), or `==` (equal). Required on `condition` triggers."},"threshold":{"type":["number","null"],"description":"The value to compare the metric against. Required on `condition` triggers.","example":15}}}},"guideid":{"type":["integer","null"],"description":"The ID of the guide that covers this task, as in the guides API. `null` when none is set.\n"},"parts":{"type":["array","null"],"description":"The parts the task needs. Each item is an object with a `name` string. `null` when none are set.\n","items":{"type":"object","properties":{"name":{"type":"string","description":"The part's name."}}}},"date_created":{"type":"integer","description":"UNIX timestamp of when the schedule was created. A `time` trigger with no `first_due_at` counts its first occurrence from here."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The schedule doesn't exist, belongs to another item, or was deleted.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"422":{"description":"`task` isn't text, `guideid` doesn't exist, or a field isn't valid. The `message` says which.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"},"delete":{"operationId":"deleteMaintenanceSchedule","summary":"Delete a maintenance schedule","description":"Deletes a schedule and its triggers, and removes its pending occurrence. Completed and skipped events stay, except that a one-shot schedule (no trigger repeats, and none is a condition) with a single event deletes that event too. If the schedule is the item's copy of a device schedule, the device's task is dismissed.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"scheduleid","in":"path","required":true,"description":"The `workbench_item_maintenance_scheduleid` of a schedule on this item, from `GET /workbench/schedules/{workbenchItemid}`.","schema":{"type":"integer"}}],"responses":{"204":{"description":"Schedule deleted (empty response body)"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The schedule doesn't exist, belongs to another item, or was already deleted.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/workbench/item-attachments/{workbenchItemid}":{"get":{"operationId":"listItemAttachments","summary":"List attachments for a workbench item","description":"Returns the attachments on an item, lowest `workbench_item_attachmentid` first. The list isn't paged.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"include","in":"query","required":false,"schema":{"type":"string","enum":["media"]},"description":"Send `media` to include each attachment's image and document details, so you don't need a request for each one."}],"responses":{"200":{"description":"List of attachments","content":{"application/json":{"schema":{"type":"object","description":"Holds an `attachments` array. `image` and `document` are present only with `include=media`.","properties":{"attachments":{"type":"array","description":"The item's attachments.","items":{"description":"An item attachment with the image or document details included, which `include=media` adds. `image` and `document` are each `null` when the attachment is of another type or you can't view the media. A video attachment has only its `objectid`; `image` and `document` are both `null`. If you don't send the parameter, both properties are absent.","allOf":[{"type":"object","description":"An image, document, or video attached to an item. Exactly one of `imageid`, `documentid`, or `objectid` is set, and the other two are `null`.","properties":{"workbench_item_attachmentid":{"type":"integer","description":"The ID of the attachment. Use it to remove the attachment."},"workbench_itemid":{"type":"integer","description":"The ID of the item the attachment belongs to."},"imageid":{"type":["integer","null"],"description":"The ID of the attached image, or `null`."},"documentid":{"type":["integer","null"],"description":"The ID of the attached document, or `null`."},"objectid":{"type":["integer","null"],"description":"The ID of the attached video, or `null`."},"date_created":{"type":"integer","description":"UNIX timestamp of when the media was attached."}}},{"type":"object","properties":{"image":{"description":"The attached image's details, or `null` when the attachment isn't an image or you can't view it.","oneOf":[{"type":"object","description":"An image's URLs together with its metadata.","properties":{"image":{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},"srcid":{"type":["integer","null"],"description":"`id` of the image this one was made from when it's an edited copy, such as a crop. `null` for an image that was uploaded."},"width":{"type":"integer","description":"Width of the full-resolution image, in pixels.","example":2420},"height":{"type":"integer","description":"Height of the full-resolution image, in pixels.","example":1815},"ratio":{"type":"string","description":"Shape the image is held to. `ONE_ONE` is square and `VARIABLE` is any shape.","enum":["ONE_ONE","FOUR_THREE","VARIABLE"],"example":"FOUR_THREE"},"markup":{"type":["string","null"],"description":"Editing instructions that produced this image from its source, as steps separated by semicolons, such as `crop,1x1,250x250;enhance;`. `null` when there are none."},"exif":{"description":"Camera metadata (EXIF) read from the image, as an object keyed by tag name. An empty array `[]`, not an object, when there is none.","oneOf":[{"type":"object","additionalProperties":true},{"type":"array","maxItems":0}]}}},{"type":"null"}]},"document":{"description":"The attached document's details, or `null` when the attachment isn't a document or you can't view it.","oneOf":[{"type":"object","description":"A document file, such as a PDF. When the document has no thumbnail, `thumbnailid` and `imageid` are `null`, and `standard`, `thumbnail`, and `mini` hold the URL of a placeholder image.","properties":{"documentid":{"type":"integer","description":"The document's ID."},"guid":{"type":"string","description":"String that identifies the document. `GET /media/documents/{id}` takes it in place of `documentid`."},"filename":{"type":["string","null"],"description":"The document's filename, with its extension. It's the name it was uploaded with unless someone edited it."},"title":{"type":"string","description":"Display title; falls back to the filename when no title is set, and to an empty string when both are unset"},"size":{"type":"integer","description":"Size of the file, in bytes."},"thumbnailid":{"type":["integer","null"],"description":"`imageid` of the document's thumbnail; `null` when the document has no thumbnail"},"imageid":{"type":["integer","null"],"description":"Same value as `thumbnailid`."},"document_type":{"type":"string","description":"The file's format, set by its extension, such as `pdf` or `word`."},"document_extension":{"type":"string","description":"The file's extension in lowercase, without the dot."},"document_group":{"type":"string","description":"The broader kind of file, such as `pdf` or `office`."},"standard":{"type":"string","format":"uri","description":"Thumbnail image URL at standard size"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail image URL at thumbnail size"},"mini":{"type":"string","format":"uri","description":"Thumbnail image URL at mini size"},"edit_url":{"type":"string","description":"Path, without the scheme or host, of the page where the document's details are edited: `/Document/Edit/{guid}`."},"view_url":{"type":"string","description":"Path, without the scheme or host, of the page that shows the document: `/Document/{guid}/{filename}`."},"download_url":{"type":"string","format":"uri","description":"Full URL to download the file."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the document was uploaded."},"summary":{"type":["string","null"],"description":"A short description of the document; `null` when it has none."},"pages":{"type":"integer","description":"Number of pages. `0` when the count isn't known, as it isn't for files that aren't PDFs."},"type":{"type":"string","const":"Document","description":"The kind of media item."}}},{"type":"null"}]}}}]}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"422":{"description":"The `include` value isn't listed."}},"x-api-usage-kind":"account"},"post":{"operationId":"createItemAttachment","summary":"Attach media to a workbench item","description":"Attaches an image, a document or a video to an item. The smallest request is `{\"imageid\": 12345}`. Send exactly one of `imageid`, `documentid` or `objectid`. The media must be in your media manager. Once attached it leaves your media manager. Removing the attachment puts it back, unless another attachment or an item photo still holds it.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"imageid":{"type":"integer","description":"The `imageid` of an image in your media manager, from `GET /user/media/images`."},"documentid":{"type":"integer","description":"The `documentid` of a document in your media manager, from `GET /user/media/library`."},"objectid":{"type":"integer","description":"The `objectid` of a video in your media manager, from `GET /user/media/library`."}}}}}},"responses":{"201":{"description":"The media was attached. The body is the attachment.","content":{"application/json":{"schema":{"type":"object","description":"An image, document, or video attached to an item. Exactly one of `imageid`, `documentid`, or `objectid` is set, and the other two are `null`.","properties":{"workbench_item_attachmentid":{"type":"integer","description":"The ID of the attachment. Use it to remove the attachment."},"workbench_itemid":{"type":"integer","description":"The ID of the item the attachment belongs to."},"imageid":{"type":["integer","null"],"description":"The ID of the attached image, or `null`."},"documentid":{"type":["integer","null"],"description":"The ID of the attached document, or `null`."},"objectid":{"type":["integer","null"],"description":"The ID of the attached video, or `null`."},"date_created":{"type":"integer","description":"UNIX timestamp of when the media was attached."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"422":{"description":"The request doesn't send exactly one of `imageid`, `documentid` and `objectid`, or that media isn't in your media manager."}},"x-api-usage-kind":"write"}},"/workbench/item-attachments/{workbenchItemid}/{attachmentid}":{"delete":{"operationId":"deleteItemAttachment","summary":"Remove an attachment from a workbench item","description":"Removes an attachment from an item. The file isn't deleted. It goes back to your media manager, unless another attachment or an item photo still uses it.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"attachmentid","in":"path","required":true,"description":"Under `/workbench/item-attachments`, the `workbench_item_attachmentid` from `GET /workbench/item-attachments/{workbenchItemid}`. Under `/workbench/attachments`, the `workbench_event_attachmentid` from `GET /workbench/attachments/{workbenchItemid}/{workbenchEventid}`.","schema":{"type":"integer"}}],"responses":{"204":{"description":"Attachment deleted; the response body is empty."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The attachment doesn't exist, or belongs to another item.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/workbench/attachments/{workbenchItemid}/{workbenchEventid}":{"get":{"operationId":"listEventAttachments","summary":"List attachments for an event","description":"Returns the attachments on an event, lowest `workbench_event_attachmentid` first. The list isn't paged.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"workbenchEventid","in":"path","required":true,"description":"The `workbench_eventid` of the event, from `GET /workbench/events/{workbenchItemid}`.","schema":{"type":"integer"}}],"responses":{"200":{"description":"List of attachments","content":{"application/json":{"schema":{"type":"object","description":"Holds an `attachments` array.","properties":{"attachments":{"type":"array","description":"The event's attachments.","items":{"type":"object","description":"An image, document, or video attached to an event. Exactly one of `imageid`, `documentid`, or `objectid` is set, and the other two are `null`.","properties":{"workbench_event_attachmentid":{"type":"integer","description":"The ID of the attachment. Use it to remove the attachment."},"workbench_eventid":{"type":"integer","description":"The ID of the event the attachment belongs to."},"imageid":{"type":["integer","null"],"description":"The ID of the attached image, or `null`."},"documentid":{"type":["integer","null"],"description":"The ID of the attached document, or `null`."},"objectid":{"type":["integer","null"],"description":"The ID of the attached video, or `null`."},"date_created":{"type":"integer","description":"UNIX timestamp of when the media was attached."}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The event doesn't exist under this item.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"account"},"post":{"operationId":"createEventAttachment","summary":"Add an attachment to an event","description":"Attaches an image, a document or a video to an event. The smallest request is `{\"imageid\": 12345}`. Send exactly one of `imageid`, `documentid` or `objectid`. The media must be in your media manager. Once attached it leaves your media manager. Removing the attachment puts it back, unless another attachment or an item photo still holds it.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"workbenchEventid","in":"path","required":true,"description":"The `workbench_eventid` of the event, from `GET /workbench/events/{workbenchItemid}`.","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"imageid":{"type":"integer","description":"The `imageid` of an image in your media manager, from `GET /user/media/images`."},"documentid":{"type":"integer","description":"The `documentid` of a document in your media manager, from `GET /user/media/library`."},"objectid":{"type":"integer","description":"The `objectid` of a video in your media manager, from `GET /user/media/library`."}}}}}},"responses":{"201":{"description":"The media was attached. The body is the attachment.","content":{"application/json":{"schema":{"type":"object","description":"An image, document, or video attached to an event. Exactly one of `imageid`, `documentid`, or `objectid` is set, and the other two are `null`.","properties":{"workbench_event_attachmentid":{"type":"integer","description":"The ID of the attachment. Use it to remove the attachment."},"workbench_eventid":{"type":"integer","description":"The ID of the event the attachment belongs to."},"imageid":{"type":["integer","null"],"description":"The ID of the attached image, or `null`."},"documentid":{"type":["integer","null"],"description":"The ID of the attached document, or `null`."},"objectid":{"type":["integer","null"],"description":"The ID of the attached video, or `null`."},"date_created":{"type":"integer","description":"UNIX timestamp of when the media was attached."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The event doesn't exist under this item.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}},"422":{"description":"The request doesn't send exactly one of `imageid`, `documentid` and `objectid`, or that media isn't in your media manager."}},"x-api-usage-kind":"write"}},"/workbench/attachments/{workbenchItemid}/{workbenchEventid}/{attachmentid}":{"delete":{"operationId":"deleteEventAttachment","summary":"Remove an attachment from an event","description":"Removes an attachment from an event. The file isn't deleted. It goes back to your media manager, unless another attachment or an item photo still uses it.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"workbenchItemid","in":"path","required":true,"description":"The `workbench_itemid` of the item, from `GET /workbench/items`.","schema":{"type":"integer"}},{"name":"workbenchEventid","in":"path","required":true,"description":"The `workbench_eventid` of the event, from `GET /workbench/events/{workbenchItemid}`.","schema":{"type":"integer"}},{"name":"attachmentid","in":"path","required":true,"description":"Under `/workbench/item-attachments`, the `workbench_item_attachmentid` from `GET /workbench/item-attachments/{workbenchItemid}`. Under `/workbench/attachments`, the `workbench_event_attachmentid` from `GET /workbench/attachments/{workbenchItemid}/{workbenchEventid}`.","schema":{"type":"integer"}}],"responses":{"204":{"description":"Attachment deleted; the response body is empty."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}},"404":{"description":"The event or the attachment doesn't exist under this item.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]}}}}},"x-api-usage-kind":"write"}},"/workbench/recommended_tools":{"get":{"operationId":"listWorkbenchRecommendedTools","summary":"List recommended tools","description":"Returns up to 5 iFixit tools that suit the devices on your workbench, best fit first. A tool ranks higher when guides that use it cover more of your items' devices. Different versions of one product appear once. Custom items, and tools your workbench already holds, are left out.","tags":["Workbench"],"security":[{"apiToken":[]},{"oidcBearer":[]}],"parameters":[{"name":"langid","in":"query","required":false,"schema":{"type":"string"},"description":"The [language code](#api-1/description/language-codes) for the device titles and the product name and URL."}],"responses":{"200":{"description":"Recommended tools","content":{"application/json":{"schema":{"type":"object","description":"Holds a `tools` array: at most 5, the tool that is useful for the most items first.","required":["tools"],"properties":{"tools":{"type":"array","description":"The recommended tools, best fit first.","items":{"type":"object","description":"A tool that iFixit sells and the guides for the devices on a workbench list.","required":["itemcode","wikiid","title","image_url","product_url","useful_for_count","useful_for_device_titles"],"properties":{"itemcode":{"type":"string","description":"The item code of one variant of the tool's product: the product code plus the option ID."},"wikiid":{"type":"integer","description":"The ID of the Item wiki the guides cite the tool by. Post it as `wikiid` to `/workbench/items` to add the tool to the workbench, which also drops it from later recommendations."},"title":{"type":"string","description":"The product's title."},"image_url":{"type":"string","format":"uri","description":"URL of a small image of the product."},"product_url":{"type":"string","format":"uri","description":"URL of the product's page in the store."},"useful_for_count":{"type":"integer","description":"How many items on the workbench the tool is for. It counts items, not device models: someone with two iPhones gets 2.\n"},"useful_for_device_titles":{"type":"array","description":"The titles of the devices the tool is for, each listed once, with the most recently added item's device first.","items":{"type":"string"}}}}}}}}}},"401":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"403":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}}},"x-api-usage-kind":"account"}}},"components":{"securitySchemes":{"apiToken":{"type":"http","scheme":"api","description":"A token from signing in with a password, sent as `Authorization: api YOUR_AUTH_TOKEN`.\nIn a tool that asks for the token and the scheme separately, enter the token alone,\nand the tool adds `api`.\n\nGet a token from `POST /user/token` with your email and password. An account that\nsigns in only through an identity provider can't use this. For a script or an\nagent, use a bearer API key instead.\n"},"oidcBearer":{"type":"http","scheme":"bearer","description":"Send `Authorization: Bearer YOUR_API_KEY` for an API key, or\n`Authorization: Bearer ACCESS_TOKEN` for an OIDC access token.\n\nYou create an **API key** for your own account from the API keys tab\non your profile, signed in to the website. There is no way to create\none over the API. It lasts up to a year, you name it, and you can\nrevoke it on its own. Use this for a personal command line tool, a script,\nor an agent acting for your account: unlike `POST /user/token` it needs\nno password, so it also works when you sign in through an identity\nprovider.\n\nThe request acts as the account the key belongs to. A bearer token,\nno matter whose, cannot change account credentials or site\nsettings, or create or list API keys. An API key that\ncan write revokes itself with `DELETE /user/token`.\n\nApproved OIDC integrations obtain access tokens through browser sign-in\nand send them with the same `Bearer` scheme. These require client\nregistration with iFixit and the scopes needed by the endpoint. An ID\ntoken is not an API credential.\n"},"workbenchBearer":{"type":"http","scheme":"bearer","description":"An iFixit OIDC access token with the `workbench` scope, bound to\nan MCP resource registered for its client. Obtain it through the\nauthorization code flow with S256 PKCE and the resource parameter.\nAPI keys and general `api` grants do not qualify.\n"}},"schemas":{"Comment":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"type":"object","description":"A comment on a guide, step, wiki page, or other content.","properties":{"commentid":{"type":"integer","description":"The comment's ID, from `GET /comments`. For a top-level comment, send it as `parentid` to reply."},"locale":{"type":["string","null"],"description":"Language code of the comment, detected from its text after the comment is saved. `null` until then, and `null` if no language is found."},"context":{"type":"string","description":"The kind of content a comment is on.\n- `step`: a step of a guide. - `info`: a page of information about the site, such as the list of\n  flags.\n- `post`: a question or answer. - `wp_post`: a news post.","enum":["guide","step","wiki","info","post","story","wp_post"]},"contextid":{"type":"integer","description":"The ID of the item the comment is on, such as a `guideid` or a `stepid`, matching `context`."},"parentid":{"type":["integer","null"],"description":"`commentid` of the comment this one replies to; `null` on a top-level comment."},"title":{"type":"string","description":"Title of the guide, wiki page, or news post the comment is on, as it was when the comment was posted. Empty for questions, answers, and stories."},"text_raw":{"type":"string","description":"The comment in wiki markup, as saved. It can differ from the text you sent."},"text_rendered":{"type":"string","description":"The comment as HTML."},"date":{"type":"integer","format":"int64","description":"UNIX timestamp (seconds since January 1, 1970, UTC) of when the comment was posted."},"modified_date":{"type":"integer","format":"int64","description":"UNIX timestamp of the last edit; 0 when the comment has never been edited."},"status":{"type":"string","description":"`public` for a comment that is shown and `deleted` for one that was deleted. The API never sets `private`.","enum":["public","private","deleted"]},"rating":{"type":"integer","description":"Comments aren't rated, so this is `0`."},"author":{"type":"object","description":"The account that posted the comment.","properties":{"userid":{"type":"integer","description":"The account's ID. Use it as `userid` in `/users/{userid}`.","example":261784},"username":{"type":"string","description":"The name shown on the account's profile.","example":"John Doe"},"unique_username":{"type":["string","null"],"description":"The account's @handle, which no other account shares. It starts with a lowercase letter, then lowercase letters, digits, or underscores, 3 to 15 characters in all. `null` when the account has none.","example":"johndoe"},"join_date":{"type":"integer","format":"int64","description":"When the account was created, as a UNIX timestamp (seconds since January 1, 1970, UTC).","example":1285253372},"image":{"description":"The account's avatar. Lists and search results hold a default avatar for an account without one. A full profile returns `null` instead.","oneOf":[{"type":"object","description":"URLs for one image at each size that exists. A size is left out when the image is smaller than that size, so check for a key before you use it. `id`, `guid`, and `original` are always present.","properties":{"id":{"type":"integer","description":"The image's `imageid`. `GET /media/images/{imageid}` takes it in place of the `guid`.","example":73556},"guid":{"type":"string","description":"Unique string that identifies the image. The URLs are built from it.","example":"FucWIkw2ZEBiIJHk"},"mini":{"type":"string","format":"uri","description":"Smallest thumbnail, up to 56 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.mini"},"thumbnail":{"type":"string","format":"uri","description":"Thumbnail, up to 96 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.thumbnail"},"140x105":{"type":"string","format":"uri","description":"Up to 140 pixels wide."},"200x150":{"type":"string","format":"uri","description":"Up to 200 pixels wide."},"standard":{"type":"string","format":"uri","description":"Up to 300 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.standard"},"440x330":{"type":"string","format":"uri","description":"Up to 440 pixels wide."},"medium":{"type":"string","format":"uri","description":"Up to 592 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.medium"},"large":{"type":"string","format":"uri","description":"Up to 800 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.large"},"huge":{"type":"string","format":"uri","description":"Up to 1600 pixels wide.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.huge"},"original":{"type":"string","format":"uri","description":"Full-resolution version of the image, at its uploaded width and height.","example":"https://guide-images.cdn.ifixit.com/igi/FucWIkw2ZEBiIJHk.full"}},"required":["id"]},{"type":"null"}]},"reputation":{"type":"integer","description":"The account's reputation points.","example":139},"url":{"type":"string","format":"uri","description":"Link to the account's profile page. Lists and search results hold it. Full profiles don't.","example":"https://www.ifixit.com/User/261784/John+Doe"},"teams":{"type":"array","description":"The `teamid` of each team the account belongs to. Look a team up with `GET /teams/{teamid}`.","items":{"type":"integer"},"example":[276]},"privileges":{"type":"array","description":"The privileges the account holds. `Admin` manages the site. `Author & Mod` moderates both guides and Answers. `Moderator` moderates Answers, and `Author` moderates guides. `Student` and `Teacher` are accounts in a university's student program. Empty when the account holds none. Full profiles hold it. Lists and search results don't.","items":{"type":"string"},"example":["User"]}},"required":["userid","username"]},"replies":{"type":"array","description":"The comment's replies, newest first, without deleted ones. Empty on a reply. The items in this array have no `replies` field.","items":{"$ref":"#/components/schemas/Comment"}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}}},"required":["commentid","context","contextid","text_raw","date","status","author"]}},"responses":{"Unauthorized":{"description":"Your credentials are missing or not valid. Send a valid API key, or sign in again.","content":{"application/json":{"schema":{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},"example":{"error":true,"message":"Authentication required"}}}},"Forbidden":{"description":"You aren't allowed to make this request. The `message` says why.","content":{"application/json":{"schema":{"type":"object","description":"The body of a 403 response.","allOf":[{"type":"object","description":"The body of most error responses.","properties":{"error":{"type":"boolean","description":"Only some errors include it, so check the status code to tell a failure from a success.","const":true},"message":{"type":"string","description":"A sentence that says what went wrong, written for a person. The wording can change, so don't match on it."}},"required":["message"]},{"type":"object"}]},"example":{"error":true,"message":"Insufficient privileges"}}}}}}}