{"openapi":"3.1.0","info":{"title":"Quickerfile API","version":"1.0.0","summary":"File a receipt, get structured JSON and a renamed PDF back.","description":"Send a receipt or invoice as a file. Quickerfile reads it and returns the vendor, date, totals, tax and line items as JSON, plus the same document renamed `YYYY-MM-DD_Vendor_Amount.pdf` with that data written into its searchable file metadata.\n\nEvery call counts as one receipt against the monthly allowance on your plan. Files and filed receipts are deleted 24 hours after filing by an hourly job. Until then the download URL is unguessable but not access-controlled — anyone with the link can fetch it, so treat it as a secret.","contact":{"url":"https://www.quickerfile.com/developers"},"license":{"name":"Quickerfile API terms","url":"https://www.quickerfile.com/developers"}},"servers":[{"url":"https://www.quickerfile.com"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Receipts","description":"File a document and read the structured result back."},{"name":"Redaction","description":"Black out the personal data in a document and get the redacted file back."},{"name":"Account","description":"Plan, allowance and usage."}],"paths":{"/api/v1/receipts":{"post":{"tags":["Receipts"],"operationId":"fileReceipt","summary":"File a receipt","description":"Three ways to hand over one document: `multipart/form-data` with a `file` field, JSON with the file base64 encoded in `file`, or JSON with a public `url` that Quickerfile downloads itself. In JSON, send exactly one of `file` and `url`.\n\nPDF, JPEG, PNG, WEBP, HEIC and HEIF, up to 10 MB — but a call that sets `redact` is limited to PDF, JPEG and PNG, because the redaction engine has no decoder for the others and will not pass one through unredacted. Request bodies are capped at 10 MB, so a base64 `file` tops out around 7.4 MB; `url` and multipart carry the full 10 MB.\n\nA caller that can only send text — a ChatGPT Action, for one — should use `url`: the server fetches the bytes, so nothing has to be encoded into the request.\n\nRepeat a call safely by sending the same `Idempotency-Key`: the first result is replayed for 24 hours and is not charged twice.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"A value you choose per logical request. Replays the original result for 24 hours."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary"}}}},"application/json":{"schema":{"$ref":"#/components/schemas/FileReceiptRequest"}}}},"responses":{"200":{"description":"The receipt was read and filed.","headers":{"Idempotency-Replayed":{"schema":{"type":"string","enum":["true"]},"description":"Present when this is a replay of an earlier call."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Receipt"}}}},"400":{"description":"`invalid_request`: malformed body, or an unsupported file format.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`unauthorized`: the API key is missing, malformed or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"`quota_exceeded`: the plan's monthly receipts are used up. The body carries plan, limit and used.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"`payload_too_large`: the file is over 10 MB, or the request body is. Request bodies are capped at 10 MB, so a base64 receipt tops out around 7.4 MB; send larger files as `multipart/form-data`, or as a `url`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Either no receipt could be extracted from the file (`unprocessable_file`), or the `Idempotency-Key` was already used for different bytes (`idempotency_key_reuse`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`: past the burst limit. 100 a day per account, and on the MCP endpoint a further 60 a minute per key, where rate limiting is configured.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`server_error`: the receipt could not be filed. Nothing is counted against quota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/receipts/{id}":{"get":{"tags":["Receipts"],"operationId":"getReceipt","summary":"Retrieve a filed receipt","description":"Returns the same body as filing it. Available for 24 hours.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The filed receipt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Receipt"}}}},"401":{"description":"`unauthorized`: the API key is missing, malformed or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"`not_found`: no receipt with that id for this account, or it is past its 24 hours.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`server_error`: the request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/redact":{"post":{"tags":["Redaction"],"operationId":"redactDocument","summary":"Black out the personal data in a document","description":"Returns the same document with black rectangles over the personal data, and a report of what was covered and where.\n\nThe redaction is destructive. Every page is rendered to a bitmap and the bars are painted onto the pixels, so no text survives underneath one — a rectangle drawn over live PDF text is a graphic, and the words below it are still there for anything that reads the file. The output has no text layer, cannot be searched, and is larger than the input.\n\nPersonnummer, organisationsnummer, IBAN, giro and card numbers are found by checksum; names, addresses, customer, agreement, facility and meter numbers by the words printed next to them, and by the block they sit in — a recipient block in the window-envelope position carries no label at all. Pass anything you already know — the account holder's name and street — in `custom`, matched literally.\n\nEvery organisation number is blacked out, in every profile, the supplier's included: a sole trader's is their personnummer, a company customer's is on the recipient side of the page, and which is which is not something a shape can tell. Pass the one you need legible in `keep`.\n\nNever touched: amounts, dates, VAT, line items, kWh, tariffs, the invoice number and the meter reading. The last two are how a document is found again and what the bill is about.\n\nPDF, JPEG and PNG, up to 10 MB, 20 pages, 5000 points on a side and 40 megapixels rendered in total. WEBP, HEIC and HEIF are refused rather than passed through unredacted — redact those in the browser instead. A photo or scan has no text layer, so it needs `ocr: true`; the same is true of a PDF page that is only an image.\n\nCosts one receipt from the monthly allowance, the same as filing one. The redacted file is deleted after 24 hours.\n\nTo redact and file in one call, use `redact` on `POST /api/v1/receipts` instead — there the model only ever sees the redacted bytes.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"A value you choose per logical request. Replays the original result for 24 hours. Bound to the bytes and the settings it was first used with."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary"},"profile":{"type":"string","enum":["receipt","invoice","electricity-bill"]},"custom":{"type":"array","items":{"type":"string"},"description":"Repeat the field once per term."},"keep":{"type":"array","items":{"type":"string"},"description":"Repeat the field once per value. Left alone whatever a detector says."},"ocr":{"type":"string","enum":["true","false"]}}}},"application/json":{"schema":{"$ref":"#/components/schemas/RedactRequest"}}}},"responses":{"200":{"description":"The document was redacted.","headers":{"Idempotency-Replayed":{"schema":{"type":"string","enum":["true"]},"description":"Present when this is a replay of an earlier call."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Redaction"}}}},"400":{"description":"`invalid_request`: malformed body, or a format the engine cannot read. WEBP, HEIC and HEIF are refused here.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"`unauthorized`: the API key is missing, malformed or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"`quota_exceeded`: the plan's monthly receipts are used up. A redaction costs one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"`payload_too_large`: the file is over 10 MB, the request body is, or the document is over 20 pages.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Either nothing could be read from the document (`unprocessable_file` — a picture with `ocr` off, or a PDF that will not open), or the `Idempotency-Key` was already used for different bytes or different settings (`idempotency_key_reuse`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"`rate_limited`: past the burst limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`server_error`: the document could not be redacted. Nothing is counted against quota.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/usage":{"get":{"tags":["Account"],"operationId":"getUsage","summary":"Receipts used this period","responses":{"200":{"description":"Current plan and usage.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}}},"401":{"description":"`unauthorized`: the API key is missing, malformed or revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"`server_error`: the request could not be completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"An API key from https://www.quickerfile.com/dashboard/api-keys, sent as `Authorization: Bearer qf_live_...`."}},"schemas":{"FileReceiptRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"file":{"description":"The receipt, base64 encoded. A `data:` URI is accepted and its content type is used. Mutually exclusive with `url`.","type":"string","minLength":1},"url":{"description":"A public http(s) URL to download the receipt from. The server fetches it, so nothing has to be encoded into the request. Addresses that are not on the public internet are refused, and every redirect is checked again. Mutually exclusive with `file`.","type":"string","minLength":1},"filename":{"description":"Original filename. Used to infer the content type.","type":"string"},"content_type":{"description":"Overrides the type inferred from `filename` or the data URI.","type":"string","enum":["application/pdf","image/jpeg","image/png","image/webp","image/heic","image/heif"]},"redact":{"description":"Black out personal data before the document is read. The redaction runs first, the model only ever sees the redacted bytes, and the file that comes back is the redacted one. `true` uses the `receipt` profile; pass an object for another profile or for extra terms.","anyOf":[{"type":"boolean"},{"type":"object","properties":{"profile":{"type":"string","enum":["receipt","invoice","electricity-bill"],"description":"Which preset to run. `electricity-bill` adds the facility and meter labels a bill carries. Every profile blacks out every organisation number, the supplier's included — pass the supplier's number in `keep` to leave it legible."},"custom":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200},"description":"Extra text to black out — the account holder's name and street, when you already know them. Matched literally, case- and whitespace-insensitively. Never treated as a regular expression."},"keep":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200},"description":"Values to leave alone whatever a detector says about them — the supplier's own organisation number, when you know it. Every organisation number on a document is redacted by default, because a sole trader's is their personnummer and a company customer's is on the recipient side of the page. Digits are compared without their separators."},"ocr":{"type":"boolean"}},"additionalProperties":false}]}},"additionalProperties":false},"RedactRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"file":{"description":"The document, base64 encoded. A `data:` URI is accepted. PDF, JPEG or PNG. Mutually exclusive with `url`.","type":"string","minLength":1},"url":{"description":"A public http(s) URL to download the document from. Addresses that are not on the public internet are refused. Mutually exclusive with `file`.","type":"string","minLength":1},"filename":{"type":"string"},"content_type":{"type":"string","enum":["application/pdf","image/jpeg","image/png"]},"profile":{"description":"Default `receipt`.","type":"string","enum":["receipt","invoice","electricity-bill"]},"custom":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200},"description":"Extra text to black out — the account holder's name and street, when you already know them. Matched literally, case- and whitespace-insensitively. Never treated as a regular expression."},"keep":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":200},"description":"Values to leave alone whatever a detector says about them — the supplier's own organisation number, when you know it. Every organisation number on a document is redacted by default, because a sole trader's is their personnummer and a company customer's is on the recipient side of the page. Digits are compared without their separators."},"ocr":{"description":"Read the page with OCR. Required for photos and scans, which have no text layer. Off by default: it is slow. Up to 20 pages either way.","type":"boolean"}},"additionalProperties":false},"Receipt":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","description":"Retrieve again with GET /api/v1/receipts/{id}"},"created_at":{"type":"string","description":"RFC 3339 timestamp"},"expires_at":{"type":"string","description":"When the file and this record are deleted"},"model":{"type":"string"},"receipt":{"type":"object","properties":{"vendor":{"type":"object","properties":{"name":{"type":"string","description":"Business or vendor name"},"address":{"type":"string"},"phone":{"type":"string"},"tax_id":{"description":"VAT or tax registration number","type":"string"},"website":{"type":"string"}},"required":["name"],"additionalProperties":false},"transaction":{"type":"object","properties":{"date":{"type":"string","description":"Transaction date, YYYY-MM-DD"},"time":{"description":"HH:MM or HH:MM:SS","type":"string"},"receipt_number":{"type":"string"},"register":{"type":"string"},"cashier":{"type":"string"}},"required":["date"],"additionalProperties":false},"items":{"default":[],"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"quantity":{"type":"number"},"unit_price":{"type":"number"},"total":{"type":"number"},"sku":{"type":"string"}},"required":["name","total"],"additionalProperties":false}},"payment":{"type":"object","properties":{"subtotal":{"type":"number"},"tax":{"description":"VAT or sales tax amount","type":"number"},"tax_rate":{"description":"Decimal rate, 0.25 for 25%","type":"number"},"total":{"type":"number"},"currency":{"type":"string","description":"ISO 4217 currency code"},"method":{"type":"string"},"card_type":{"type":"string"},"card_last_four":{"type":"string"},"tip":{"type":"number"}},"required":["total","currency"],"additionalProperties":false},"classification":{"type":"object","properties":{"category":{"type":"string"},"subcategory":{"type":"string"},"confidence":{"type":"number","description":"Model's own confidence, 0-1"}},"required":["category","confidence"],"additionalProperties":false},"ai_metadata":{"type":"object","properties":{"model":{"type":"string","description":"Gemini model that produced this extraction"},"summary":{"type":"string"},"keywords":{"type":"array","items":{"type":"string"}},"language":{"type":"string","description":"ISO 639-1 language code"}},"required":["model","summary","keywords","language"],"additionalProperties":false}},"required":["vendor","transaction","items","payment","classification","ai_metadata"],"additionalProperties":false},"file":{"type":"object","properties":{"name":{"type":"string","description":"YYYY-MM-DD_Vendor_Amount.pdf"},"url":{"type":"string","description":"Download URL. Unguessable but not access-controlled: anyone with the link can fetch it until it is deleted 24 hours after filing."},"content_type":{"type":"string"},"size_bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"metadata_embedded":{"type":"boolean","description":"True only when vendor, date, amount and keywords were actually written into the file's document metadata. False for WEBP/HEIC/HEIF, and false if embedding failed."},"metadata_error":{"description":"Why metadata could not be embedded, when it could not be.","type":"string"}},"required":["name","url","content_type","size_bytes","metadata_embedded"],"additionalProperties":false},"redaction":{"description":"Present when `redact` was set. Says what was blacked out and where — never what it was.","type":"object","properties":{"profile":{"type":"string","enum":["receipt","invoice","electricity-bill"],"description":"Which preset to run. `electricity-bill` adds the facility and meter labels a bill carries. Every profile blacks out every organisation number, the supplier's included — pass the supplier's number in `keep` to leave it legible."},"content_type":{"type":"string"},"pages":{"type":"array","items":{"type":"object","properties":{"page":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"1-based"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Pixel width the boxes are measured against"},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"source":{"type":"string","enum":["text-layer","ocr","none"],"description":"Where the text came from. `none` means nothing could be read."},"redactions":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["personnummer","orgnummer","iban","bankgiro","plusgiro","ocr_reference","phone","email","address","customer_number","agreement_number","facility_id","meter_id","person_name","card_number","custom"]},"box":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"width":{"type":"number"},"height":{"type":"number"}},"required":["x","y","width","height"],"additionalProperties":false,"description":"Pixels on the rendered page, origin top left."},"confidence":{"type":"number","description":"0-1. Label-anchored hits score highest."}},"required":["kind","box","confidence"],"additionalProperties":false}}},"required":["page","width","height","source","redactions"],"additionalProperties":false}},"counts":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":"How many boxes of each kind, across the whole document. Only the kinds that were actually found appear; a kind that found nothing is absent rather than zero. Keys are the values of `kind` above."},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pages_without_text":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":"Pages nothing could be read from. Nothing was found there, which is not the same as nothing being there."},"engine":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"],"additionalProperties":false}},"required":["profile","content_type","pages","counts","total","pages_without_text","engine"],"additionalProperties":false},"usage":{"type":"object","properties":{"plan":{"type":"string","enum":["free","starter","pro","business"]},"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Receipts included in the plan per month"},"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["plan","limit","used","remaining"],"additionalProperties":false}},"required":["id","created_at","expires_at","model","receipt","file","usage"],"additionalProperties":false},"Redaction":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","description":"Correlates with the Idempotency-Key that produced it"},"created_at":{"type":"string","description":"RFC 3339 timestamp"},"expires_at":{"type":"string","description":"When the file and this record are deleted"},"profile":{"type":"string","enum":["receipt","invoice","electricity-bill"],"description":"Which preset to run. `electricity-bill` adds the facility and meter labels a bill carries. Every profile blacks out every organisation number, the supplier's included — pass the supplier's number in `keep` to leave it legible."},"pages":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"redacted_url":{"type":"string","description":"Download URL for the redacted document. Unguessable but not access-controlled: anyone with the link can fetch it until it is deleted 24 hours after redaction."},"content_type":{"type":"string","description":"`application/pdf` for a PDF in, `image/png` for an image in."},"size_bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"report":{"type":"object","properties":{"profile":{"type":"string","enum":["receipt","invoice","electricity-bill"],"description":"Which preset to run. `electricity-bill` adds the facility and meter labels a bill carries. Every profile blacks out every organisation number, the supplier's included — pass the supplier's number in `keep` to leave it legible."},"content_type":{"type":"string"},"pages":{"type":"array","items":{"type":"object","properties":{"page":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"1-based"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Pixel width the boxes are measured against"},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"source":{"type":"string","enum":["text-layer","ocr","none"],"description":"Where the text came from. `none` means nothing could be read."},"redactions":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["personnummer","orgnummer","iban","bankgiro","plusgiro","ocr_reference","phone","email","address","customer_number","agreement_number","facility_id","meter_id","person_name","card_number","custom"]},"box":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"width":{"type":"number"},"height":{"type":"number"}},"required":["x","y","width","height"],"additionalProperties":false,"description":"Pixels on the rendered page, origin top left."},"confidence":{"type":"number","description":"0-1. Label-anchored hits score highest."}},"required":["kind","box","confidence"],"additionalProperties":false}}},"required":["page","width","height","source","redactions"],"additionalProperties":false}},"counts":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":"How many boxes of each kind, across the whole document. Only the kinds that were actually found appear; a kind that found nothing is absent rather than zero. Keys are the values of `kind` above."},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"pages_without_text":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":"Pages nothing could be read from. Nothing was found there, which is not the same as nothing being there."},"engine":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"],"additionalProperties":false}},"required":["profile","content_type","pages","counts","total","pages_without_text","engine"],"additionalProperties":false},"usage":{"type":"object","properties":{"plan":{"type":"string","enum":["free","starter","pro","business"]},"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Receipts included in the plan per month"},"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["plan","limit","used","remaining"],"additionalProperties":false}},"required":["id","created_at","expires_at","profile","pages","redacted_url","content_type","size_bytes","report","usage"],"additionalProperties":false},"Usage":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"plan":{"type":"string","enum":["free","starter","pro","business"]},"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Receipts included in the plan per month"},"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"period_end":{"description":"End of the current billing period, RFC 3339","type":["string","null"]}},"required":["plan","limit","used","remaining","period_end"],"additionalProperties":false},"Error":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["invalid_request","unauthorized","quota_exceeded","idempotency_key_reuse","rate_limited","payload_too_large","unprocessable_file","not_found","server_error"]},"message":{"type":"string"},"plan":{"type":"string"},"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"upgrade_url":{"type":"string"},"retry_after":{"type":"number"},"conflicting_receipt_id":{"type":"string"}},"required":["type","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}