@@ -47,6 +47,77 @@ Faxbot supports a lightweight outbound provider type defined by a JSON manifest.
4747: - ` send_fax ` : ` { method, url, headers, body: { kind: json|form|multipart|none, template }, path_params: [], response: { job_id, status, error?, status_map? } } `
4848 - ` get_status ` (optional): ` { ... } `
4949
50+ ### Full example (traits‑first)
51+
52+ ``` jsonc
53+ {
54+ // id: Provider ID (e.g., "acmefax")
55+ " id" : " ringcentral" ,
56+
57+ // name: Display name
58+ " name" : " RingCentral Fax API" ,
59+
60+ // auth: how requests are authenticated
61+ // scheme: none | basic | bearer | api_key_header | api_key_query | ...
62+ " auth" : { " scheme" : " bearer" },
63+
64+ // traits: runtime needs/behavior; overrides defaults in config/provider_traits.json
65+ // kind: "cloud" | "self_hosted"
66+ // requires_ghostscript, requires_tiff, supports_inbound, needs_storage (true|false)
67+ // inbound_verification: "hmac" | "none" | "internal_secret"
68+ // outbound_status_only: true|false
69+ " traits" : {
70+ " kind" : " cloud" ,
71+ " requires_ghostscript" : true ,
72+ " requires_tiff" : false ,
73+ " supports_inbound" : false ,
74+ " inbound_verification" : " none" ,
75+ " needs_storage" : false ,
76+ " outbound_status_only" : false
77+ },
78+
79+ // allowed_domains: explicit host allowlist to reduce SSRF risk
80+ " allowed_domains" : [" platform.ringcentral.com" ],
81+
82+ // timeout_ms: request timeout in milliseconds
83+ " timeout_ms" : 15000 ,
84+
85+ // actions: outbound capabilities.
86+ // send_fax: method/url/headers and body; response maps provider fields
87+ // get_status: optional lookup for a given fax/job id
88+ " actions" : {
89+ " send_fax" : {
90+ " method" : " POST" ,
91+ " url" : " https://platform.ringcentral.com/restapi/v1.0/account/~/extension/~/fax" ,
92+ " headers" : {},
93+ " body" : {
94+ // kind: json | form | multipart | none
95+ " kind" : " multipart" ,
96+ // template variables available: {{to}}, {{from}}, {{file}}, {{file_url}}, {{settings}}, {{creds}}
97+ " template" : " request={\\ " to\\" :[{\\ " phoneNumber\\" :\\ " {{to}}\\" }]}&attachment={{file}}"
98+ },
99+ " path_params" : [],
100+ " response" : {
101+ // job id path in provider response
102+ " job_id" : " id" ,
103+ // optional status mapping
104+ " status" : " messageStatus" ,
105+ " status_map" : { " Queued" : " queued" , " Processing" : " in_progress" , " Sent" : " SUCCESS" , " Error" : " FAILED" },
106+ // optional error field
107+ " error" : " error"
108+ }
109+ },
110+ " get_status" : {
111+ " method" : " GET" ,
112+ " url" : " https://platform.ringcentral.com/restapi/v1.0/account/~/message-store/{{fax_id}}" ,
113+ " headers" : {},
114+ " body" : { " kind" : " none" , " template" : " " },
115+ " response" : { " status" : " messageStatus" }
116+ }
117+ }
118+ }
119+ ```
120+
50121---
51122
52123## Templates
0 commit comments