An API key created in the PartFinder console at https://console.partfinder.dev, or a customer key created with POST /v1/keys. Send as Authorization: Bearer <key>. Revocation takes effect within approximately one minute.
{"docsConfig":{"theme":"luma","$schema":"https://mintlify.com/docs.json","name":"PartFinder API","colors":{"primary":"#1D4ED8","light":"#3B82F6","dark":"#1E3A8A"},"favicon":"https://mintcdn.com/partfinder/hGeRCXFb-rSPxOJq/favicon.svg?fit=max\u0026auto=format\u0026n=hGeRCXFb-rSPxOJq\u0026q=85\u0026s=19d37d9d5ca86111d80fb254ae53e1e9","navbar":{"links":[{"href":"https://docs.partfinder.dev/llms.txt","label":"For AI agents: llms.txt"},{"href":"https://console.partfinder.dev","label":"Console"}],"primary":{"type":"button","label":"Get an API key","href":"https://console.partfinder.dev"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"markdown":{"instructions":["The PartFinder API is served at https://api.partfinder.dev. Authenticate with `Authorization: Bearer $PARTFINDER_API_KEY`; create an account at https://console.partfinder.dev/sign-up and pick pay as you go or a monthly or yearly plan (see https://partfinder.dev/pricing), then create a key. Pay as you go starts with 100 free credits, once per person and per company.","Install the PartFinder agent skill with `npx skills add https://docs.partfinder.dev` (skill file: https://docs.partfinder.dev/skill.md).","The OpenAPI document at https://api.partfinder.dev/v1/openapi.json is the source of truth for request and response schemas.","What each call costs and current plans: https://api.partfinder.dev/llms.txt."]},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"partfinder","hasAudioNarration":false,"actualSubdomain":"partfinder","customDomains":["docs.partfinder.dev"],"gitSource":{"type":"github","owner":"nimbusopsconsulting","repo":"partfinder-api-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae714b2bfc5f43dec48d3f4","collectionId":"070dca16-beeb-47de-9652-5b4a8c343a6c","liveDeploymentHistoryId":"6ae714b2bfc5f43dec48d3f4","schemaVersion":"v3"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ae714b2bfc5f43dec48d3f4","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"API Reference","count":36},{"language":"default","tag":"Endpoints","count":35},{"language":"default","tag":"Documentation","count":24},{"language":"default","tag":"Integrations","count":10},{"language":"default","tag":"Guides","count":8},{"language":"default","tag":"Webhooks","count":7},{"language":"default","tag":"BOMs","count":5},{"language":"default","tag":"RFQs","count":5},{"language":"default","tag":"Core Concepts","count":4},{"language":"default","tag":"Compare","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"brand-icons.css","content":".dark img[src=\"/images/logos/openai-blossom-black.svg\"]{content:url(/images/logos/openai-blossom-white.svg)}.dark img[src=\"/images/logos/cursor-cube-2d-light.svg\"]{content:url(/images/logos/cursor-cube-2d-dark.svg)}.dark img[src=\"/images/logos/anthropic-symbol-slate.svg\"]{content:url(/images/logos/anthropic-symbol-ivory.svg)}.dark img[src=\"/images/logos/vercel-symbol-black.svg\"]{content:url(/images/logos/vercel-symbol-white.svg)}"}],"page":{"pagePath":"api-reference/keys/list-customer-keys","slug":"/api-reference/keys/list-customer-keys","pageMetadata":{"title":"List customer keys","description":"Every key your organization created for its customers and has not revoked, newest first. Secrets are never listed.","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/keys","href":"/api-reference/keys/list-customer-keys","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Every key your organization created for its customers and has not revoked, newest first. Secrets are never listed.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"List customer keys","description":"Every key your organization created for its customers and has not revoked, newest first. Secrets are never listed.","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/keys","href":"/api-reference/keys/list-customer-keys","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"listEndCustomerKeys","tags":["Keys"],"summary":"List customer keys","description":"Every key your organization created for its customers and has not revoked, newest first. Secrets are never listed.","responses":{"200":"e6a0ff5a-0f3e-4774-86dc-0f4e14c2d911","401":"f79f0b6e-19b4-4d9c-91b9-048e27abde34","403":"1522a1d4-4f31-4f64-b8f6-1af2a9815ebe","429":"671d3632-5ab0-446c-9b55-15d10685f33b"},"method":"get","type":"path","servers":["0fd180cc-370f-4a5d-b567-97592ff7113e"],"security":["ff9e9b82-f90e-4a4b-b1b1-0a91012e4b98"],"path":"/v1/keys","baseUrlOptions":["https://api.partfinder.dev"],"title":"List customer keys","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"responses":{"e6a0ff5a-0f3e-4774-86dc-0f4e14c2d911":{"description":"The keys.","content":{"application/json":{"schema":{"type":"object","properties":{"as_of":{"type":"string","format":"date-time","description":"ISO 8601. How current the data in this response is.","isRequired":true,"uniqueKey":"as_of","typeLabel":"string\u003cdate-time>"},"summary":{"type":"string","description":"Plain language an agent can relay without re-deriving it.","isRequired":true,"uniqueKey":"summary","typeLabel":"string"},"notice":{"type":"string","description":"Informational-use notice. Always present.","isRequired":true,"uniqueKey":"notice","typeLabel":"string"},"keys":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The key id. Use it to revoke the key.","isRequired":true,"uniqueKey":"keys.items.[INDEX].id","typeLabel":"string"},"name":{"type":"string","description":"The key's name.","isRequired":true,"uniqueKey":"keys.items.[INDEX].name","typeLabel":"string"},"end_customer_id":{"type":"string","format":"uuid","description":"The end customer the key belongs to. Every key of one end customer sees the same data.","isRequired":true,"uniqueKey":"keys.items.[INDEX].end_customer_id","typeLabel":"string\u003cuuid>"},"company":{"type":"string","description":"The end customer's company name.","isRequired":true,"uniqueKey":"keys.items.[INDEX].company","typeLabel":"string"},"created_at":{"type":"string","format":"date-time","description":"When the key was created.","isRequired":true,"uniqueKey":"keys.items.[INDEX].created_at","typeLabel":"string\u003cdate-time>"}},"required":["id","name","end_customer_id","company","created_at"],"uniqueKey":"keys.items.[INDEX]","typeLabel":"object"},"description":"Every end-customer key of your organization that is not revoked, newest first. Secrets are never listed.","isRequired":true,"uniqueKey":"keys","typeLabel":"object[]"}},"required":["as_of","summary","notice","keys"],"uniqueKey":"","typeLabel":"object"},"example":{"as_of":"2026-10-07T10:14:02.091Z","summary":"1 key for 1 end customer.","notice":"Informational only. Risk scores, stock levels, lead times and alternate-part suggestions may be incomplete, delayed or inaccurate. Independently verify before making procurement, engineering, compliance, safety or sourcing decisions.","keys":[{"id":"ak_2c4e6a8b0d1f3e5a7c9b1d3f5e7a9c0b","name":"Acme Corp 3f9a1c","end_customer_id":"7d2e4c1a-5b3f-4e8d-9a6c-2f1b0e3d4c5a","company":"Acme Corp","created_at":"2026-10-07T10:12:40.512Z"}]},"examples":{"Example":{"title":"Example","value":{"as_of":"2026-10-07T10:14:02.091Z","summary":"1 key for 1 end customer.","notice":"Informational only. Risk scores, stock levels, lead times and alternate-part suggestions may be incomplete, delayed or inaccurate. Independently verify before making procurement, engineering, compliance, safety or sourcing decisions.","keys":[{"id":"ak_2c4e6a8b0d1f3e5a7c9b1d3f5e7a9c0b","name":"Acme Corp 3f9a1c","end_customer_id":"7d2e4c1a-5b3f-4e8d-9a6c-2f1b0e3d4c5a","company":"Acme Corp","created_at":"2026-10-07T10:12:40.512Z"}]}}},"exampleType":"examples"}},"headers":{"X-RateLimit-Limit":{"description":"Calls allowed in the current window: the minute or the day, whichever has fewer calls left.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Remaining":{"description":"Calls left in that window.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"Seconds until that window resets.","schema":{"type":"integer","minimum":1}}},"exampleType":"examples"},"f79f0b6e-19b4-4d9c-91b9-048e27abde34":{"description":"Missing, unknown, revoked or expired key.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["authentication_required","invalid_key","invalid_request","not_a_specific_part","part_not_found","verification_unavailable","generation_failed","bom_too_large","bom_not_found","bom_columns_not_found","event_not_found","rate_limited","supplier_opted_out","send_failed","rfq_not_found","rfq_bounced","message_refused","key_not_allowed","insufficient_scope","app_disconnected","key_not_found","key_name_taken","webhook_endpoint_not_found","not_a_parts_query","search_not_found","compare_not_found","credits_exhausted","payment_method_required","payment_failed","usage_limit_reached"],"description":"`authentication_required` when no bearer token was sent. `invalid_key` when the key or sign-in is unknown, revoked or expired — deliberately indistinguishable — or the sign-in names no organization you belong to (the `summary` says what to do). `invalid_request` when a required parameter is missing. `not_a_specific_part` when the input does not identify one specific part. `part_not_found` when no supplier lists that part number exactly — usually a typo or a partial number. `verification_unavailable` when we could not check whether the part is real, and so declined to describe it; temporary, safe to retry. `generation_failed` when the report could not be produced, or a search or a comparison could not be started. `bom_too_large` when one call carries more lines than the limit; `reason` states both numbers. `bom_not_found` when no BOM with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `bom_columns_not_found` when an uploaded file has no column we can identify as part numbers; `reason` lists the headers seen. `event_not_found` when no active event has that id. `rate_limited` when your organization has used its calls for this minute or this day; wait the seconds in the `Retry-After` header, then retry. `supplier_opted_out` when the supplier asked not to receive requests for quote from you, or from anyone through PartFinder. `send_failed` when the email could not be sent; nothing was stored, safe to retry. `rfq_not_found` when no request for quote with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `rfq_bounced` when the supplier's address could not receive the request; send a new request for quote to a working address. `message_refused` when the text was not sent; `summary` says what to change before sending again. `key_not_allowed` when a key that belongs to one of your customers calls an endpoint only your organization's own keys may call, or a caller signed in through an AI app manages keys or webhooks. `insufficient_scope` when an AI app signed in without the permission the call needs (`partfinder:read` to read, which includes looking up parts, alternates and events and uses credits for those; `partfinder:write` to change anything); the `summary` names it, and connecting the app again with it allowed fixes it. `app_disconnected` when the AI app the caller signed in through was disconnected in the console; signing in again does not help, allowing the app again in the console does. `key_not_found` when no live end-customer key with that id belongs to your organization. `key_name_taken` when a key with that name already exists in your organization, revoked keys included. `webhook_endpoint_not_found` when no webhook endpoint with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `not_a_parts_query` when a search query is not about a part; send a part number or describe the part. `search_not_found` when no search with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `compare_not_found` when no comparison with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `credits_exhausted` when your plan's credits for this month are used up; this request was not run and nothing was charged. Upgrade the plan at `billing_url`, then retry. `payment_method_required` when your organization is on pay as you go with no payment method; this request was not run and nothing was charged. Add a payment method or choose a plan at `billing_url`, then retry. `payment_failed` when pay as you go is paused because the last payment failed; this request was not run and nothing was charged. Update the payment method at `billing_url`, then retry. `usage_limit_reached` when your organization, on pay as you go, has reached its limit for unpaid usage; this request was not run and nothing was charged. Calls resume once the current payment goes through; follow it at `billing_url`. With a key made with `POST /v1/keys`, these four carry no `billing_url`: the `summary` asks your customer to contact your organization.","isRequired":true,"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"summary":{"description":"One sentence you can relay to a user as-is, the same as `summary` on a successful response. Present whenever there is something useful to say about what went wrong.","type":"string","uniqueKey":"summary","typeLabel":"string"},"reason":{"description":"The specific detail behind the error.","type":"string","uniqueKey":"reason","typeLabel":"string"},"billing_url":{"description":"On `credits_exhausted`, `payment_method_required`, `payment_failed` and `usage_limit_reached`: the PartFinder console Billing page, where your organization manages its plan and payment method. Absent for a key made with `POST /v1/keys`, and for an organization whose plan is set by its contract.","type":"string","format":"uri","uniqueKey":"billing_url","typeLabel":"string\u003curi>"},"did_you_mean":{"description":"Real part numbers to retry with. On `not_a_specific_part` they are parts of the kind you described; on `part_not_found` they are the listed part numbers your input is a prefix of, so `TPS5433` returns TPS54331, TPS54332 and so on. Absent when there is nothing to suggest. Every entry is a real part number, never a guess.","type":"array","items":{"type":"string","uniqueKey":"did_you_mean.items.[INDEX]","typeLabel":"string"},"uniqueKey":"did_you_mean","typeLabel":"string[]"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"authentication_required","summary":"\u003cstring>","reason":"\u003cstring>","billing_url":"\u003cstring>","did_you_mean":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"1522a1d4-4f31-4f64-b8f6-1af2a9815ebe":{"description":"The key belongs to one of your customers, or the caller signed in through an AI app; only your organization's own keys manage keys. The caller signed in through an AI app without the permission this call needs (`partfinder:read` to read, which includes looking up parts, alternates and events and uses credits for those; `partfinder:write` to change anything); the error is `insufficient_scope`. Or the AI app was disconnected in the console; the error is `app_disconnected`.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["authentication_required","invalid_key","invalid_request","not_a_specific_part","part_not_found","verification_unavailable","generation_failed","bom_too_large","bom_not_found","bom_columns_not_found","event_not_found","rate_limited","supplier_opted_out","send_failed","rfq_not_found","rfq_bounced","message_refused","key_not_allowed","insufficient_scope","app_disconnected","key_not_found","key_name_taken","webhook_endpoint_not_found","not_a_parts_query","search_not_found","compare_not_found","credits_exhausted","payment_method_required","payment_failed","usage_limit_reached"],"description":"`authentication_required` when no bearer token was sent. `invalid_key` when the key or sign-in is unknown, revoked or expired — deliberately indistinguishable — or the sign-in names no organization you belong to (the `summary` says what to do). `invalid_request` when a required parameter is missing. `not_a_specific_part` when the input does not identify one specific part. `part_not_found` when no supplier lists that part number exactly — usually a typo or a partial number. `verification_unavailable` when we could not check whether the part is real, and so declined to describe it; temporary, safe to retry. `generation_failed` when the report could not be produced, or a search or a comparison could not be started. `bom_too_large` when one call carries more lines than the limit; `reason` states both numbers. `bom_not_found` when no BOM with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `bom_columns_not_found` when an uploaded file has no column we can identify as part numbers; `reason` lists the headers seen. `event_not_found` when no active event has that id. `rate_limited` when your organization has used its calls for this minute or this day; wait the seconds in the `Retry-After` header, then retry. `supplier_opted_out` when the supplier asked not to receive requests for quote from you, or from anyone through PartFinder. `send_failed` when the email could not be sent; nothing was stored, safe to retry. `rfq_not_found` when no request for quote with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `rfq_bounced` when the supplier's address could not receive the request; send a new request for quote to a working address. `message_refused` when the text was not sent; `summary` says what to change before sending again. `key_not_allowed` when a key that belongs to one of your customers calls an endpoint only your organization's own keys may call, or a caller signed in through an AI app manages keys or webhooks. `insufficient_scope` when an AI app signed in without the permission the call needs (`partfinder:read` to read, which includes looking up parts, alternates and events and uses credits for those; `partfinder:write` to change anything); the `summary` names it, and connecting the app again with it allowed fixes it. `app_disconnected` when the AI app the caller signed in through was disconnected in the console; signing in again does not help, allowing the app again in the console does. `key_not_found` when no live end-customer key with that id belongs to your organization. `key_name_taken` when a key with that name already exists in your organization, revoked keys included. `webhook_endpoint_not_found` when no webhook endpoint with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `not_a_parts_query` when a search query is not about a part; send a part number or describe the part. `search_not_found` when no search with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `compare_not_found` when no comparison with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `credits_exhausted` when your plan's credits for this month are used up; this request was not run and nothing was charged. Upgrade the plan at `billing_url`, then retry. `payment_method_required` when your organization is on pay as you go with no payment method; this request was not run and nothing was charged. Add a payment method or choose a plan at `billing_url`, then retry. `payment_failed` when pay as you go is paused because the last payment failed; this request was not run and nothing was charged. Update the payment method at `billing_url`, then retry. `usage_limit_reached` when your organization, on pay as you go, has reached its limit for unpaid usage; this request was not run and nothing was charged. Calls resume once the current payment goes through; follow it at `billing_url`. With a key made with `POST /v1/keys`, these four carry no `billing_url`: the `summary` asks your customer to contact your organization.","isRequired":true,"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"summary":{"description":"One sentence you can relay to a user as-is, the same as `summary` on a successful response. Present whenever there is something useful to say about what went wrong.","type":"string","uniqueKey":"summary","typeLabel":"string"},"reason":{"description":"The specific detail behind the error.","type":"string","uniqueKey":"reason","typeLabel":"string"},"billing_url":{"description":"On `credits_exhausted`, `payment_method_required`, `payment_failed` and `usage_limit_reached`: the PartFinder console Billing page, where your organization manages its plan and payment method. Absent for a key made with `POST /v1/keys`, and for an organization whose plan is set by its contract.","type":"string","format":"uri","uniqueKey":"billing_url","typeLabel":"string\u003curi>"},"did_you_mean":{"description":"Real part numbers to retry with. On `not_a_specific_part` they are parts of the kind you described; on `part_not_found` they are the listed part numbers your input is a prefix of, so `TPS5433` returns TPS54331, TPS54332 and so on. Absent when there is nothing to suggest. Every entry is a real part number, never a guess.","type":"array","items":{"type":"string","uniqueKey":"did_you_mean.items.[INDEX]","typeLabel":"string"},"uniqueKey":"did_you_mean","typeLabel":"string[]"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"authentication_required","summary":"\u003cstring>","reason":"\u003cstring>","billing_url":"\u003cstring>","did_you_mean":["\u003cstring>"]}}},"exampleType":"generated"}},"headers":{"X-RateLimit-Limit":{"description":"Calls allowed in the current window: the minute or the day, whichever has fewer calls left.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Remaining":{"description":"Calls left in that window.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"Seconds until that window resets.","schema":{"type":"integer","minimum":1}}},"exampleType":"generated"},"671d3632-5ab0-446c-9b55-15d10685f33b":{"description":"Your organization has used its calls for this minute or this day. Wait the number of seconds in `Retry-After`, then retry.","headers":{"Retry-After":{"description":"Seconds until the limit resets.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Limit":{"description":"Calls allowed in the current window: the minute or the day, whichever has fewer calls left.","schema":{"type":"integer","minimum":1}},"X-RateLimit-Remaining":{"description":"Calls left in that window.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Reset":{"description":"Seconds until that window resets.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["authentication_required","invalid_key","invalid_request","not_a_specific_part","part_not_found","verification_unavailable","generation_failed","bom_too_large","bom_not_found","bom_columns_not_found","event_not_found","rate_limited","supplier_opted_out","send_failed","rfq_not_found","rfq_bounced","message_refused","key_not_allowed","insufficient_scope","app_disconnected","key_not_found","key_name_taken","webhook_endpoint_not_found","not_a_parts_query","search_not_found","compare_not_found","credits_exhausted","payment_method_required","payment_failed","usage_limit_reached"],"description":"`authentication_required` when no bearer token was sent. `invalid_key` when the key or sign-in is unknown, revoked or expired — deliberately indistinguishable — or the sign-in names no organization you belong to (the `summary` says what to do). `invalid_request` when a required parameter is missing. `not_a_specific_part` when the input does not identify one specific part. `part_not_found` when no supplier lists that part number exactly — usually a typo or a partial number. `verification_unavailable` when we could not check whether the part is real, and so declined to describe it; temporary, safe to retry. `generation_failed` when the report could not be produced, or a search or a comparison could not be started. `bom_too_large` when one call carries more lines than the limit; `reason` states both numbers. `bom_not_found` when no BOM with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `bom_columns_not_found` when an uploaded file has no column we can identify as part numbers; `reason` lists the headers seen. `event_not_found` when no active event has that id. `rate_limited` when your organization has used its calls for this minute or this day; wait the seconds in the `Retry-After` header, then retry. `supplier_opted_out` when the supplier asked not to receive requests for quote from you, or from anyone through PartFinder. `send_failed` when the email could not be sent; nothing was stored, safe to retry. `rfq_not_found` when no request for quote with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `rfq_bounced` when the supplier's address could not receive the request; send a new request for quote to a working address. `message_refused` when the text was not sent; `summary` says what to change before sending again. `key_not_allowed` when a key that belongs to one of your customers calls an endpoint only your organization's own keys may call, or a caller signed in through an AI app manages keys or webhooks. `insufficient_scope` when an AI app signed in without the permission the call needs (`partfinder:read` to read, which includes looking up parts, alternates and events and uses credits for those; `partfinder:write` to change anything); the `summary` names it, and connecting the app again with it allowed fixes it. `app_disconnected` when the AI app the caller signed in through was disconnected in the console; signing in again does not help, allowing the app again in the console does. `key_not_found` when no live end-customer key with that id belongs to your organization. `key_name_taken` when a key with that name already exists in your organization, revoked keys included. `webhook_endpoint_not_found` when no webhook endpoint with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `not_a_parts_query` when a search query is not about a part; send a part number or describe the part. `search_not_found` when no search with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `compare_not_found` when no comparison with that id belongs to your organization (with a key made with `POST /v1/keys`, to that customer). `credits_exhausted` when your plan's credits for this month are used up; this request was not run and nothing was charged. Upgrade the plan at `billing_url`, then retry. `payment_method_required` when your organization is on pay as you go with no payment method; this request was not run and nothing was charged. Add a payment method or choose a plan at `billing_url`, then retry. `payment_failed` when pay as you go is paused because the last payment failed; this request was not run and nothing was charged. Update the payment method at `billing_url`, then retry. `usage_limit_reached` when your organization, on pay as you go, has reached its limit for unpaid usage; this request was not run and nothing was charged. Calls resume once the current payment goes through; follow it at `billing_url`. With a key made with `POST /v1/keys`, these four carry no `billing_url`: the `summary` asks your customer to contact your organization.","isRequired":true,"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"summary":{"description":"One sentence you can relay to a user as-is, the same as `summary` on a successful response. Present whenever there is something useful to say about what went wrong.","type":"string","uniqueKey":"summary","typeLabel":"string"},"reason":{"description":"The specific detail behind the error.","type":"string","uniqueKey":"reason","typeLabel":"string"},"billing_url":{"description":"On `credits_exhausted`, `payment_method_required`, `payment_failed` and `usage_limit_reached`: the PartFinder console Billing page, where your organization manages its plan and payment method. Absent for a key made with `POST /v1/keys`, and for an organization whose plan is set by its contract.","type":"string","format":"uri","uniqueKey":"billing_url","typeLabel":"string\u003curi>"},"did_you_mean":{"description":"Real part numbers to retry with. On `not_a_specific_part` they are parts of the kind you described; on `part_not_found` they are the listed part numbers your input is a prefix of, so `TPS5433` returns TPS54331, TPS54332 and so on. Absent when there is nothing to suggest. Every entry is a real part number, never a guess.","type":"array","items":{"type":"string","uniqueKey":"did_you_mean.items.[INDEX]","typeLabel":"string"},"uniqueKey":"did_you_mean","typeLabel":"string[]"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"authentication_required","summary":"\u003cstring>","reason":"\u003cstring>","billing_url":"\u003cstring>","did_you_mean":["\u003cstring>"]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"ff9e9b82-f90e-4a4b-b1b1-0a91012e4b98":{"bearerAuth":{"type":"http","scheme":"bearer","description":"An API key created in the PartFinder console at https://console.partfinder.dev, or a customer key created with `POST /v1/keys`. Send as `Authorization: Bearer \u003ckey>`. Revocation takes effect within approximately one minute.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"0fd180cc-370f-4a5d-b567-97592ff7113e":{"url":"https://api.partfinder.dev"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"An API key created in the PartFinder console at https://console.partfinder.dev, or a customer key created with `POST /v1/keys`. Send as `Authorization: Bearer \u003ckey>`. Revocation takes effect within approximately one minute.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"An API key created in the PartFinder console at https://console.partfinder.dev, or a customer key created with `POST /v1/keys`. Send as `Authorization: Bearer \u003ckey>`. Revocation takes effect within approximately one minute.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"https://api.partfinder.dev/v1/openapi.json"},"subdomain":"partfinder","siteName":"PartFinder API","title":"List customer keys - PartFinder API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-01T08:04:58.076Z","originalFileLocation":"api-reference/keys/list-customer-keys.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Every key your organization created for its customers and has not revoked, newest first. Secrets are never listed.\">\u003cmeta data-mint-head name=\"application-name\" content=\"PartFinder API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/partfinder/EFtN-rIWwyuXX5BE/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/partfinder/EFtN-rIWwyuXX5BE/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/partfinder/EFtN-rIWwyuXX5BE/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/partfinder/EFtN-rIWwyuXX5BE/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/partfinder/EFtN-rIWwyuXX5BE/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/partfinder/EFtN-rIWwyuXX5BE/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/partfinder/EFtN-rIWwyuXX5BE/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/partfinder/EFtN-rIWwyuXX5BE/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/partfinder/EFtN-rIWwyuXX5BE/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"List customer keys - PartFinder API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Every key your organization created for its customers and has not revoked, newest first. Secrets are never listed.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"PartFinder API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.partfinder.dev/api-reference/keys/list-customer-keys\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://partfinder.mintlify.app/_mintlify/api/og/v2?division=Keys\u0026amp;title=List+customer+keys\u0026amp;description=Every+key+your+organization+created+for+its+customers+and+has+not+revoked%2C+newest+first.+Secrets+are+never+listed.\u0026amp;theme=2915c8e57862f94fe512378b\u0026amp;signature=ad7655018e7bb4f04c7fbb2ba917cb466a4b0c915d68e6a31c8744fd5667be42\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"List customer keys - PartFinder API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Every key your organization created for its customers and has not revoked, newest first. Secrets are never listed.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://partfinder.mintlify.app/_mintlify/api/og/v2?division=Keys\u0026amp;title=List+customer+keys\u0026amp;description=Every+key+your+organization+created+for+its+customers+and+has+not+revoked%2C+newest+first.+Secrets+are+never+listed.\u0026amp;theme=2915c8e57862f94fe512378b\u0026amp;signature=ad7655018e7bb4f04c7fbb2ba917cb466a4b0c915d68e6a31c8744fd5667be42\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/partfinder/EFtN-rIWwyuXX5BE/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"PartFinder API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1D4ED8\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.partfinder.dev/api-reference/keys/list-customer-keys\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/keys/list-customer-keys.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.partfinder.dev/#organization\",\"name\":\"PartFinder API\",\"url\":\"https://docs.partfinder.dev\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.partfinder.dev#website\",\"name\":\"PartFinder API\",\"url\":\"https://docs.partfinder.dev\",\"publisher\":{\"@id\":\"https://docs.partfinder.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.partfinder.dev/api-reference/keys/list-customer-keys#webpage\",\"url\":\"https://docs.partfinder.dev/api-reference/keys/list-customer-keys\",\"name\":\"List customer keys\",\"description\":\"Every key your organization created for its customers and has not revoked, newest first. Secrets are never listed.\",\"dateModified\":\"2026-11-01T08:04:58.076Z\",\"isPartOf\":{\"@id\":\"https://docs.partfinder.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.partfinder.dev/api-reference/keys/list-customer-keys#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.partfinder.dev/api-reference/keys/list-customer-keys#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.partfinder.dev/api-reference/authentication/verify-an-api-key\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"List customer keys\",\"item\":\"https://docs.partfinder.dev/api-reference/keys/list-customer-keys\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.partfinder.dev/api-reference/keys/list-customer-keys#apireference\",\"headline\":\"List customer keys\",\"name\":\"List customer keys\",\"description\":\"Every key your organization created for its customers and has not revoked, newest first. Secrets are never listed.\",\"url\":\"https://docs.partfinder.dev/api-reference/keys/list-customer-keys\",\"mainEntityOfPage\":{\"@id\":\"https://docs.partfinder.dev/api-reference/keys/list-customer-keys#webpage\"},\"dateModified\":\"2026-11-01T08:04:58.076Z\",\"publisher\":{\"@id\":\"https://docs.partfinder.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.partfinder.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"PartFinder API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"PartFinder API","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"PartFinder REST API: reference overview and endpoints","sidebarTitle":"Overview","href":"/api-reference/overview"}]},{"group":"Endpoints","pages":[{"group":"Authentication","pages":[{"title":"Verify an API key","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/ping","href":"/api-reference/authentication/verify-an-api-key"}]},{"group":"Parts","pages":[{"title":"Research a part","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/parts","href":"/api-reference/parts/research-a-part"},{"title":"Find alternate parts","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/alternates","href":"/api-reference/parts/find-alternate-parts"}]},{"group":"BOMs","pages":[{"title":"List your BOMs","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/bom","href":"/api-reference/boms/list-your-boms"},{"title":"Analyze a BOM","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json post /v1/bom","href":"/api-reference/boms/analyze-a-bom"},{"title":"Upload a BOM file","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json post /v1/bom/upload","href":"/api-reference/boms/upload-a-bom-file"},{"title":"Get a BOM report","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/bom/{id}","href":"/api-reference/boms/get-a-bom-report"},{"title":"Delete a BOM","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json delete /v1/bom/{id}","href":"/api-reference/boms/delete-a-bom"}]},{"group":"Events","pages":[{"title":"List disruption events","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/events","href":"/api-reference/events/list-disruption-events"},{"title":"Get a disruption event","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/events/{id}","href":"/api-reference/events/get-a-disruption-event"},{"title":"Disruptions by country","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/events/countries","href":"/api-reference/events/disruptions-by-country"},{"title":"Port and sea-route activity","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/events/shipping","href":"/api-reference/events/port-and-sea-route-activity"}]},{"group":"Search","pages":[{"title":"List your searches","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/search","href":"/api-reference/search/list-your-searches"},{"title":"Search for parts","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json post /v1/search","href":"/api-reference/search/search-for-parts"},{"title":"Get a search","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/search/{id}","href":"/api-reference/search/get-a-search"},{"title":"Delete a search","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json delete /v1/search/{id}","href":"/api-reference/search/delete-a-search"}]},{"group":"Compare","pages":[{"title":"List your comparisons","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/compare","href":"/api-reference/compare/list-your-comparisons"},{"title":"Compare parts","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json post /v1/compare","href":"/api-reference/compare/compare-parts"},{"title":"Get a comparison","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/compare/{id}","href":"/api-reference/compare/get-a-comparison"},{"title":"Delete a comparison","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json delete /v1/compare/{id}","href":"/api-reference/compare/delete-a-comparison"}]},{"group":"RFQs","pages":[{"title":"List your requests for quote","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/rfq","href":"/api-reference/rfqs/list-your-requests-for-quote"},{"title":"Send a request for quote","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json post /v1/rfq","href":"/api-reference/rfqs/send-a-request-for-quote"},{"title":"Get a request for quote","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/rfq/{id}","href":"/api-reference/rfqs/get-a-request-for-quote"},{"title":"Delete a request for quote","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json delete /v1/rfq/{id}","href":"/api-reference/rfqs/delete-a-request-for-quote"},{"title":"Send a message in a request for quote","description":"Answer the supplier, or send a reminder, in the same email thread as the request for quote. The text is sent as written, under the requester's name.","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json post /v1/rfq/{id}/messages","href":"/api-reference/rfqs/send-a-message-in-a-request-for-quote"}]},{"group":"Keys","pages":[{"title":"List customer keys","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/keys","href":"/api-reference/keys/list-customer-keys"},{"title":"Create a key for a customer","description":"Create an API key for one of your own customers. Requests for quote, BOMs, searches and comparisons made with it belong to that customer: its keys see only those, while your organization's own keys see everything. Its calls count against your organization's rate limit and its credits too. The response carries the key's secret, the only time it is shown. Send `company` for a new customer, or `end_customer_id` to add a key to one you already created.","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json post /v1/keys","href":"/api-reference/keys/create-a-key-for-a-customer"},{"title":"Revoke a customer key","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json delete /v1/keys/{id}","href":"/api-reference/keys/revoke-a-customer-key"}]},{"group":"Webhooks","pages":[{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json get /v1/webhooks","href":"/api-reference/webhooks/list-webhook-endpoints"},{"title":"Register a webhook endpoint","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json post /v1/webhooks","href":"/api-reference/webhooks/register-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"https://api.partfinder.dev/v1/openapi.json delete /v1/webhooks/{id}","href":"/api-reference/webhooks/delete-a-webhook-endpoint"},{"title":"A supplier replied","version":null,"deprecated":null,"openapi":"https://api.partfinder.dev/v1/openapi.json webhook rfq.reply_received","href":"/api-reference/webhooks/a-supplier-replied"},{"title":"A request for quote bounced","version":null,"deprecated":null,"openapi":"https://api.partfinder.dev/v1/openapi.json webhook rfq.bounced","href":"/api-reference/webhooks/a-request-for-quote-bounced"},{"title":"A search ended","version":null,"deprecated":null,"openapi":"https://api.partfinder.dev/v1/openapi.json webhook search.completed","href":"/api-reference/webhooks/a-search-ended"},{"title":"A comparison ended","version":null,"deprecated":null,"openapi":"https://api.partfinder.dev/v1/openapi.json webhook compare.completed","href":"/api-reference/webhooks/a-comparison-ended"}]}]}]}]},"basePath":"","title":"List customer keys - PartFinder API","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-DCDCdBVX.js","utils-ME8dDnLe.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-0e84ACsd.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-wgRBj-ia.js","snippetPresets-C11Sgb-o.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-Bevw23-4.js","ApiExamples-C0lapOpP.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-ZeRQV8fF.js","shallow-BupWh095.js","getApiPlaygroundDisplay-BnYQO2Ss.js","CodeSnippet-RKKOc8c_.js","CodeSnippets-Drf_m8wS.js","getPastedJson-u6QiPzNZ.js","icon-Bb-CBSxO.js","MethodPill-F7l5AI7V.js","DuplicateIcon-IiAXkdSg.js","createIcon-FliI8EBc.js","DynamicMarkdown-B62XqCSI.js","SectionHeading-Dj31pT03.js","axios-vUo_bRtp.js","Markdown-BOgQCTwD.js","clsx-BIWXJmsZ.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DKZWslLH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-UDqbR6xh.js"]}