Submit a contact request
using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Post, RequestUri = new Uri("https://oddslink.app/v1/contact"), Content = new StringContent("{ \"name\": \"example\", \"email\": \"hello@example.com\", \"topic\": \"general\", \"message\": \"example\", \"consent\": true, \"website\": \"example\" }") { Headers = { ContentType = new MediaTypeHeaderValue("application/json") } }};using (var response = await client.SendAsync(request)){ response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);}package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://oddslink.app/v1/contact"
payload := strings.NewReader("{ \"name\": \"example\", \"email\": \"hello@example.com\", \"topic\": \"general\", \"message\": \"example\", \"consent\": true, \"website\": \"example\" }")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");RequestBody body = RequestBody.create(mediaType, "{ \"name\": \"example\", \"email\": \"hello@example.com\", \"topic\": \"general\", \"message\": \"example\", \"consent\": true, \"website\": \"example\" }");Request request = new Request.Builder() .url("https://oddslink.app/v1/contact") .post(body) .addHeader("Content-Type", "application/json") .build();
Response response = client.newCall(request).execute();const url = 'https://oddslink.app/v1/contact';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"name":"example","email":"hello@example.com","topic":"general","message":"example","consent":true,"website":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://oddslink.app/v1/contact \ --header 'Content-Type: application/json' \ --data '{ "name": "example", "email": "hello@example.com", "topic": "general", "message": "example", "consent": true, "website": "example" }'Accepts a website contact form. This operation has no API-key or session requirement, and delivers the message to the support inbox. There is no API operation to retrieve messages.
Request Bodyrequired
Section titled “Request Bodyrequired”Responses
Section titled “ Responses ”The contact request was accepted.
object
Example
{ "status": "accepted"}Headers
Section titled “Headers”Requests used this billing period.
Requests remaining this billing period.
What this one call cost against the allowance (0 for a free call).
This plan’s speed limit, in requests per second.
Requests left in the current one-second window.
Seconds until the speed-limit window resets.
This request’s id, for support and for matching against error.request_id.
A parameter was malformed.
object
object
Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.
Valid case-sensitive book keys on INVALID_BOOKMAKER.
403 only: the plan on the presented key.
403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.
Example
{ "error": { "code": "BAD_REQUEST", "message": "commenceTimeFrom is not a valid ISO-8601 timestamp.", "docs_url": "https://oddslink.app/docs/errors/#bad-request", "request_id": "req_01hz8k3z9e2v6w1x" }}Headers
Section titled “Headers”Requests used this billing period.
Requests remaining this billing period.
What this one call cost against the allowance (0 for a free call).
This plan’s speed limit, in requests per second.
Requests left in the current one-second window.
Seconds until the speed-limit window resets.
This request’s id, for support and for matching against error.request_id.
Too many contact submissions from this address.
object
object
Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.
Valid case-sensitive book keys on INVALID_BOOKMAKER.
403 only: the plan on the presented key.
403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.
Example
{ "error": { "code": "CONTACT_RATE_LIMITED", "message": "too many contact submissions; try again later", "docs_url": "https://oddslink.app/docs/errors/#contact-rate-limited", "request_id": "req_01J8Z5Q2K9V3N7M4" }}Headers
Section titled “Headers”Requests used this billing period.
Requests remaining this billing period.
What this one call cost against the allowance (0 for a free call).
This plan’s speed limit, in requests per second.
Requests left in the current one-second window.
Seconds until the speed-limit window resets.
This request’s id, for support and for matching against error.request_id.
Seconds to wait before retrying on 429 SPEED_LIMIT or 503 ODDS_UNAVAILABLE.
Contact email delivery or abuse protection is temporarily unavailable.
object
object
Stored Unix-second choices on AMBIGUOUS_EVENT or INVALID_STORED_COMMENCE_TIME; independent of dateFormat.
Valid case-sensitive book keys on INVALID_BOOKMAKER.
403 only: the plan on the presented key.
403 only: the lowest plan that includes this request. For history, that depends on how long ago the fixture started as well as on the endpoint.
Example
{ "error": { "code": "CONTACT_UNAVAILABLE", "message": "contact submissions are temporarily unavailable; try again", "docs_url": "https://oddslink.app/docs/errors/#contact-unavailable", "request_id": "req_01J8Z5Q2K9V3N7M4" }}Headers
Section titled “Headers”Requests used this billing period.
Requests remaining this billing period.
What this one call cost against the allowance (0 for a free call).
This plan’s speed limit, in requests per second.
Requests left in the current one-second window.
Seconds until the speed-limit window resets.
This request’s id, for support and for matching against error.request_id.