{"eid":"viber","name":"viber business","domain":"viber.com","resolved_by":"domain","topics":["storage"],"n_records":2,"best_vorder":6,"review":null,"aliases":["Viber Business Messages / REST Bot API","viber business","viber business as a media host","viber.com"],"records":[{"rid":"storage/viber-business-as-a-media-host","card":{"rid":"storage/viber-business-as-a-media-host","eid":"viber","topic":"storage","slug":"viber-business-as-a-media-host","provider":"viber business as a media host","url":"https://developers.viber.com/docs/api/rest-bot-api/#send-message","domain":"viber.com","category":"rejected-provider","tier":null,"verdict":"fails-quota","vorder":6,"grp":"rejected","confidence":"reported","binding":"none","identity_kind":"email","identity_basis":"defaulted","needs_card":null,"needs_phone":null,"needs_id":null,"needs_institution":null,"country":null,"crypto":null,"interfaces":null,"egress_metered":0,"per_object_bytes":null,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-04","n_evidence":1,"usd_month":null,"usd_per_tb_month":null,"summary":"Inverted API: Viber consumes your public image URL, it never produces one. 1-3 MB cap on your file.","duplicate_of":null,"n_unknown":15},"record":{"topic":"storage","slug":"viber-business-as-a-media-host","provider":"viber business as a media host","url":"https://developers.viber.com/docs/api/rest-bot-api/#send-message","category":"rejected-provider","free_tier":{"stated":"Inverted API: Viber consumes your public image URL, it never produces one. 1-3 MB cap on your file.","unit":"none","metered_on":"none","source_url":"https://developers.viber.com/docs/api/rest-bot-api/#send-message","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"not recorded","bytes":null,"source_url":"https://developers.viber.com/docs/api/rest-bot-api/#send-message","notes":"not recorded"},"retention":{"stated":"not recorded","days":null,"source_url":"https://developers.viber.com/docs/api/rest-bot-api/#send-message","notes":null},"egress":{"terms":"not recorded","metered":false},"interface":["unknown"],"interface_detail":null,"tooling":"not recorded","chaining":"not recorded","limits":[],"limits_note":null,"identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"Inverted API: Viber consumes your public image URL, it never produces one. 1-3 MB cap on your file.","confidence":"reported","confidence_note":null,"evidence":[{"url":"https://developers.viber.com/docs/api/rest-bot-api/#send-message","date":"2026-10-21","proved":"Inverted API: Viber consumes your public image URL, it never produces one. 1-3 MB cap on your file."}],"verdict":"fails-quota","verified_at":"2026-10-21T00:00:00.000Z","notes":"Inverted API: Viber consumes your public image URL, it never produces one. 1-3 MB cap on your file.","extras":{"dead_end":{"failure_class":"quota","why":"Inverted API: Viber consumes your public image URL, it never produces one. 1-3 MB cap on your file.","retry_when":null,"first_recorded":"2026-10-21"}},"binding":"none","binding_note":"no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":3.0,"unit":"MB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"unknown":[["$.chaining","not-recorded"],["$.confidence_note","withheld"],["$.egress.terms","not-recorded"],["$.extras.dead_end.retry_when","process"],["$.free_tier.notes","process"],["$.identity_cost.detail","defaulted"],["$.identity_cost.kind","identity-defaulted"],["$.interface","interface-unknown"],["$.interface_detail","withheld"],["$.limits_note","process"],["$.per_object_cap.notes","not-recorded"],["$.per_object_cap.stated","not-recorded"],["$.retention.notes","process"],["$.retention.stated","not-recorded"],["$.tooling","not-recorded"]],"history":[],"drift":[]},{"rid":"storage/viber-business-messages-rest-bot-api","card":{"rid":"storage/viber-business-messages-rest-bot-api","eid":"viber","topic":"storage","slug":"viber-business-messages-rest-bot-api","provider":"Viber Business Messages / REST Bot API","url":"https://developers.viber.com/docs/api/rest-bot-api/","domain":"viber.com","category":"messaging","tier":null,"verdict":"fails-quota","vorder":6,"grp":"rejected","confidence":"reported","binding":"none","identity_kind":"email","identity_basis":"defaulted","needs_card":null,"needs_phone":null,"needs_id":null,"needs_institution":null,"country":null,"crypto":null,"interfaces":"rest","egress_metered":0,"per_object_bytes":null,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-04","n_evidence":1,"usd_month":null,"usd_per_tb_month":null,"summary":"No storage quota — same inversion as Kakao: you pass a picture URL, Viber fetches it. Max image 1 MB on iOS, 3 MB on Android, thumbnail 100 KB.","duplicate_of":null,"n_unknown":8},"record":{"topic":"storage","slug":"viber-business-messages-rest-bot-api","provider":"Viber Business Messages / REST Bot API","url":"https://developers.viber.com/docs/api/rest-bot-api/","category":"messaging","free_tier":{"stated":"No storage quota — same inversion as Kakao: you pass a picture URL, Viber fetches it. Max image 1 MB on iOS, 3 MB on Android, thumbnail 100 KB.","unit":"MB","metered_on":"stored-bytes","source_url":"https://developers.viber.com/docs/api/rest-bot-api/#send-message","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"not stated","source_url":"https://developers.viber.com/docs/api/rest-bot-api/#send-message","notes":"not stated"},"retention":{"stated":"not stated","source_url":"https://developers.viber.com/docs/api/rest-bot-api/#send-message","notes":"not stated"},"egress":{"terms":"N/A — Viber hosts nothing for you. It requires 'The URL must have a resource with a .jpeg, .png or .gif file extension as the last path segment', i.e. it is a consumer of your public URLs.","metered":false},"interface":["rest"],"interface_detail":"rest","tooling":"viber-bot-python / raw REST POST to https://chatapi.viber.com/pa/send_message. Sender-only API.","chaining":"Not chainable. No upload, no media_id, no listing, no retention — structurally incapable of storing a byte.","limits":[],"limits_note":"1 MB (iOS) / 3 MB (Android) image cap applies to the file YOU host; Viber rejects larger. Business messaging also requires partner onboarding for phone-number-based sends.","identity_cost":{"kind":"email","detail":null,"country":null},"reliability_note":"N/A for storage. Recorded only so the next agent does not re-investigate: Viber is a URL consumer, never a URL producer.","confidence":"reported","confidence_note":"One page read moves it to documented.","evidence":[{"url":"https://developers.viber.com/docs/api/rest-bot-api/#send-message","date":"2026-10-21","proved":"read live: 'media | URL of the image (JPEG, PNG, non-animated GIF) | required. The URL must have a resource with a .jpeg, .png or .gif file extension as the last path segment ... Max image size: 1MB on iOS, 3MB on Android.'"}],"verdict":"fails-quota","verified_at":"2026-10-21T00:00:00.000Z","notes":"No storage quota — same inversion as Kakao: you pass a picture URL, Viber fetches it. Max image 1 MB on iOS, 3 MB on Android, thumbnail 100 KB.","extras":{"dead_end":{"failure_class":"quota","why":"No storage quota — same inversion as Kakao: you pass a picture URL, Viber fetches it. Max image 1 MB on iOS, 3 MB on Android, thumbnail 100 KB.","retry_when":null,"first_recorded":"2026-10-21"}},"binding":"none","binding_note":"no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":1.0,"unit":"MB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"unknown":[["$.extras.dead_end.retry_when","process"],["$.free_tier.notes","process"],["$.identity_cost.detail","defaulted"],["$.identity_cost.kind","identity-defaulted"],["$.per_object_cap.notes","not-extracted"],["$.per_object_cap.stated","not-extracted"],["$.retention.notes","not-extracted"],["$.retention.stated","not-extracted"]],"history":[],"drift":[]}]}