Get a webhook delivery attempt by ID. Use the response status code, response time, related event, and endpoint details to investigate delivery behavior.
How to validate webhook calls by using the signingSecret value.
Whenever a webhook is called, a X-Satws-Signature header is sent to help verify it. Syntage generates a signature using a hash-based message authentication code (HMAC) with SHA-256 using the signingSecret as key. To verify the hash you can do the following steps:
Step 1: Extract the timestamp and signature from the header
Split the header, using the , character as the separator. The value for the prefix t corresponds to the timestamp and s corresponds to the signature.
Step 2: Prepare the signed_payload string
The signed_payload string is created by concatenating (without spaces):
The timestamp (as a string in Unix format) example: "1656569160"
The character . (dot)
The actual JSON payload (that is, the request body)
Step 3: Determine the expected signature
Compute an HMAC with the SHA256 hash function. Use the endpoint’s signing secret as the key, and use the signed_payload string as the message.
Step 4: Compare the signatures
Compare the signature (or signatures) in the header to the expected signature. For an equality match, compute the difference between the current timestamp and the received timestamp, then decide if the difference is within your tolerance.
To protect against timing attacks, use a constant-time string comparison to compare the expected signature to each of the received signatures.
Here is a code example using PHP with a constant-time string:
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Syntage","colors":{"primary":"#1975FF","light":"#1975FF"},"logo":{"light":"https://mintcdn.com/syntage/NuYQc9gEjSxFZJMz/logo.svg?fit=max\u0026auto=format\u0026n=NuYQc9gEjSxFZJMz\u0026q=85\u0026s=976345a01e03638f59ea0f9cb2a7d8d3","dark":"https://mintcdn.com/syntage/Guui-PNq2RqcZDxJ/logo-dark.svg?fit=max\u0026auto=format\u0026n=Guui-PNq2RqcZDxJ\u0026q=85\u0026s=fb29ea6c7437fb18ca359ce2c22460f9"},"favicon":"https://mintcdn.com/syntage/UtiP7paDbtCUc-2P/favicon.ico?fit=max\u0026auto=format\u0026n=UtiP7paDbtCUc-2P\u0026q=85\u0026s=37b2c70e584adf9b64dedef8bd5fbabb","api":{"mdx":{"auth":{"method":"key","name":"x-api-key"},"server":"https://api.syntage.com"}},"navbar":{"links":[{"href":"https://support.syntage.com","label":"Support"}],"primary":{"type":"button","label":"Go to App","href":"https://app.syntage.com"}},"contextual":{"options":["copy","view","assistant","chatgpt","claude","aistudio","mcp","add-mcp","cursor","vscode","devin-mcp","download-spec"],"display":"header"},"styling":{"latex":false},"navigation":{"languages":[{"language":"en","default":true,"href":""},{"language":"es","href":"es"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"syntage","hasAudioNarration":false,"actualSubdomain":"syntage","customDomains":["docs.syntage.com"],"gitSource":{"type":"github","owner":"syntagecom","repo":"platform.backend","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae269831756046b38775ace","collectionId":"c87bbd66-d47c-4eac-8b08-1bb3a1e52a11","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae269831756046b38775ace"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae3a5e88c9746d5c48d116c","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"en","tag":"API Reference","count":178},{"language":"en","tag":"Datasource: SAT","count":47},{"language":"en","tag":"Core Resources","count":42},{"language":"en","tag":"Resource Guide","count":40},{"language":"es","tag":"Guía de recursos","count":40},{"language":"en","tag":"Insights","count":32},{"language":"en","tag":"Invoices","count":32},{"language":"en","tag":"Datasources","count":28},{"language":"es","tag":"Fuentes de datos","count":28},{"language":"en","tag":"Other Resources","count":23},{"language":"en","tag":"Using Syntage","count":21},{"language":"es","tag":"Usar Syntage","count":21},{"language":"en","tag":"Entities","count":18},{"language":"es","tag":"SAT","count":14},{"language":"es","tag":"Dashboard","count":8},{"language":"es","tag":"Recursos principales","count":6},{"language":"es","tag":"Facturas","count":6},{"language":"es","tag":"Desarrolladores","count":5},{"language":"es","tag":"Comienza aquí","count":5},{"language":"es","tag":"Cómo funciona Syntage","count":5}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"per-site-search-delta","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":"editor-private-page-search","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":"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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/webhook-requests/retrieve-a-webhook-request","slug":"/api-reference/webhook-requests/retrieve-a-webhook-request","pageMetadata":{"openapi":"get /webhook-requests/{id}","title":"Retrieve webhook request","description":"Get a webhook delivery attempt by ID. Use the response status code, response time, related event, and endpoint details to investigate delivery behavior.\n\n### How to validate webhook calls by using the `signingSecret` value.\nWhenever a webhook is called, a `X-Satws-Signature` header is sent to help verify it. Syntage generates a signature using a hash-based message authentication code (HMAC) with SHA-256 using the `signingSecret` as key. To verify the hash you can do the following steps:\n\n#### Step 1: Extract the timestamp and signature from the header\nSplit the header, using the ` , ` character as the separator. The value for the prefix `t` corresponds to the timestamp and `s` corresponds to the signature.\n\n#### Step 2: Prepare the signed_payload string\nThe signed_payload string is created by concatenating (without spaces):\n\n - The timestamp (as a string in Unix format) example: `\"1656569160\"`\n\n - The character `.` (dot)\n\n - The actual JSON payload (that is, the request body)\n\n#### Step 3: Determine the expected signature\nCompute an HMAC with the SHA256 hash function. Use the endpoint’s signing secret as the key, and use the signed_payload string as the message.\n\n#### Step 4: Compare the signatures\nCompare the signature (or signatures) in the header to the expected signature. For an equality match, compute the difference between the current timestamp and the received timestamp, then decide if the difference is within your tolerance.\nTo protect against timing attacks, use a constant-time string comparison to compare the expected signature to each of the received signatures.\n\n#### Here is a code example using PHP with a constant-time string:\n```php\n function splitString(string $separator, $stringValue): array\n {\n return explode($separator, $stringValue);\n }\n\n ## X-Satws-Signature\n $xSatSignatureHeader = 't=1656569160,s=527124c570b27b3f268777b2ba96a9bbdc4b0ecde2885f688beda528f39c4e23';\n\n list($timestamp, $signature) = array_map(function($signatureParam){\n return splitString('=', $signatureParam)[1];\n }, splitString(',', $xSatSignatureHeader));\n\n $bodyPayload = '{\n \"@context\": \"/contexts/Event\",\n \"@id\": \"/events/88a88df8-5c55-44a4-a222-ef9999c999\",\n \"@type\": \"Event\",\n \"id\": \"88a88df8-5c55-44a4-a222-ef9999c999\",\n \"type\": \"credential.updated\",\n \"source\": None,\n \"createdAt\": \"2022-06-29 20:14:09\",\n \"updatedAt\": \"2022-06-29 20:14:09\"\n }';\n $signingSecret = '320639996d9eee9178bf89d26cdbc23d';\n\n $hash = hash_hmac('sha256', sprintf('%d.%s', $timestamp, $bodyPayload), $signingSecret);\n\n print strcmp($hash, $signature);\n```\n","href":"/api-reference/webhook-requests/retrieve-a-webhook-request"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n h3: \"h3\",\n h4: \"h4\",\n li: \"li\",\n p: \"p\",\n pre: \"pre\",\n span: \"span\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n }, {CodeBlock} = _components;\n if (!CodeBlock) _missingMdxReference(\"CodeBlock\", true);\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Get a webhook delivery attempt by ID. Use the response status code, response time, related event, and endpoint details to investigate delivery behavior.\"\n }), \"\\n\", _jsxs(_components.h3, {\n children: [\"How to validate webhook calls by using the \", _jsx(_components.code, {\n children: \"signingSecret\"\n }), \" value.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Whenever a webhook is called, a \", _jsx(_components.code, {\n children: \"X-Satws-Signature\"\n }), \" header is sent to help verify it. Syntage generates a signature using a hash-based message authentication code (HMAC) with SHA-256 using the \", _jsx(_components.code, {\n children: \"signingSecret\"\n }), \" as key. To verify the hash you can do the following steps:\"]\n }), \"\\n\", _jsx(_components.h4, {\n children: \"Step 1: Extract the timestamp and signature from the header\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Split the header, using the \", _jsx(_components.code, {\n children: \",\"\n }), \" character as the separator. The value for the prefix \", _jsx(_components.code, {\n children: \"t\"\n }), \" corresponds to the timestamp and \", _jsx(_components.code, {\n children: \"s\"\n }), \" corresponds to the signature.\"]\n }), \"\\n\", _jsx(_components.h4, {\n children: \"Step 2: Prepare the signed_payload string\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"The signed_payload string is created by concatenating (without spaces):\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"\\n\", _jsxs(_components.p, {\n children: [\"The timestamp (as a string in Unix format) example: \", _jsx(_components.code, {\n children: \"\\\"1656569160\\\"\"\n })]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"\\n\", _jsxs(_components.p, {\n children: [\"The character \", _jsx(_components.code, {\n children: \".\"\n }), \" (dot)\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"\\n\", _jsx(_components.p, {\n children: \"The actual JSON payload (that is, the request body)\"\n }), \"\\n\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.h4, {\n children: \"Step 3: Determine the expected signature\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Compute an HMAC with the SHA256 hash function. Use the endpoint’s signing secret as the key, and use the signed_payload string as the message.\"\n }), \"\\n\", _jsx(_components.h4, {\n children: \"Step 4: Compare the signatures\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Compare the signature (or signatures) in the header to the expected signature. For an equality match, compute the difference between the current timestamp and the received timestamp, then decide if the difference is within your tolerance.\\nTo protect against timing attacks, use a constant-time string comparison to compare the expected signature to each of the received signatures.\"\n }), \"\\n\", _jsx(_components.h4, {\n children: \"Here is a code example using PHP with a constant-time string:\"\n }), \"\\n\", _jsx(CodeBlock, {\n numberOfLines: \"27\",\n language: \"php\",\n children: _jsx(_components.pre, {\n className: \"shiki shiki-themes github-light-default dark-plus\",\n style: {\n backgroundColor: \"#ffffff\",\n \"--shiki-dark-bg\": \"#0B0C0E\",\n color: \"#1f2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n language: \"php\",\n children: _jsxs(_components.code, {\n language: \"php\",\n numberOfLines: \"27\",\n children: [_jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#569CD6\"\n },\n children: \" function\"\n }), _jsx(_components.span, {\n style: {\n color: \"#8250DF\",\n \"--shiki-dark\": \"#DCDCAA\"\n },\n children: \" splitString\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"(\"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#569CD6\"\n },\n children: \"string\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" $separator\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"$stringValue\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \")\"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \":\"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#569CD6\"\n },\n children: \" array\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" {\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#C586C0\"\n },\n children: \" return\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#DCDCAA\"\n },\n children: \" explode\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"(\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"$separator\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"$stringValue\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \");\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" }\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\"\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#6E7781\",\n \"--shiki-dark\": \"#6A9955\"\n },\n children: \" ## X-Satws-Signature\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" $xSatSignatureHeader\"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" =\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" 't=1656569160,s=527124c570b27b3f268777b2ba96a9bbdc4b0ecde2885f688beda528f39c4e23'\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \";\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\"\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#DCDCAA\"\n },\n children: \" list\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"(\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"$timestamp\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"$signature\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \") \"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"=\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#DCDCAA\"\n },\n children: \" array_map\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"(\"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#569CD6\"\n },\n children: \"function\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"(\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"$signatureParam\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"){\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#C586C0\"\n },\n children: \" return\"\n }), _jsx(_components.span, {\n style: {\n color: \"#8250DF\",\n \"--shiki-dark\": \"#DCDCAA\"\n },\n children: \" splitString\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"(\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"'='\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"$signatureParam\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \")[\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#B5CEA8\"\n },\n children: \"1\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"];\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" }, \"\n }), _jsx(_components.span, {\n style: {\n color: \"#8250DF\",\n \"--shiki-dark\": \"#DCDCAA\"\n },\n children: \"splitString\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"(\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"','\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"$xSatSignatureHeader\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"));\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\"\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" $bodyPayload\"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" =\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" '{\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" \\\"@context\\\": \\\"/contexts/Event\\\",\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" \\\"@id\\\": \\\"/events/88a88df8-5c55-44a4-a222-ef9999c999\\\",\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" \\\"@type\\\": \\\"Event\\\",\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" \\\"id\\\": \\\"88a88df8-5c55-44a4-a222-ef9999c999\\\",\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" \\\"type\\\": \\\"credential.updated\\\",\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" \\\"source\\\": None,\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" \\\"createdAt\\\": \\\"2022-06-29 20:14:09\\\",\"\n })\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\",\n children: _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" \\\"updatedAt\\\": \\\"2022-06-29 20:14:09\\\"\"\n })\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" }'\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \";\"\n })]\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" $signingSecret\"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" =\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \" '320639996d9eee9178bf89d26cdbc23d'\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \";\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\"\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \" $hash\"\n }), _jsx(_components.span, {\n style: {\n color: \"#CF222E\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \" =\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#DCDCAA\"\n },\n children: \" hash_hmac\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"(\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"'sha256'\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#DCDCAA\"\n },\n children: \"sprintf\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"(\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0A3069\",\n \"--shiki-dark\": \"#CE9178\"\n },\n children: \"'%d.%s'\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"$timestamp\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"$bodyPayload\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"), \"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"$signingSecret\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \");\"\n })]\n }), \"\\n\", _jsx(_components.span, {\n className: \"line\"\n }), \"\\n\", _jsxs(_components.span, {\n className: \"line\",\n children: [_jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#DCDCAA\"\n },\n children: \" print\"\n }), _jsx(_components.span, {\n style: {\n color: \"#0550AE\",\n \"--shiki-dark\": \"#DCDCAA\"\n },\n children: \" strcmp\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \"(\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"$hash\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \", \"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#9CDCFE\"\n },\n children: \"$signature\"\n }), _jsx(_components.span, {\n style: {\n color: \"#1F2328\",\n \"--shiki-dark\": \"#D4D4D4\"\n },\n children: \");\"\n })]\n }), \"\\n\"]\n })\n })\n })]\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};\nfunction _missingMdxReference(id, component) {\n throw new Error(\"Expected \" + (component ? \"component\" : \"object\") + \" `\" + id + \"` to be defined: you likely forgot to import, pass, or provide it.\");\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":{"openapi":"get /webhook-requests/{id}","title":"Retrieve webhook request","description":"Get a webhook delivery attempt by ID. Use the response status code, response time, related event, and endpoint details to investigate delivery behavior.\n\n### How to validate webhook calls by using the `signingSecret` value.\nWhenever a webhook is called, a `X-Satws-Signature` header is sent to help verify it. Syntage generates a signature using a hash-based message authentication code (HMAC) with SHA-256 using the `signingSecret` as key. To verify the hash you can do the following steps:\n\n#### Step 1: Extract the timestamp and signature from the header\nSplit the header, using the ` , ` character as the separator. The value for the prefix `t` corresponds to the timestamp and `s` corresponds to the signature.\n\n#### Step 2: Prepare the signed_payload string\nThe signed_payload string is created by concatenating (without spaces):\n\n - The timestamp (as a string in Unix format) example: `\"1656569160\"`\n\n - The character `.` (dot)\n\n - The actual JSON payload (that is, the request body)\n\n#### Step 3: Determine the expected signature\nCompute an HMAC with the SHA256 hash function. Use the endpoint’s signing secret as the key, and use the signed_payload string as the message.\n\n#### Step 4: Compare the signatures\nCompare the signature (or signatures) in the header to the expected signature. For an equality match, compute the difference between the current timestamp and the received timestamp, then decide if the difference is within your tolerance.\nTo protect against timing attacks, use a constant-time string comparison to compare the expected signature to each of the received signatures.\n\n#### Here is a code example using PHP with a constant-time string:\n```php\n function splitString(string $separator, $stringValue): array\n {\n return explode($separator, $stringValue);\n }\n\n ## X-Satws-Signature\n $xSatSignatureHeader = 't=1656569160,s=527124c570b27b3f268777b2ba96a9bbdc4b0ecde2885f688beda528f39c4e23';\n\n list($timestamp, $signature) = array_map(function($signatureParam){\n return splitString('=', $signatureParam)[1];\n }, splitString(',', $xSatSignatureHeader));\n\n $bodyPayload = '{\n \"@context\": \"/contexts/Event\",\n \"@id\": \"/events/88a88df8-5c55-44a4-a222-ef9999c999\",\n \"@type\": \"Event\",\n \"id\": \"88a88df8-5c55-44a4-a222-ef9999c999\",\n \"type\": \"credential.updated\",\n \"source\": None,\n \"createdAt\": \"2022-06-29 20:14:09\",\n \"updatedAt\": \"2022-06-29 20:14:09\"\n }';\n $signingSecret = '320639996d9eee9178bf89d26cdbc23d';\n\n $hash = hash_hmac('sha256', sprintf('%d.%s', $timestamp, $bodyPayload), $signingSecret);\n\n print strcmp($hash, $signature);\n```\n","href":"/api-reference/webhook-requests/retrieve-a-webhook-request"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Webhook Requests"],"operationId":"GetWebhookRequest","summary":"Retrieve webhook request","description":"Get a webhook delivery attempt by ID. Use the response status code, response time, related event, and endpoint details to investigate delivery behavior.\n\n### How to validate webhook calls by using the `signingSecret` value.\nWhenever a webhook is called, a `X-Satws-Signature` header is sent to help verify it. Syntage generates a signature using a hash-based message authentication code (HMAC) with SHA-256 using the `signingSecret` as key. To verify the hash you can do the following steps:\n\n#### Step 1: Extract the timestamp and signature from the header\nSplit the header, using the ` , ` character as the separator. The value for the prefix `t` corresponds to the timestamp and `s` corresponds to the signature.\n\n#### Step 2: Prepare the signed_payload string\nThe signed_payload string is created by concatenating (without spaces):\n\n - The timestamp (as a string in Unix format) example: `\"1656569160\"`\n\n - The character `.` (dot)\n\n - The actual JSON payload (that is, the request body)\n\n#### Step 3: Determine the expected signature\nCompute an HMAC with the SHA256 hash function. Use the endpoint’s signing secret as the key, and use the signed_payload string as the message.\n\n#### Step 4: Compare the signatures\nCompare the signature (or signatures) in the header to the expected signature. For an equality match, compute the difference between the current timestamp and the received timestamp, then decide if the difference is within your tolerance.\nTo protect against timing attacks, use a constant-time string comparison to compare the expected signature to each of the received signatures.\n\n#### Here is a code example using PHP with a constant-time string:\n```php\n function splitString(string $separator, $stringValue): array\n {\n return explode($separator, $stringValue);\n }\n\n ## X-Satws-Signature\n $xSatSignatureHeader = 't=1656569160,s=527124c570b27b3f268777b2ba96a9bbdc4b0ecde2885f688beda528f39c4e23';\n\n list($timestamp, $signature) = array_map(function($signatureParam){\n return splitString('=', $signatureParam)[1];\n }, splitString(',', $xSatSignatureHeader));\n\n $bodyPayload = '{\n \"@context\": \"/contexts/Event\",\n \"@id\": \"/events/88a88df8-5c55-44a4-a222-ef9999c999\",\n \"@type\": \"Event\",\n \"id\": \"88a88df8-5c55-44a4-a222-ef9999c999\",\n \"type\": \"credential.updated\",\n \"source\": None,\n \"createdAt\": \"2022-06-29 20:14:09\",\n \"updatedAt\": \"2022-06-29 20:14:09\"\n }';\n $signingSecret = '320639996d9eee9178bf89d26cdbc23d';\n\n $hash = hash_hmac('sha256', sprintf('%d.%s', $timestamp, $bodyPayload), $signingSecret);\n\n print strcmp($hash, $signature);\n```\n","parameters":["94c8b299-cd91-444d-ba2d-94d5294b518d"],"responses":{"200":"04432e0e-9b80-4e59-ae4f-40cd46a619f8","401":"4e46160f-531c-4fd8-b99d-1f7a2b1e22df","404":"b9642baa-213e-43df-8c57-25a3cc6dfe8d"},"method":"get","type":"path","servers":["122cc5df-bc3c-435f-93be-a56073b9a96d","5e318eef-11aa-4d4d-843b-003790a9543f"],"security":["ac1855ec-0875-49ed-93ee-237b416e640e"],"path":"/webhook-requests/{id}","baseUrlOptions":["https://api.syntage.com","https://api.sandbox.syntage.com"],"title":"Retrieve webhook request","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"94c8b299-cd91-444d-ba2d-94d5294b518d":{"name":"id","in":"path","required":true,"example":"91106968-1abd-4d64-85c1-4e73d96fb997","schema":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"responses":{"04432e0e-9b80-4e59-ae4f-40cd46a619f8":{"description":"Webhook request resource response","content":{"application/ld+json":{"schema":{"type":"object","properties":{"@context":{"type":"string","default":"/contexts/WebhookRequest","uniqueKey":"@context","typeLabel":"string"},"@id":{"type":"string","format":"iri-reference","description":"Webhook request IRI","example":"/webhook-requests/91106968-1abd-4d64-85c1-4e73d96fb997","uniqueKey":"@id","typeLabel":"string\u003ciri-reference>"},"@type":{"type":"string","default":"WebhookRequest","uniqueKey":"@type","typeLabel":"string"},"id":{"type":"string","format":"uuid","example":"e0a24894-7fbf-48ae-bfb0-efaae30a6319","uniqueKey":"id","typeLabel":"string\u003cuuid>"},"webhookEndpoint":{"type":"object","properties":{"@id":{"type":"string","format":"iri-reference","description":"Webhook endpoint IRI","example":"/webhook-endpoints/91106968-1abd-4d64-85c1-4e73d96fb997","uniqueKey":"webhookEndpoint.@id","typeLabel":"string\u003ciri-reference>"},"@type":{"type":"string","default":"WebhookEndpoint","uniqueKey":"webhookEndpoint.@type","typeLabel":"string"},"id":{"type":"string","format":"uuid","example":"e0a24894-7fbf-48ae-bfb0-efaae30a6319","uniqueKey":"webhookEndpoint.id","typeLabel":"string\u003cuuid>"},"url":{"type":"string","format":"url","description":"Public HTTPS URL where Syntage sends matching webhook events","example":"https://example.com/webhooks/syntage","uniqueKey":"webhookEndpoint.url","typeLabel":"string\u003curl>"},"signingSecret":{"type":"string","description":"Secret used to verify `X-Syntage-Signature` delivery headers","example":"54471a278d46c86ec6cd365983552a28","uniqueKey":"webhookEndpoint.signingSecret","typeLabel":"string"},"events":{"type":"array","example":["extraction.updated","invoice.created"],"description":"Event types delivered to this endpoint","items":{"type":"string","description":"Event type delivered to a webhook endpoint","enum":["credential.created","credential.updated","credential.deleted","link.created","link.updated","link.deleted","extraction.created","extraction.updated","invoice.created","invoice.updated","invoice.deleted","tax_return.created","tax_return.updated","tax_return.deleted","file.created","export.created","export.updated","tax_status.created","tax_status.updated","tax_status.deleted","tax_compliance_check.created","tax_compliance_check.updated","tax_compliance_check.deleted","tax_retention.created","tax_retention.updated","tax_retention.deleted","invoice_payment.created","invoice_payment.updated","invoice_line_item.created","invoice_line_item.updated","electronic_accounting_record.created","electronic_accounting_record.updated","rpc_entidades.created","rpc_entidades.updated","rpc_socios.created","rpc_socios.updated","rpc_acto.created","rpc_acto.updated","shareholder_relation.created","shareholder_relation.updated","shareholder_relation_source.created","rug_garantia.created","rug_garantia.updated","buro_de_credito_report.created","buro_de_credito_report.updated","background_check.created","sat_certificate.created","sat_certificate.updated","company_verification_report.created","company_verification_report.updated"],"uniqueKey":"webhookEndpoint.events.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"webhookEndpoint.events","typeLabel":"enum\u003cstring>[]"},"enabled":{"type":"boolean","description":"Whether Syntage sends matching events to this endpoint","default":true,"example":true,"uniqueKey":"webhookEndpoint.enabled","typeLabel":"boolean"},"contentType":{"type":"string","description":"Content type used for webhook delivery payloads","default":"application/ld+json","enum":["application/ld+json","application/json"],"uniqueKey":"webhookEndpoint.contentType","typeLabel":"enum\u003cstring>"},"createdAt":{"type":"string","description":"Date and time the resource was created","example":"2020-01-01T12:15:00.000Z","uniqueKey":"webhookEndpoint.createdAt","typeLabel":"string"},"updatedAt":{"type":"string","description":"Date and time the resource was last updated","example":"2020-01-01T12:15:00.000Z","uniqueKey":"webhookEndpoint.updatedAt","typeLabel":"string"}},"description":"Webhook endpoint that received the delivery attempt","uniqueKey":"webhookEndpoint","typeLabel":"object"},"url":{"type":"string","format":"url","description":"Endpoint URL used for the delivery attempt","example":"https://example.com/webhooks/syntage","uniqueKey":"url","typeLabel":"string\u003curl>"},"responseStatusCode":{"type":"integer","description":"HTTP status code returned by the endpoint, or `0` when Syntage did not receive a response","example":200,"uniqueKey":"responseStatusCode","typeLabel":"integer"},"responseTime":{"type":"number","description":"Delivery response time in seconds","example":0.21983,"uniqueKey":"responseTime","typeLabel":"number"},"createdAt":{"type":"string","description":"Date and time the resource was created","example":"2020-01-01T12:15:00.000Z","uniqueKey":"createdAt","typeLabel":"string"},"updatedAt":{"type":"string","description":"Date and time the resource was last updated","example":"2020-01-01T12:15:00.000Z","uniqueKey":"updatedAt","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"@context":"/contexts/WebhookRequest","@id":"/webhook-requests/91106968-1abd-4d64-85c1-4e73d96fb997","@type":"WebhookRequest","id":"e0a24894-7fbf-48ae-bfb0-efaae30a6319","webhookEndpoint":{"@id":"/webhook-endpoints/91106968-1abd-4d64-85c1-4e73d96fb997","@type":"WebhookEndpoint","id":"e0a24894-7fbf-48ae-bfb0-efaae30a6319","url":"https://example.com/webhooks/syntage","signingSecret":"54471a278d46c86ec6cd365983552a28","events":["extraction.updated","invoice.created"],"enabled":true,"contentType":"application/ld+json","createdAt":"2020-01-01T12:15:00.000Z","updatedAt":"2020-01-01T12:15:00.000Z"},"url":"https://example.com/webhooks/syntage","responseStatusCode":200,"responseTime":0.21983,"createdAt":"2020-01-01T12:15:00.000Z","updatedAt":"2020-01-01T12:15:00.000Z"}}},"exampleType":"generated"}},"exampleType":"generated"},"4e46160f-531c-4fd8-b99d-1f7a2b1e22df":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"b9642baa-213e-43df-8c57-25a3cc6dfe8d":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","uniqueKey":"message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"ac1855ec-0875-49ed-93ee-237b416e640e":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Your API key is available in the [Production](https://app.syntage.com/settings/api-keys) and [Sandbox](https://app.sandbox.syntage.com/settings/api-keys) dashboards.\n","scopes":[],"schemeName":"ApiKey"}}},"servers":{"122cc5df-bc3c-435f-93be-a56073b9a96d":{"url":"https://api.syntage.com","description":"Production"},"5e318eef-11aa-4d4d-843b-003790a9543f":{"url":"https://api.sandbox.syntage.com","description":"Sandbox"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Your API key is available in the [Production](https://app.syntage.com/settings/api-keys) and [Sandbox](https://app.sandbox.syntage.com/settings/api-keys) dashboards.\n","scopes":[],"schemeName":"ApiKey"},"schema":{"title":"X-API-Key","type":"string","description":"Your API key is available in the [Production](https://app.syntage.com/settings/api-keys) and [Sandbox](https://app.sandbox.syntage.com/settings/api-keys) dashboards.\n","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKey","name":"X-API-Key"}],"title":"ApiKey"}]},"originalFileLocation":"openapi/openapi.yaml"},"subdomain":"syntage","siteName":"Syntage","title":"Retrieve webhook request - Syntage","navMaps":{"firstHrefInVersion":{"2020-06-28":{"href":"/api-reference/webhook-requests/retrieve-a-webhook-request","matchLevel":0}},"firstHrefInLanguage":{"en":{"href":"/api-reference/webhook-requests/retrieve-a-webhook-request","matchLevel":0},"es":{"href":"/es","matchLevel":4}}},"lastModified":"2026-06-24T20:00:41.789Z","originalFileLocation":"api-reference/webhook-requests/retrieve-a-webhook-request.mdx","locale":"en"},"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=\"Get a webhook delivery attempt by ID. Use the response status code, response time, related event, and endpoint details to investigate delivery behavior. ### How to validate webhook calls by using the signingSecret value. Whenever a webhook is called, a X-Satws-Signature header is sent to help verify it. Syntage generates a signature using a hash-based message authentication code (HMAC) with SHA-256 using the signingSecret as key. To verify the hash you can do the following steps: #### Step 1: Extract the timestamp and signature from the header Split the header, using the , character as the separator. The value for the prefix t corresponds to the timestamp and s corresponds to the signature. #### Step 2: Prepare the signed_payload string The signed_payload string is created by concatenating (without spaces): - The timestamp (as a string in Unix format) example: \u0026quot;1656569160\u0026quot; - The character . (dot) - The actual JSON payload (that is, the request body) #### Step 3: Determine the expected signature Compute an HMAC with the SHA256 hash function. Use the endpoint’s signing secret as the key, and use the signed_payload string as the message. #### Step 4: Compare the signatures Compare the signature (or signatures) in the header to the expected signature. For an equality match, compute the difference between the current timestamp and the received timestamp, then decide if the difference is within your tolerance. To protect against timing attacks, use a constant-time string comparison to compare the expected signature to each of the received signatures. #### Here is a code example using PHP with a constant-time string: php function splitString(string $separator, $stringValue): array { return explode($separator, $stringValue); } ## X-Satws-Signature $xSatSignatureHeader = \u0026#x27;t=1656569160,s=527124c570b27b3f268777b2ba96a9bbdc4b0ecde2885f688beda528f39c4e23\u0026#x27;; list($timestamp, $signature) = array_map(function($signatureParam){ return splitString(\u0026#x27;=\u0026#x27;, $signatureParam)[1]; }, splitString(\u0026#x27;,\u0026#x27;, $xSatSignatureHeader)); $bodyPayload = \u0026#x27;{ \u0026quot;@context\u0026quot;: \u0026quot;/contexts/Event\u0026quot;, \u0026quot;@id\u0026quot;: \u0026quot;/events/88a88df8-5c55-44a4-a222-ef9999c999\u0026quot;, \u0026quot;@type\u0026quot;: \u0026quot;Event\u0026quot;, \u0026quot;id\u0026quot;: \u0026quot;88a88df8-5c55-44a4-a222-ef9999c999\u0026quot;, \u0026quot;type\u0026quot;: \u0026quot;credential.updated\u0026quot;, \u0026quot;source\u0026quot;: None, \u0026quot;createdAt\u0026quot;: \u0026quot;2022-06-29 20:14:09\u0026quot;, \u0026quot;updatedAt\u0026quot;: \u0026quot;2022-06-29 20:14:09\u0026quot; }\u0026#x27;; $signingSecret = \u0026#x27;320639996d9eee9178bf89d26cdbc23d\u0026#x27;; $hash = hash_hmac(\u0026#x27;sha256\u0026#x27;, sprintf(\u0026#x27;%d.%s\u0026#x27;, $timestamp, $bodyPayload), $signingSecret); print strcmp($hash, $signature);\">\u003cmeta data-mint-head name=\"application-name\" content=\"Syntage\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/syntage/4Xa1qFNlW0Ql_9Ak/_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/syntage/4Xa1qFNlW0Ql_9Ak/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/syntage/4Xa1qFNlW0Ql_9Ak/_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/syntage/4Xa1qFNlW0Ql_9Ak/_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/syntage/4Xa1qFNlW0Ql_9Ak/_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/syntage/4Xa1qFNlW0Ql_9Ak/_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/syntage/4Xa1qFNlW0Ql_9Ak/_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/syntage/4Xa1qFNlW0Ql_9Ak/_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/syntage/4Xa1qFNlW0Ql_9Ak/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Retrieve webhook request - Syntage\">\u003cmeta data-mint-head property=\"og:description\" content=\"Get a webhook delivery attempt by ID. Use the response status code, response time, related event, and endpoint details to investigate delivery behavior. ### How to validate webhook calls by using the signingSecret value. Whenever a webhook is called, a X-Satws-Signature header is sent to help verify it. Syntage generates a signature using a hash-based message authentication code (HMAC) with SHA-256 using the signingSecret as key. To verify the hash you can do the following steps: #### Step 1: Extract the timestamp and signature from the header Split the header, using the , character as the separator. The value for the prefix t corresponds to the timestamp and s corresponds to the signature. #### Step 2: Prepare the signed_payload string The signed_payload string is created by concatenating (without spaces): - The timestamp (as a string in Unix format) example: \u0026quot;1656569160\u0026quot; - The character . (dot) - The actual JSON payload (that is, the request body) #### Step 3: Determine the expected signature Compute an HMAC with the SHA256 hash function. Use the endpoint’s signing secret as the key, and use the signed_payload string as the message. #### Step 4: Compare the signatures Compare the signature (or signatures) in the header to the expected signature. For an equality match, compute the difference between the current timestamp and the received timestamp, then decide if the difference is within your tolerance. To protect against timing attacks, use a constant-time string comparison to compare the expected signature to each of the received signatures. #### Here is a code example using PHP with a constant-time string: php function splitString(string $separator, $stringValue): array { return explode($separator, $stringValue); } ## X-Satws-Signature $xSatSignatureHeader = \u0026#x27;t=1656569160,s=527124c570b27b3f268777b2ba96a9bbdc4b0ecde2885f688beda528f39c4e23\u0026#x27;; list($timestamp, $signature) = array_map(function($signatureParam){ return splitString(\u0026#x27;=\u0026#x27;, $signatureParam)[1]; }, splitString(\u0026#x27;,\u0026#x27;, $xSatSignatureHeader)); $bodyPayload = \u0026#x27;{ \u0026quot;@context\u0026quot;: \u0026quot;/contexts/Event\u0026quot;, \u0026quot;@id\u0026quot;: \u0026quot;/events/88a88df8-5c55-44a4-a222-ef9999c999\u0026quot;, \u0026quot;@type\u0026quot;: \u0026quot;Event\u0026quot;, \u0026quot;id\u0026quot;: \u0026quot;88a88df8-5c55-44a4-a222-ef9999c999\u0026quot;, \u0026quot;type\u0026quot;: \u0026quot;credential.updated\u0026quot;, \u0026quot;source\u0026quot;: None, \u0026quot;createdAt\u0026quot;: \u0026quot;2022-06-29 20:14:09\u0026quot;, \u0026quot;updatedAt\u0026quot;: \u0026quot;2022-06-29 20:14:09\u0026quot; }\u0026#x27;; $signingSecret = \u0026#x27;320639996d9eee9178bf89d26cdbc23d\u0026#x27;; $hash = hash_hmac(\u0026#x27;sha256\u0026#x27;, sprintf(\u0026#x27;%d.%s\u0026#x27;, $timestamp, $bodyPayload), $signingSecret); print strcmp($hash, $signature);\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Syntage\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.syntage.com/api-reference/webhook-requests/retrieve-a-webhook-request\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://syntage.mintlify.app/_mintlify/api/og/v2?division=Webhook+Requests\u0026amp;title=Retrieve+webhook+request\u0026amp;description=Get+a+webhook+delivery+attempt+by+ID.+Use+the+response+status+code%2C+response+time%2C+related+event%2C+and+endpoint+details+to+investigate+delivery+behavior.%0A%0A%23%23%23+Ho\u0026amp;theme=71db65a3f59ffd9e5f96cd77\u0026amp;signature=89b9d0ad65b127302143de70d58fe4c2febfadff313747b7cfd70e6c01dcaf1b\">\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=\"Retrieve webhook request - Syntage\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Get a webhook delivery attempt by ID. Use the response status code, response time, related event, and endpoint details to investigate delivery behavior. ### How to validate webhook calls by using the signingSecret value. Whenever a webhook is called, a X-Satws-Signature header is sent to help verify it. Syntage generates a signature using a hash-based message authentication code (HMAC) with SHA-256 using the signingSecret as key. To verify the hash you can do the following steps: #### Step 1: Extract the timestamp and signature from the header Split the header, using the , character as the separator. The value for the prefix t corresponds to the timestamp and s corresponds to the signature. #### Step 2: Prepare the signed_payload string The signed_payload string is created by concatenating (without spaces): - The timestamp (as a string in Unix format) example: \u0026quot;1656569160\u0026quot; - The character . (dot) - The actual JSON payload (that is, the request body) #### Step 3: Determine the expected signature Compute an HMAC with the SHA256 hash function. Use the endpoint’s signing secret as the key, and use the signed_payload string as the message. #### Step 4: Compare the signatures Compare the signature (or signatures) in the header to the expected signature. For an equality match, compute the difference between the current timestamp and the received timestamp, then decide if the difference is within your tolerance. To protect against timing attacks, use a constant-time string comparison to compare the expected signature to each of the received signatures. #### Here is a code example using PHP with a constant-time string: php function splitString(string $separator, $stringValue): array { return explode($separator, $stringValue); } ## X-Satws-Signature $xSatSignatureHeader = \u0026#x27;t=1656569160,s=527124c570b27b3f268777b2ba96a9bbdc4b0ecde2885f688beda528f39c4e23\u0026#x27;; list($timestamp, $signature) = array_map(function($signatureParam){ return splitString(\u0026#x27;=\u0026#x27;, $signatureParam)[1]; }, splitString(\u0026#x27;,\u0026#x27;, $xSatSignatureHeader)); $bodyPayload = \u0026#x27;{ \u0026quot;@context\u0026quot;: \u0026quot;/contexts/Event\u0026quot;, \u0026quot;@id\u0026quot;: \u0026quot;/events/88a88df8-5c55-44a4-a222-ef9999c999\u0026quot;, \u0026quot;@type\u0026quot;: \u0026quot;Event\u0026quot;, \u0026quot;id\u0026quot;: \u0026quot;88a88df8-5c55-44a4-a222-ef9999c999\u0026quot;, \u0026quot;type\u0026quot;: \u0026quot;credential.updated\u0026quot;, \u0026quot;source\u0026quot;: None, \u0026quot;createdAt\u0026quot;: \u0026quot;2022-06-29 20:14:09\u0026quot;, \u0026quot;updatedAt\u0026quot;: \u0026quot;2022-06-29 20:14:09\u0026quot; }\u0026#x27;; $signingSecret = \u0026#x27;320639996d9eee9178bf89d26cdbc23d\u0026#x27;; $hash = hash_hmac(\u0026#x27;sha256\u0026#x27;, sprintf(\u0026#x27;%d.%s\u0026#x27;, $timestamp, $bodyPayload), $signingSecret); print strcmp($hash, $signature);\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://syntage.mintlify.app/_mintlify/api/og/v2?division=Webhook+Requests\u0026amp;title=Retrieve+webhook+request\u0026amp;description=Get+a+webhook+delivery+attempt+by+ID.+Use+the+response+status+code%2C+response+time%2C+related+event%2C+and+endpoint+details+to+investigate+delivery+behavior.%0A%0A%23%23%23+Ho\u0026amp;theme=71db65a3f59ffd9e5f96cd77\u0026amp;signature=89b9d0ad65b127302143de70d58fe4c2febfadff313747b7cfd70e6c01dcaf1b\">\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/syntage/4Xa1qFNlW0Ql_9Ak/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Syntage\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1975FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.syntage.com/api-reference/webhook-requests/retrieve-a-webhook-request\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/webhook-requests/retrieve-a-webhook-request.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.syntage.com/#organization\",\"name\":\"Syntage\",\"url\":\"https://docs.syntage.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/syntage/NuYQc9gEjSxFZJMz/logo.svg?fit=max\u0026auto=format\u0026n=NuYQc9gEjSxFZJMz\u0026q=85\u0026s=976345a01e03638f59ea0f9cb2a7d8d3\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.syntage.com#website\",\"name\":\"Syntage\",\"url\":\"https://docs.syntage.com\",\"publisher\":{\"@id\":\"https://docs.syntage.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.syntage.com/api-reference/webhook-requests/retrieve-a-webhook-request#webpage\",\"url\":\"https://docs.syntage.com/api-reference/webhook-requests/retrieve-a-webhook-request\",\"name\":\"Retrieve webhook request\",\"description\":\"Get a webhook delivery attempt by ID. Use the response status code, response time, related event, and endpoint details to investigate delivery behavior. ### How to validate webhook calls by using the signingSecret value. Whenever a webhook is called, a X-Satws-Signature header is sent to help verify it. Syntage generates a signature using a hash-based message authentication code (HMAC) with SHA-256 using the signingSecret as key. To verify the hash you can do the following steps: #### Step 1: Extract the timestamp and signature from the header Split the header, using the , character as the separator. The value for the prefix t corresponds to the timestamp and s corresponds to the signature. #### Step 2: Prepare the signed_payload string The signed_payload string is created by concatenating (without spaces): - The timestamp (as a string in Unix format) example: \\\"1656569160\\\" - The character . (dot) - The actual JSON payload (that is, the request body) #### Step 3: Determine the expected signature Compute an HMAC with the SHA256 hash function. Use the endpoint’s signing secret as the key, and use the signed_payload string as the message. #### Step 4: Compare the signatures Compare the signature (or signatures) in the header to the expected signature. For an equality match, compute the difference between the current timestamp and the received timestamp, then decide if the difference is within your tolerance. To protect against timing attacks, use a constant-time string comparison to compare the expected signature to each of the received signatures. #### Here is a code example using PHP with a constant-time string: php function splitString(string $separator, $stringValue): array { return explode($separator, $stringValue); } ## X-Satws-Signature $xSatSignatureHeader = 't=1656569160,s=527124c570b27b3f268777b2ba96a9bbdc4b0ecde2885f688beda528f39c4e23'; list($timestamp, $signature) = array_map(function($signatureParam){ return splitString('=', $signatureParam)[1]; }, splitString(',', $xSatSignatureHeader)); $bodyPayload = '{ \\\"@context\\\": \\\"/contexts/Event\\\", \\\"@id\\\": \\\"/events/88a88df8-5c55-44a4-a222-ef9999c999\\\", \\\"@type\\\": \\\"Event\\\", \\\"id\\\": \\\"88a88df8-5c55-44a4-a222-ef9999c999\\\", \\\"type\\\": \\\"credential.updated\\\", \\\"source\\\": None, \\\"createdAt\\\": \\\"2022-06-29 20:14:09\\\", \\\"updatedAt\\\": \\\"2022-06-29 20:14:09\\\" }'; $signingSecret = '320639996d9eee9178bf89d26cdbc23d'; $hash = hash_hmac('sha256', sprintf('%d.%s', $timestamp, $bodyPayload), $signingSecret); print strcmp($hash, $signature);\",\"dateModified\":\"2026-06-24T20:00:41.789Z\",\"isPartOf\":{\"@id\":\"https://docs.syntage.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.syntage.com/api-reference/webhook-requests/retrieve-a-webhook-request#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.syntage.com/api-reference/webhook-requests/retrieve-a-webhook-request#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Webhooks\",\"item\":\"https://docs.syntage.com/api-reference/webhook-endpoints/list-all-webhook-endpoints\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Webhook Requests\",\"item\":\"https://docs.syntage.com/api-reference/webhook-requests/list-all-webhook-requests\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Retrieve webhook request\",\"item\":\"https://docs.syntage.com/api-reference/webhook-requests/retrieve-a-webhook-request\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.syntage.com/api-reference/webhook-requests/retrieve-a-webhook-request#apireference\",\"headline\":\"Retrieve webhook request\",\"name\":\"Retrieve webhook request\",\"description\":\"Get a webhook delivery attempt by ID. Use the response status code, response time, related event, and endpoint details to investigate delivery behavior. ### How to validate webhook calls by using the signingSecret value. Whenever a webhook is called, a X-Satws-Signature header is sent to help verify it. Syntage generates a signature using a hash-based message authentication code (HMAC) with SHA-256 using the signingSecret as key. To verify the hash you can do the following steps: #### Step 1: Extract the timestamp and signature from the header Split the header, using the , character as the separator. The value for the prefix t corresponds to the timestamp and s corresponds to the signature. #### Step 2: Prepare the signed_payload string The signed_payload string is created by concatenating (without spaces): - The timestamp (as a string in Unix format) example: \\\"1656569160\\\" - The character . (dot) - The actual JSON payload (that is, the request body) #### Step 3: Determine the expected signature Compute an HMAC with the SHA256 hash function. Use the endpoint’s signing secret as the key, and use the signed_payload string as the message. #### Step 4: Compare the signatures Compare the signature (or signatures) in the header to the expected signature. For an equality match, compute the difference between the current timestamp and the received timestamp, then decide if the difference is within your tolerance. To protect against timing attacks, use a constant-time string comparison to compare the expected signature to each of the received signatures. #### Here is a code example using PHP with a constant-time string: php function splitString(string $separator, $stringValue): array { return explode($separator, $stringValue); } ## X-Satws-Signature $xSatSignatureHeader = 't=1656569160,s=527124c570b27b3f268777b2ba96a9bbdc4b0ecde2885f688beda528f39c4e23'; list($timestamp, $signature) = array_map(function($signatureParam){ return splitString('=', $signatureParam)[1]; }, splitString(',', $xSatSignatureHeader)); $bodyPayload = '{ \\\"@context\\\": \\\"/contexts/Event\\\", \\\"@id\\\": \\\"/events/88a88df8-5c55-44a4-a222-ef9999c999\\\", \\\"@type\\\": \\\"Event\\\", \\\"id\\\": \\\"88a88df8-5c55-44a4-a222-ef9999c999\\\", \\\"type\\\": \\\"credential.updated\\\", \\\"source\\\": None, \\\"createdAt\\\": \\\"2022-06-29 20:14:09\\\", \\\"updatedAt\\\": \\\"2022-06-29 20:14:09\\\" }'; $signingSecret = '320639996d9eee9178bf89d26cdbc23d'; $hash = hash_hmac('sha256', sprintf('%d.%s', $timestamp, $bodyPayload), $signingSecret); print strcmp($hash, $signature);\",\"url\":\"https://docs.syntage.com/api-reference/webhook-requests/retrieve-a-webhook-request\",\"mainEntityOfPage\":{\"@id\":\"https://docs.syntage.com/api-reference/webhook-requests/retrieve-a-webhook-request#webpage\"},\"dateModified\":\"2026-06-24T20:00:41.789Z\",\"publisher\":{\"@id\":\"https://docs.syntage.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.syntage.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Syntage\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Syntage","nav":{"global":null,"languages":[{"language":"en","default":true,"tabs":[{"tab":"Using Syntage","pages":[{"title":"Using Syntage","href":""}]},{"tab":"Resource Guide","pages":[{"title":"Resource Guide","href":"/resources/core/entities"}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/developers/overview"}]},{"tab":"API Reference","versions":[{"version":"2020-06-28","default":true,"pages":[{"title":"API Reference","href":"/api-reference/introduction"},{"group":"Core Resources","pages":[{"group":"Events","pages":[{"openapi":"get /events","title":"List all events","href":"/api-reference/events/list-all-events"},{"openapi":"get /events/{id}","title":"Retrieve an event","href":"/api-reference/events/retrieve-an-event"}]},{"group":"Files","pages":[{"openapi":"get /files/{id}","title":"Retrieve a file","href":"/api-reference/files/retrieve-a-file"},{"openapi":"get /files/{id}/download","title":"Download content","href":"/api-reference/files/download-the-file-content"}]},{"group":"Exports","pages":[{"openapi":"post /exports","title":"Export data","href":"/api-reference/exports/export-data"},{"openapi":"get /exports","title":"List all exports","href":"/api-reference/exports/list-all-exports"},{"openapi":"get /exports/{id}","title":"Retrieve an export","href":"/api-reference/exports/retrieve-an-export"}]},{"group":"Entities","pages":[{"openapi":"get /entities","title":"List all entities","href":"/api-reference/entities/list-all-entities"},{"openapi":"post /entities","title":"Add an Entity","href":"/api-reference/entities/add-an-entity"},{"openapi":"get /entities/{entityId}","title":"Retrieve an Entity","href":"/api-reference/entities/retrieve-an-entity"},{"openapi":"patch /entities/{entityId}","title":"Update an Entity","href":"/api-reference/entities/update-an-entity"},{"openapi":"delete /entities/{entityId}","title":"Delete an Entity","href":"/api-reference/entities/delete-an-entity"},{"group":"Favorites","pages":[{"title":"Favorite one or more entities","openapi":"post /entities/favorites","href":"/api-reference/entities/favorite-multiple-entities"},{"title":"Unfavorite one or more entities","openapi":"delete /entities/favorites","href":"/api-reference/entities/unfavorite-multiple-entities"}]},{"group":"Events","pages":[{"openapi":"get /entities/{entityId}/events","title":"List an entity's events","href":"/api-reference/entities/list-an-entitys-events"}]},{"group":"Identifiers","pages":[{"openapi":"get /entities/{entityId}/identifiers","title":"List an entity's identifiers","href":"/api-reference/entities/list-an-entitys-identifiers"},{"openapi":"post /entities/{entityId}/identifiers","title":"Add an entity identifier","href":"/api-reference/entities/add-an-entity-identifier"}]},{"group":"Entity Tags","pages":[{"openapi":"get /entities/{entityId}/tags","title":"List an entity's tags","href":"/api-reference/entities/list-an-entitys-tags"},{"openapi":"get /entity-tags","title":"List all entity tags","href":"/api-reference/entities/list-all-entity-tags"},{"openapi":"post /entity-tags","title":"Create an entity tag","href":"/api-reference/entities/create-an-entity-tag"},{"openapi":"get /entity-tags/{id}","title":"Retrieve an entity tag","href":"/api-reference/entities/retrieve-an-entity-tag"},{"openapi":"patch /entity-tags/{id}","title":"Update an entity tag","href":"/api-reference/entities/update-an-entity-tag"},{"openapi":"delete /entity-tags/{id}","title":"Delete an entity tag","href":"/api-reference/entities/delete-an-entity-tag"},{"openapi":"post /entities/batch/tags","title":"Tag multiple entities","href":"/api-reference/entities/tag-multiple-entities"},{"openapi":"post /entities/batch/tags/remove","title":"Untag multiple entities","href":"/api-reference/entities/untag-multiple-entities"}]}]},{"group":"Tags","pages":[{"openapi":"get /tags","title":"List all tags","href":"/api-reference/tags/list-all-tags"},{"openapi":"post /tags","title":"Create a tag","href":"/api-reference/tags/create-a-tag"},{"openapi":"delete /tags/{id}","title":"Delete a tag","href":"/api-reference/tags/delete-a-tag"},{"openapi":"patch /tags/{id}","title":"Update a tag","href":"/api-reference/tags/update-a-tag"}]},{"group":"Extractions","pages":[{"openapi":"get /extractions","title":"List all extractions","href":"/api-reference/extractions/list-all-extractions"},{"openapi":"post /extractions","title":"Create an extraction","href":"/api-reference/extractions/create-an-extraction"},{"openapi":"get /extractions/{id}","title":"Retrieve an extraction","href":"/api-reference/extractions/retrieve-an-extraction"},{"openapi":"delete /extractions/{id}/stop","title":"Request the extraction to be stopped","href":"/api-reference/extractions/request-the-extraction-to-be-stopped"},{"group":"Schedulers","pages":[{"openapi":"get /schedulers","title":"List schedulers","href":"/api-reference/schedulers/list-schedulers"},{"openapi":"post /schedulers","title":"Create a scheduler","href":"/api-reference/schedulers/create-an-scheduler"},{"openapi":"get /schedulers/{id}","title":"Retrieve a scheduler","href":"/api-reference/schedulers/retrieve-an-scheduler"},{"openapi":"put /schedulers/{id}","title":"Update a scheduler","href":"/api-reference/schedulers/update-an-scheduler"},{"openapi":"delete /schedulers/{id}","title":"Delete a scheduler","href":"/api-reference/schedulers/delete-an-scheduler"},{"group":"Rules","pages":[{"openapi":"post /schedulers/rules","title":"Create a scheduler rule","href":"/api-reference/scheduler-rules/create-an-scheduler-rule"},{"openapi":"get /schedulers/rules/{id}","title":"Retrieve a scheduler rule","href":"/api-reference/scheduler-rules/retrieve-an-scheduler-rule"},{"openapi":"put /schedulers/rules/{id}","title":"Update a scheduler rule","href":"/api-reference/scheduler-rules/update-an-scheduler-rule"},{"openapi":"delete /schedulers/rules/{id}","title":"Delete a scheduler rule","href":"/api-reference/scheduler-rules/delete-an-scheduler-rule"}]}]}]}]},{"group":"Other Resources","pages":[{"group":"Shareholders","pages":[{"openapi":"get /entities/{entityId}/shareholders","title":"List an entity's shareholders","href":"/api-reference/shareholders/get-an-entitys-shareholders"},{"openapi":"post /entities/{entityId}/shareholders","title":"Create a new shareholder for an entity","href":"/api-reference/shareholders/create-a-new-shareholder-for-an-entity"},{"openapi":"get /shareholders","title":"List shareholders","href":"/api-reference/shareholders/get-all-shareholders"},{"openapi":"get /shareholders/{id}","title":"Retrieve a shareholder","href":"/api-reference/shareholders/get-a-specific-shareholder"},{"openapi":"patch /shareholders/{id}","title":"Update a shareholder","href":"/api-reference/shareholders/update-a-shareholder"},{"openapi":"delete /shareholders/{id}","title":"Delete a shareholder","href":"/api-reference/shareholders/delete-a-shareholder"},{"group":"Relations","pages":[{"openapi":"get /shareholders/{shareholderId}/relations","title":"List shareholder relations","href":"/api-reference/shareholders/get-shareholder-relations"},{"openapi":"get /shareholders/{shareholderId}/relations/{relationId}","title":"Retrieve a shareholder relation","href":"/api-reference/shareholders/get-a-specific-shareholder-relation"},{"openapi":"patch /shareholders/{shareholderId}/relations/{relationId}","title":"Update a shareholder relation","href":"/api-reference/shareholders/update-a-shareholder-relation"},{"openapi":"delete /shareholders/{shareholderId}/relations/{relationId}","title":"Delete a shareholder relation","href":"/api-reference/shareholders/delete-a-shareholder-relation"},{"openapi":"post /shareholders/{shareholderId}/relations/{relationId}/promote","title":"Promote a shareholder relation","href":"/api-reference/shareholders/promote-a-shareholder-relation"}]},{"group":"Sources","pages":[{"openapi":"get /shareholders/{shareholderId}/relations/{relationId}/sources","title":"List shareholder relation sources","href":"/api-reference/shareholders/get-shareholder-relation-sources"},{"openapi":"get /shareholders/{shareholderId}/relations/{relationId}/sources/{sourceId}","title":"Retrieve a shareholder relation source","href":"/api-reference/shareholders/get-a-specific-shareholder-relation-source"},{"openapi":"delete /shareholders/{shareholderId}/relations/{relationId}/sources/{sourceId}","title":"Delete a shareholder relation source","href":"/api-reference/shareholders/delete-a-shareholder-relation-source"}]}]},{"group":"Background Checks","pages":[{"openapi":"get /background-checks","title":"List background checks","href":"/api-reference/background-checks/get-all-background-checks"},{"openapi":"get /background-checks/{id}","title":"Retrieve a background check","href":"/api-reference/background-checks/get-a-specific-background-check"},{"openapi":"get /background-checks/{id}/pdf","title":"Download background check PDF","href":"/api-reference/background-checks/get-background-check-pdf-report"},{"openapi":"get /entities/{entityId}/background-checks","title":"List an entity's background checks","href":"/api-reference/background-checks/get-an-entitys-background-checks"},{"openapi":"get /background-checks/{backgroundCheckId}/records","title":"List background check records","href":"/api-reference/background-checks/get-background-check-records"}]},{"group":"Company Verification Reports","pages":[{"openapi":"get /datasources/mx/company-verification/reports","title":"List company verification reports","href":"/api-reference/company-verification-reports/get-all-company-verification-reports"},{"openapi":"get /datasources/mx/company-verification/reports/{id}","title":"Retrieve a company verification report","href":"/api-reference/company-verification-reports/get-a-specific-company-verification-report"},{"openapi":"get /entities/{entityId}/datasources/mx/company-verification/reports","title":"List an entity's company verification reports","href":"/api-reference/company-verification-reports/get-an-entitys-company-verification-reports"}]},{"group":"Mexico Addresses","pages":[{"title":"Retrieve addresses by postal code","openapi":"get /datasources/mx/addresses/{postalCode}","href":"/api-reference/mexico-addresses/retrieve-addresses-by-postal-code"}]}]},{"group":"Datasource: SAT","pages":[{"group":"Credentials","pages":[{"openapi":"get /credentials","title":"List all credentials","href":"/api-reference/ds-mx-sat-credentials/list-all-credentials"},{"openapi":"post /credentials","title":"Create a credential","href":"/api-reference/ds-mx-sat-credentials/create-a-credential"},{"openapi":"get /credentials/{id}","title":"Retrieve a credential","href":"/api-reference/ds-mx-sat-credentials/retrieve-a-credential"},{"openapi":"delete /credentials/{id}","title":"Delete a credential","href":"/api-reference/ds-mx-sat-credentials/delete-a-credential"},{"openapi":"post /credentials/{id}/revalidate","title":"Revalidate a credential","href":"/api-reference/ds-mx-sat-credentials/revalidate-a-credential"}]},{"group":"Invoices","pages":[{"openapi":"get /invoices/{id}","title":"Retrieve an invoice","href":"/api-reference/ds-mx-sat-invoices/retrieve-an-invoice"},{"openapi":"post /invoices/{id}/tags","title":"Tag an invoice","href":"/api-reference/ds-mx-sat-invoices/tag-an-invoice"},{"openapi":"delete /invoices/{invoiceId}/tags/{tagId}","title":"Untag an invoice","href":"/api-reference/ds-mx-sat-invoices/untag-an-invoice"},{"openapi":"post /invoices/batch/tags","title":"Tag multiple invoices","href":"/api-reference/ds-mx-sat-invoices/tag-multiple-invoices"},{"openapi":"post /invoices/batch/tags/remove","title":"Untag multiple invoices","href":"/api-reference/ds-mx-sat-invoices/untag-multiple-invoices"},{"openapi":"get /invoices/{id}/cfdi","title":"Retrieve an invoice's CFDI","href":"/api-reference/ds-mx-sat-invoices/retrieve-an-invoices-cfdi"},{"openapi":"get /datasources/mx/sat/cfdis/{uuid}","title":"Retrieve a SAT CFDI","href":"/api-reference/ds-mx-sat-invoices/retrieve-a-sat-cfdi"},{"openapi":"get /entities/{entityId}/invoices","title":"List an entity's invoices","href":"/api-reference/ds-mx-sat-invoices/list-all-entities-invoices"},{"group":"Line Items","pages":[{"openapi":"get /invoices/line-items/{id}","title":"Retrieve an invoice line item","href":"/api-reference/ds-mx-sat-invoice-line-items/retrieve-an-invoice-line-item"},{"openapi":"get /invoices/{invoiceId}/line-items","title":"List an invoice's line items","href":"/api-reference/ds-mx-sat-invoice-line-items/list-an-invoices-line-items"},{"openapi":"get /entities/{entityId}/invoices/line-items","title":"List an entity's invoice line items","href":"/api-reference/ds-mx-sat-invoice-line-items/list-all-entity-line-items"}]},{"group":"Relations","pages":[{"openapi":"get /invoices/relations/{id}","title":"Retrieve an invoice relation","href":"/api-reference/ds-mx-sat-invoice-relations/retrieve-an-invoice-relation"},{"openapi":"get /invoices/{invoiceId}/relations","title":"List an invoice's relations","href":"/api-reference/ds-mx-sat-invoice-relations/list-an-invoices-relations"},{"openapi":"get /entities/{entityId}/invoices/{invoiceId}/relations","title":"List an entity's invoice relations","href":"/api-reference/ds-mx-sat-invoice-relations/list-an-entitys-invoice-relations"}]},{"group":"Payments","pages":[{"openapi":"get /invoices/payments","title":"List all invoice payments","href":"/api-reference/ds-mx-sat-invoice-payments/list-all-invoice-payments"},{"openapi":"get /invoices/payments/{id}","title":"Retrieve an invoice payment","href":"/api-reference/ds-mx-sat-invoice-payments/retrieve-an-invoice-payment"},{"openapi":"get /invoices/{id}/payments","title":"List an invoice's payments","href":"/api-reference/ds-mx-sat-invoice-payments/list-an-invoices-payments"},{"openapi":"get /entities/{entityId}/invoices/payments","title":"List an entity's invoice payments","href":"/api-reference/ds-mx-sat-invoice-payments/list-entities-invoice-payments"},{"group":"Batch Payments","pages":[{"openapi":"get /invoices/batch-payments","title":"List all invoice batch payments","href":"/api-reference/ds-mx-sat-invoice-batch-payments/list-all-invoice-batch-payments"},{"openapi":"get /invoices/batch-payments/{id}","title":"Retrieve an invoice batch payment","href":"/api-reference/ds-mx-sat-invoice-batch-payments/retrieve-an-invoice-batch-payment"},{"openapi":"get /invoices/{id}/batch-payments","title":"List an invoice's batch payments","href":"/api-reference/ds-mx-sat-invoice-batch-payments/list-an-invoices-batch-payments"}]}]},{"group":"Credit Notes","pages":[{"openapi":"get /invoices/credit-notes","title":"List credit notes","href":"/api-reference/ds-mx-sat-credit-notes/list-credit-notes"},{"openapi":"get /entities/{entityId}/invoices/credit-notes","title":"List an entity's credit notes","href":"/api-reference/ds-mx-sat-credit-notes/list-an-entitys-credit-notes"},{"openapi":"get /invoices/credit-notes/{id}","title":"Retrieve an invoice credit note","href":"/api-reference/ds-mx-sat-credit-notes/retrieve-an-invoice-credit-note"},{"openapi":"get /invoices/{invoiceId}/issued-credit-notes","title":"List an invoice's issued credit notes","href":"/api-reference/ds-mx-sat-credit-notes/list-all-issued-credit-notes-related-to-the-requested-invoice"},{"openapi":"get /invoices/{invoiceId}/applied-credit-notes","title":"List an invoice's applied credit notes","href":"/api-reference/ds-mx-sat-credit-notes/list-all-applied-credit-notes-related-to-the-requested-invoice"}]}]},{"group":"Tax Retentions","pages":[{"openapi":"get /tax-retentions/{id}","title":"Retrieve a tax retention","href":"/api-reference/ds-mx-sat-tax-retentions/retrieve-a-tax-retention"},{"openapi":"get /tax-retentions/{id}/cfdi","title":"Retrieve a tax retention CFDI","href":"/api-reference/ds-mx-sat-tax-retentions/retrieve-a-tax-retention-cfdi"},{"openapi":"get /entities/{entityId}/tax-retentions","title":"List an entity's tax retentions","href":"/api-reference/ds-mx-sat-tax-retentions/list-all-entities-tax-retentions"}]},{"group":"Tax Returns","pages":[{"openapi":"get /tax-returns/{id}","title":"Retrieve a tax return","href":"/api-reference/ds-mx-sat-tax-returns/retrieve-a-tax-return"},{"openapi":"get /tax-returns/{id}/pdf","title":"Download a tax return PDF","href":"/api-reference/ds-mx-sat-tax-returns/download-a-tax-return-pdf"},{"openapi":"get /tax-returns/{id}/data","title":"Retrieve tax return data","href":"/api-reference/ds-mx-sat-tax-returns/retrieve-a-tax-return-data"},{"openapi":"get /entities/{entityId}/tax-returns","title":"List an entity's tax returns","href":"/api-reference/ds-mx-sat-tax-returns/list-all-entities-tax-returns"}]},{"group":"Tax Compliance Checks","pages":[{"openapi":"get /tax-compliance-checks/{id}","title":"Retrieve a tax compliance check","href":"/api-reference/ds-mx-sat-tax-compliance-checks/retrieve-a-tax-compliance-check"},{"openapi":"get /entities/{entityId}/tax-compliance-checks","title":"List an entity's tax compliance checks","href":"/api-reference/ds-mx-sat-tax-compliance-checks/list-all-entities-tax-compliance-checks"}]},{"group":"Tax Status","pages":[{"openapi":"get /tax-status","title":"List tax status records","href":"/api-reference/ds-mx-sat-tax-status/list-tax-status-records"},{"openapi":"get /tax-status/{id}","title":"Retrieve a tax status","href":"/api-reference/ds-mx-sat-tax-status/retrieve-a-tax-status"},{"openapi":"get /entities/{entityId}/tax-status","title":"List an entity's tax status records","href":"/api-reference/ds-mx-sat-tax-status/list-all-entities-tax-status"}]},{"group":"Electronic Accounting","pages":[{"openapi":"get /electronic-accounting-records/{id}","title":"Retrieve an electronic accounting record","href":"/api-reference/ds-mx-sat-electronic-accounting/retrieve-an-electronic-accounting-record"},{"openapi":"get /entities/{entityId}/electronic-accounting-records","title":"List an entity's electronic accounting records","href":"/api-reference/ds-mx-sat-electronic-accounting/list-all-entities-electronic-accounting-records"}]},{"group":"Certificates","pages":[{"openapi":"get /datasources/mx/sat/certificados/{id}","title":"Retrieve a SAT certificate","href":"/api-reference/ds-mx-sat-certificates/retrieve-a-sat-certificate"},{"openapi":"get /entities/{entityId}/datasources/mx/sat/certificados","title":"List an entity's SAT certificates","href":"/api-reference/ds-mx-sat-certificates/list-an-entitys-sat-certificates"}]}]},{"group":"Datasource: RPC","pages":[{"group":"Entidades","pages":[{"openapi":"get /datasources/mx/rpc/entidades/{id}","title":"Retrieve RPC entidade","href":"/api-reference/ds-mx-rpc-entidades/retrieve-rpc-entidades-data-beta"},{"openapi":"get /entities/{entityId}/datasources/mx/rpc/entidades","title":"List an entity's RPC entidades","href":"/api-reference/ds-mx-rpc-entidades/list-all-entities-rpc-entidades-data-beta"}]},{"group":"Actos","pages":[{"openapi":"get /rpc/actos/{id}","title":"Retrieve RPC acto","href":"/api-reference/ds-mx-rpc-actos/retrieve-an-rpc-acto"},{"openapi":"get /entities/{entityId}/datasources/mx/rpc/actos","title":"List an entity's RPC actos","href":"/api-reference/ds-mx-rpc-actos/list-an-entitys-rpc-actos"}]},{"group":"Socios","pages":[{"openapi":"get /datasources/rpc/socios/{id}","title":"Retrieve RPC socio","href":"/api-reference/ds-mx-rpc-socios/retrieve-an-rpc-socio"}]}]},{"group":"Datasource: RUG","pages":[{"group":"Operaciones","pages":[{"openapi":"get /datasources/rug/operaciones/{id}","title":"Retrieve RUG operation","href":"/api-reference/ds-mx-rug-operaciones/retrieve-rug-operacion-data"},{"openapi":"get /entities/{entityId}/datasources/rug/operaciones","title":"List an entity's RUG operations","href":"/api-reference/ds-mx-rug-operaciones/list-all-entities-rug-operaciones-data"}]},{"group":"Garantias","pages":[{"openapi":"get /datasources/rug/garantias/{id}","title":"Retrieve RUG guarantee","href":"/api-reference/ds-mx-rug-garantias/retrieve-rug-garantia-data"},{"openapi":"get /entities/{entityId}/datasources/rug/garantias","title":"List an entity's RUG guarantees","href":"/api-reference/ds-mx-rug-garantias/list-all-entities-rug-garantias-data-beta"}]}]},{"group":"Datasource: Syntage","pages":[{"group":"Score","pages":[{"openapi":"post /entities/{entityId}/datasources/syntage/score/calculate","title":"Start Syntage Score calculation","href":"/api-reference/ds-syntage-score/calculate-syntage-score"}]}]},{"group":"Datasource: Buró de Crédito","pages":[{"group":"Reports","pages":[{"openapi":"get /entities/{entityId}/datasources/mx/buro-de-credito/reports","title":"Get an entity's Buró de Crédito reports","href":"/api-reference/ds-mx-buro-de-credito-reports/get-an-entitys-buro-de-credito-reports"},{"openapi":"get /datasources/mx/buro-de-credito/reports/{id}","title":"Get a Buró de Crédito report","href":"/api-reference/ds-mx-buro-de-credito-reports/get-a-buro-de-credito-report"}]},{"group":"Authorizations","pages":[{"openapi":"get /datasources/mx/buro-de-credito/authorizations","title":"Get Buró de Crédito authorizations","href":"/api-reference/ds-mx-buro-de-credito-authorizations/get-all-buro-de-credito-authorizations"},{"openapi":"get /entities/{entityId}/datasources/mx/buro-de-credito/authorizations","title":"Get an entity's Buró de Crédito authorizations","href":"/api-reference/ds-mx-buro-de-credito-authorizations/get-an-entitys-buro-de-credito-authorizations"},{"openapi":"post /entities/{entityId}/datasources/mx/buro-de-credito/authorizations","title":"Create a Buró de Crédito authorization","href":"/api-reference/ds-mx-buro-de-credito-authorizations/create-a-buro-de-credito-authorization"},{"openapi":"get /datasources/mx/buro-de-credito/authorizations/{id}","title":"Get a Buró de Crédito authorization","href":"/api-reference/ds-mx-buro-de-credito-authorizations/get-a-buro-de-credito-authorization"},{"openapi":"delete /datasources/mx/buro-de-credito/authorizations/{id}","title":"Delete a Buró de Crédito authorization","href":"/api-reference/ds-mx-buro-de-credito-authorizations/delete-a-buro-de-credito-authorization"}]}]},{"group":"Datasource: BIL","pages":[{"group":"Reports","pages":[{"openapi":"get /entities/{entityId}/datasources/bil/reports","title":"List an entity's BIL reports","href":"/api-reference/ds-mx-bil-reports/list-an-entitys-bil-reports"},{"openapi":"get /datasources/bil/reports/{id}","title":"Retrieve a BIL report","href":"/api-reference/ds-mx-bil-reports/retrieve-a-bil-report"}]}]},{"group":"Datasource: Infonavit","pages":[{"group":"Overdue Credits","pages":[{"openapi":"get /entities/{entityId}/datasources/infonavit/overdue-credits","title":"List an entity's Infonavit overdue credits","href":"/api-reference/ds-mx-infonavit-overdue-credits/list-an-entitys-infonavit-overdue-credits"},{"openapi":"get /datasources/infonavit/overdue-credits/{id}","title":"Retrieve an Infonavit overdue credit","href":"/api-reference/ds-mx-infonavit-overdue-credits/retrieve-an-infonavit-overdue-credit"}]}]},{"group":"Insights","pages":[{"group":"Company","pages":[{"title":"Summary Insight","openapi":"get /entities/{entityId}/insights/summary","href":"/api-reference/summary-insight/get-summary"},{"title":"Scores Insight","openapi":"get /entities/{entityId}/insights/metrics/scores","href":"/api-reference/scores-insight/get-scores"},{"title":"Syntage Score Distribution","openapi":"get /insights/metrics/scores/syntage/distribution","href":"/api-reference/scores-insight/get-syntage-score-distribution"},{"title":"Buró de Crédito Summary Insight","openapi":"get /entities/{entityId}/insights/metrics/buro-de-credito/summary","href":"/api-reference/buro-de-credito-summary-insight/get-buro-de-credito-summary"},{"title":"Buró de Crédito Summary Export","openapi":"get /entities/{entityId}/insights/metrics/buro-de-credito/summary/export","href":"/api-reference/buro-de-credito-summary-insight/export-buro-de-credito-summary"},{"title":"Risks Insight","openapi":"get /entities/{entityId}/insights/risks","href":"/api-reference/risks-insight/get-risk-calculations"},{"title":"RPC Shareholders Insight","openapi":"get /entities/{entityId}/insights/rpc-shareholders","deprecated":true,"href":"/api-reference/rpc-shareholders-insight/get-rpc-shareholders-beta"}]},{"group":"Corporate Structure","pages":[{"title":"Shareholders Insight","openapi":"get /entities/{entityId}/insights/shareholders","href":"/api-reference/shareholders-insight/get-shareholders"},{"title":"Current Powers Insight","openapi":"get /entities/{entityId}/insights/corporate-structure/current-powers","href":"/api-reference/corporate-structure-current-powers-insight/get-current-powers"}]},{"group":"Revenue","pages":[{"title":"Invoicing Annual Comparison Insight","openapi":"get /entities/{entityId}/insights/metrics/invoicing-annual-comparison","href":"/api-reference/invoicing-annual-comparison-insight/get-invoicing-annual-comparison-insight"},{"title":"Sales Revenue Insight","openapi":"get /entities/{entityId}/insights/sales-revenue","href":"/api-reference/sales-revenue-insight/get-sales-revenue"},{"title":"Expenditures Insight","openapi":"get /entities/{entityId}/insights/expenditures","href":"/api-reference/expenditures-insight/get-expenditures"},{"title":"Cash Flow Insight","openapi":"get /entities/{entityId}/insights/cash-flow-stats","href":"/api-reference/cash-flow-insight/get-cash-flow"},{"title":"Moratory Interest Insight","openapi":"get /entities/{entityId}/insights/moratory-interest","href":"/api-reference/moratory-interest-insight/get-moratory-interest"},{"title":"Accounts Payable Insight","openapi":"get /entities/{entityId}/insights/accounts-payable","href":"/api-reference/accounts-payable-insight/get-accounts-payable"},{"title":"Accounts Receivable Insight","openapi":"get /entities/{entityId}/insights/accounts-receivable","href":"/api-reference/accounts-receivable-insight/get-accounts-receivable"},{"title":"Invoicing Blacklist Insight","openapi":"get /entities/{entityId}/insights/invoicing-blacklist","href":"/api-reference/invoicing-blacklist-insight/get-invoicing-blacklist"}]},{"group":"Financial","pages":[{"title":"Balance Sheet Insight","openapi":"get /entities/{entityId}/insights/metrics/balance-sheet","href":"/api-reference/balance-sheet-insight/get-balance-sheet-metric"},{"title":"Income Statement Insight","openapi":"get /entities/{entityId}/insights/metrics/income-statement","href":"/api-reference/income-statement-insight/get-metrics-income-statement"},{"title":"Financial Ratios Insight","openapi":"get /entities/{entityId}/insights/financial-ratios","href":"/api-reference/financial-ratios-insight/get-financial-ratios"},{"title":"Trial Balance Insight","openapi":"get /entities/{entityId}/insights/trial-balance","href":"/api-reference/trial-balance-insight/get-trial-balance"}]},{"group":"Clients","pages":[{"title":"Customer Concentration Insight","openapi":"get /entities/{entityId}/insights/customer-concentration","href":"/api-reference/customer-concentration-insight/get-customer-invoice-concentration"},{"title":"Customer Network Insight","openapi":"get /entities/{entityId}/insights/metrics/customer-network","href":"/api-reference/customer-network-insight/get-customer-network-insight"},{"title":"Products and Services Sold Insight","openapi":"get /entities/{entityId}/insights/products-and-services-sold","href":"/api-reference/products-and-services-sold-insight/get-products-and-services-sold"},{"title":"Government Customers Insight","openapi":"get /entities/{entityId}/insights/government-customers","href":"/api-reference/government-customers-insight/get-government-customers"}]},{"group":"Providers","pages":[{"title":"Vendor Concentration Insight","openapi":"get /entities/{entityId}/insights/supplier-concentration","href":"/api-reference/vendor-concentration-insight/get-vendor-invoice-concentration"},{"title":"Vendor Network Insight","openapi":"get /entities/{entityId}/insights/metrics/vendor-network","href":"/api-reference/vendor-network-insight/get-vendor-network-insight"},{"title":"Products and Services Bought Insight","openapi":"get /entities/{entityId}/insights/products-and-services-bought","href":"/api-reference/products-and-services-bought-insight/get-products-and-services-bought"},{"title":"Financial Institutions Insight","openapi":"get /entities/{entityId}/insights/financial-institutions","href":"/api-reference/financial-institutions-insight/get-financial-institutions"},{"title":"Employees Insight","openapi":"get /entities/{entityId}/insights/employees","href":"/api-reference/employees-insight/get-employees"}]},{"title":"Invoicing Concentration Insight","openapi":"get /entities/{entityId}/insights/invoicing-concentration","deprecated":true,"href":"/api-reference/invoicing-concentration-insight/get-invoicing-concentration"},{"title":"Insight Export","openapi":"get /entities/{entityId}/insights/{insight}/export","href":"/api-reference/insights/export-an-insight"}]},{"group":"Reports","pages":[{"openapi":"get /reports","title":"List all reports","href":"/api-reference/reports/list-reports"},{"openapi":"post /reports","title":"Create a report","href":"/api-reference/reports/create-a-report"},{"openapi":"get /reports/{id}","title":"Retrieve a report","href":"/api-reference/reports/retrieve-a-report"},{"openapi":"put /reports/{id}","title":"Update a report","href":"/api-reference/reports/update-a-report"},{"openapi":"delete /reports/{id}","title":"Delete a report","href":"/api-reference/reports/delete-a-report"}]},{"group":"Webhooks","pages":[{"group":"Webhook Endpoints","pages":[{"openapi":"get /webhook-endpoints","title":"List webhook endpoints","href":"/api-reference/webhook-endpoints/list-all-webhook-endpoints"},{"openapi":"post /webhook-endpoints","title":"Create webhook endpoint","href":"/api-reference/webhook-endpoints/create-a-webhook-endpoint"},{"openapi":"get /webhook-endpoints/{id}","title":"Retrieve webhook endpoint","href":"/api-reference/webhook-endpoints/retrieve-a-webhook-endpoint"},{"openapi":"put /webhook-endpoints/{id}","title":"Update webhook endpoint","href":"/api-reference/webhook-endpoints/update-an-webhook-endpoint"},{"openapi":"delete /webhook-endpoints/{id}","title":"Delete webhook endpoint","href":"/api-reference/webhook-endpoints/delete-a-webhook-endpoint"}]},{"group":"Webhook Requests","pages":[{"openapi":"get /webhook-requests","title":"List webhook requests","description":"List webhook delivery attempts for your organization.","href":"/api-reference/webhook-requests/list-all-webhook-requests"},{"openapi":"get /webhook-requests/{id}","title":"Retrieve webhook request","href":"/api-reference/webhook-requests/retrieve-a-webhook-request"}]}]}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},{"language":"es","pages":[{"title":"es","href":"/es"}]}]},"title":"Retrieve webhook request - Syntage","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-26-lDe7V.js","utils-CWQmgYtH.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-4-Aw3rSD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C2zjXYA5.js","snippetPresets-DFmpFA7C.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-FJpQavWq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D_GvPF7k.js","shallow-Bs2ZB0NO.js","getApiPlaygroundDisplay-DCcqJJk-.js","CodeSnippet-DzDxawVe.js","CodeSnippets-aUr7fU-7.js","Page-CT9uE8Ip.js","getPastedJson-Y1fKsj_I.js","icon-DI4zTsDr.js","MethodPill-C0nDlmSQ.js","DuplicateIcon-NUXbx2nQ.js","createIcon-BdTHrPAi.js","DynamicMarkdown-CtpgKJwj.js","SectionHeading-B3x35tOt.js","axios-vUo_bRtp.js","Markdown-3OmurJMP.js","clsx-DMKzROTp.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-1ms6tsT-.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Ke9xIMFx.js"]}