Accepts a single report and returns a report ID immediately. A report is a categorised observation about a road at a coordinate. The report enters the processing pipeline (AI analysis plus human review). Poll GET /reports/{id} for the outcome, typically available within 15 minutes.
This endpoint requires an API key. Include it in the apikey header:
apikey: YOUR_API_KEY
A signed-in user session token is also accepted. Our apps submit rider reports this way. So is a Login with Cyclemate access token, as a bearer token: the report is filed in the rider’s name and attributed to your app, and source is ignored. Anonymous callers are rejected: every report must be attributable to a submitter.
User session tokens are limited to 60 reports per hour. Exceeding the limit returns 429 with a Retry-After header and a retry_after_seconds field in the body. Partner API keys carry limits agreed at issuance. Contact us about expected volumes.
Free-text description of the issue, up to 2,000 characters. The more specific, the faster the analysis. Include what is blocked, since when, and until when if known.
The sub-category, which says what kind of problem it is within the issue_type. Sending one classifies the report without waiting for a human to read the description, so it is the single most useful optional field. Each category recognises its own values:
other is accepted under every category. Under road_closed, the first five values mean the road is physically blocked and the last two mean the manoeuvre is illegal rather than the road impassable, which we act on differently. Any other string up to 64 characters is stored but is not classified.
Required for partner API keys, ignored for user session tokens. The source identifier agreed when your key was issued (e.g. dft, forest): a 2–32 character slug of a-z, 0-9, _, -. It attributes the submission and scopes which reports your key can read back.
A partner API key must send its agreed source slug on every report. Submissions are attributed to that slug, and the key can read back any report submitted through the API.
A signed-in user token submits without source (any value sent is ignored). The report is attributed to the user’s account, and the token can read back only that user’s reports.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Cyclemate","colors":{"primary":"#537AEF","light":"#7B9EF4","dark":"#3D5ECC"},"logo":{"light":"https://mintcdn.com/cyclemate/0-MogKEn8FZNgFLp/logo/light.svg?fit=max\u0026auto=format\u0026n=0-MogKEn8FZNgFLp\u0026q=85\u0026s=11a7d1f41156617a1354abcf0b08ab6d","dark":"https://mintcdn.com/cyclemate/0-MogKEn8FZNgFLp/logo/dark.svg?fit=max\u0026auto=format\u0026n=0-MogKEn8FZNgFLp\u0026q=85\u0026s=308278b64102e275f839e60574cee2e6"},"favicon":"https://mintcdn.com/cyclemate/AzVQ1vqplzLFQex5/favicon.png?fit=max\u0026auto=format\u0026n=AzVQ1vqplzLFQex5\u0026q=85\u0026s=ce23a1f00c1f79fefeec2355f73872d5","api":{"playground":{"display":"none"}},"navbar":{"primary":{"type":"button","label":"Go to Cyclemate","href":"https://cyclemate.club"}},"seo":{"metatags":{"charset":"UTF-8","viewport":"width=device-width, initial-scale=1.0","description":"Cyclemate API reference: safe turn-by-turn cycling directions and multi-modal bike-share routing.","keywords":"bike navigation, bike directions, gbfs api, custom routes, group rides, bike routing api","author":"Cyclemate","robots":"index, follow","googlebot":"index, follow","referrer":"origin","rating":"general","language":"en","copyright":"Copyright 2026"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"cyclemate","hasAudioNarration":false,"actualSubdomain":"cyclemate","customDomains":["docs.cyclemate.club"],"gitSource":{"type":"github","owner":"gocyclemate","repo":"cyclemate","deployBranch":"production","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aea152e9d7c685f3a9cf68d","collectionId":"146ca62f-2320-433b-ba66-58185f6aa97c","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea152e9d7c685f3a9cf68d"},"entitlements":{},"buildId":"6aea152e9d7c685f3a9cf68d","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"API reference","count":22},{"language":"default","tag":"Custom routes","count":8},{"language":"default","tag":"Routing","count":6},{"language":"default","tag":"Contributions","count":4},{"language":"default","tag":"Getting started","count":3},{"language":"default","tag":"AI assistants","count":1},{"language":"default","tag":"Changelog","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"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":"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":"full-page-search","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":"turbopuffer-dual-write","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},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"/* arabic */\n@font-face {\n font-family: 'Fustat';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/fustat/v4/NaPEcZ_aHO9Iy5thRNqze7YGY9HGCKMXdr65tFo_.woff2) format('woff2');\n unicode-range: U+0600-06FF, U+0750-077F, U+0870-0891, U+0897-08E1, U+08E3-08FF, U+200C-200E, U+2010-2011, U+204F, U+2E41, U+FB50-FDFF, U+FE70-FE74, U+FE76-FEFC, U+102E0-102FB, U+10E60-10E7E, U+10EC2-10EC7, U+10EC9-10EEE, U+10EF0-10EFF, U+1EE00-1EE03, U+1EE05-1EE1F, U+1EE21-1EE22, U+1EE24, U+1EE27, U+1EE29-1EE32, U+1EE34-1EE37, U+1EE39, U+1EE3B, U+1EE42, U+1EE47, U+1EE49, U+1EE4B, U+1EE4D-1EE4F, U+1EE51-1EE52, U+1EE54, U+1EE57, U+1EE59, U+1EE5B, U+1EE5D, U+1EE5F, U+1EE61-1EE62, U+1EE64, U+1EE67-1EE6A, U+1EE6C-1EE72, U+1EE74-1EE77, U+1EE79-1EE7C, U+1EE7E, U+1EE80-1EE89, U+1EE8B-1EE9B, U+1EEA1-1EEA3, U+1EEA5-1EEA9, U+1EEAB-1EEBB, U+1EEF0-1EEF1;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Fustat';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/fustat/v4/NaPEcZ_aHO9Iy5thRNqze7YGY9HGCKMXdrW5tFo_.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Fustat';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/fustat/v4/NaPEcZ_aHO9Iy5thRNqze7YGY9HGCKMXdru5tA.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--cm-rail:rgb(0 0 0 / 0.09);--cm-rail-dot:#537aef;--cm-rail-halo:#ffffff;--cm-tag-fg:#4b5563;--cm-tag-bg:rgb(107 114 128 / 0.12);--cm-tag-border:rgb(0 0 0 / 0.06)}.dark{--cm-rail:rgb(255 255 255 / 0.12);--cm-rail-dot:#7b9ef4;--cm-rail-halo:#0f1115;--cm-tag-fg:#cbd5e1;--cm-tag-bg:rgb(148 163 184 / 0.16);--cm-tag-border:rgb(255 255 255 / 0.08)}.update-container{padding-top:2.25rem;padding-bottom:2.25rem}.update-container+.update-container{border-top:1px solid var(--cm-rail)}@media (min-width:1024px){.update-container+.update-container{border-top:0}.update-container::before{content:'';position:absolute;left:172px;top:0;bottom:0;width:1px;background:var(--cm-rail)}.update-container::after{content:'';position:absolute;left:167.5px;top:2.7rem;width:10px;height:10px;border-radius:9999px;background:var(--cm-rail-dot);box-shadow:0 0 0 4px var(--cm-rail-halo)}.update-container:first-of-type::before{top:2.7rem}.update-container:last-of-type::before{bottom:auto;height:2.7rem}}.update-container div.cursor-pointer{font-size:.9375rem;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:.01em;padding:.25rem .5rem;margin-top:.35rem}.update-container div.flex-wrap,.update-container div.max-w-\\[160px\\]{margin-top:.6rem}.update-container div.max-w-\\[160px\\]{font-size:.8125rem;line-height:1.35}.update-container span.inline-block.rounded-lg{padding:.1rem .5rem;border:1px solid var(--cm-tag-border);border-radius:9999px;background:var(--cm-tag-bg);color:var(--cm-tag-fg);font-size:.75rem;font-weight:600;letter-spacing:.01em;white-space:nowrap}.update-container>div.flex-1 h3{margin-top:0;font-size:1.0625rem;letter-spacing:-.011em}"}],"page":{"pagePath":"api-reference/reports/submit-report","slug":"/api-reference/reports/submit-report","pageMetadata":{"title":"Submit a report","api":"POST /reports/","description":"Send a road or infrastructure report and receive a report ID","href":"/api-reference/reports/submit-report"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Send a road or infrastructure report and receive a report ID\"\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};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Accordion,CodeBlock,Heading,ParamField,ResponseField,Table}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Accepts a single report and returns a report ID immediately. A report is a categorised observation about a road at a coordinate. The report enters the processing pipeline (AI analysis plus human review). Poll `,_jsx(_components.a,{href:`/api-reference/reports/get-report`,children:_jsx(_components.code,{children:`GET /reports/{id}`})}),` for the outcome, typically available within 15 minutes.`]}),`\n`,_jsx(Heading,{level:`3`,id:`authentication`,children:`Authentication`}),`\n`,_jsxs(_components.p,{children:[`This endpoint requires an API key. Include it in the `,_jsx(_components.code,{children:`apikey`}),` header:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`apikey: YOUR_API_KEY`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`A signed-in user session token is also accepted. Our apps submit rider reports this way. So is a `,_jsx(_components.a,{href:`/api-reference/oauth`,children:`Login with Cyclemate`}),` access token, as a bearer token: the report is filed in the rider’s name and attributed to your app, and `,_jsx(_components.code,{children:`source`}),` is ignored. Anonymous callers are rejected: every report must be attributable to a submitter.`]}),`\n`,_jsx(Heading,{level:`3`,id:`rate-limits`,children:`Rate limits`}),`\n`,_jsxs(_components.p,{children:[`User session tokens are limited to `,_jsx(_components.strong,{children:`60 reports per hour`}),`. Exceeding the limit returns `,_jsx(_components.code,{children:`429`}),` with a `,_jsx(_components.code,{children:`Retry-After`}),` header and a `,_jsx(_components.code,{children:`retry_after_seconds`}),` field in the body. Partner API keys carry limits agreed at issuance. `,_jsx(_components.a,{href:`https://cyclemate.club/for-developers`,children:`Contact us`}),` about expected volumes.`]}),`\n`,_jsx(Heading,{level:`2`,id:`request-body`,children:`Request body`}),`\n`,_jsxs(ParamField,{body:`issue_type`,type:`string`,required:true,id:`param-issue-type`,children:[_jsx(_components.p,{children:`The report category. One of:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Value`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`road_closed`})}),_jsx(_components.td,{children:`The road is impassable: closure, street works, blockage.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`road_unsafe`})}),_jsx(_components.td,{children:`A safety hazard: dangerous junction, surface hazard, conflict with motor traffic.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`bad_routing`})}),_jsx(_components.td,{children:`We routed through here when a better route exists.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unclear_instructions`})}),_jsx(_components.td,{children:`A navigation instruction at this location was confusing or wrong.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unpleasant`})}),_jsx(_components.td,{children:`Rideable but unpleasant: rough surface, crowding, steep gradient.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`other`})}),_jsxs(_components.td,{children:[`Anything else. Describe it in `,_jsx(_components.code,{children:`description`}),`.`]})]})]})]})]}),`\n`,_jsx(ParamField,{body:`location`,type:`[number, number]`,required:true,id:`param-location`,children:_jsxs(_components.p,{children:[`The report coordinate as `,_jsx(_components.code,{children:`[longitude, latitude]`}),` (GeoJSON order, see `,_jsx(_components.a,{href:`/api-reference/introduction#coordinate-format`,children:`Coordinate format`}),`).`]})}),`\n`,_jsxs(Accordion,{title:`Optional parameters`,id:`optional-parameters`,children:[_jsx(ParamField,{body:`description`,type:`string`,id:`param-description`,children:_jsx(_components.p,{children:`Free-text description of the issue, up to 2,000 characters. The more specific, the faster the analysis. Include what is blocked, since when, and until when if known.`})}),_jsx(ParamField,{body:`road_name`,type:`string`,id:`param-road-name`,children:_jsx(_components.p,{children:`Name of the affected road or place, up to 200 characters.`})}),_jsxs(ParamField,{body:`issue_subtype`,type:`string`,id:`param-issue-subtype`,children:[_jsxs(_components.p,{children:[`The sub-category, which says what kind of problem it is within the `,_jsx(_components.code,{children:`issue_type`}),`. Sending one classifies the report without waiting for a human to read the description, so it is the single most useful optional field. Each category recognises its own values:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:_jsx(_components.code,{children:`issue_type`})}),_jsxs(_components.th,{children:[`Recognised `,_jsx(_components.code,{children:`issue_subtype`})]})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`road_closed`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`private_locked`}),`, `,_jsx(_components.code,{children:`barrier_gate`}),`, `,_jsx(_components.code,{children:`no_cycling_zone`}),`, `,_jsx(_components.code,{children:`temporary_closure`}),`, `,_jsx(_components.code,{children:`permanent_closure`}),`, `,_jsx(_components.code,{children:`one_way`}),`, `,_jsx(_components.code,{children:`road_missing`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`road_unsafe`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`poor_bike_lane`}),`, `,_jsx(_components.code,{children:`too_many_peds`}),`, `,_jsx(_components.code,{children:`too_many_vehicles`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`bad_routing`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`faster_route`}),`, `,_jsx(_components.code,{children:`quieter_route`}),`, `,_jsx(_components.code,{children:`fewer_turns`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unclear_instructions`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`wrong_direction`}),`, `,_jsx(_components.code,{children:`unclear_instruction`}),`, `,_jsx(_components.code,{children:`missing_instruction`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unpleasant`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`cobbles_rough`}),`, `,_jsx(_components.code,{children:`too_hilly`}),`, `,_jsx(_components.code,{children:`too_many_peds`})]})]})]})]}),_jsxs(_components.p,{children:[_jsx(_components.code,{children:`other`}),` is accepted under every category. Under `,_jsx(_components.code,{children:`road_closed`}),`, the first five values mean the road is physically blocked and the last two mean the manoeuvre is illegal rather than the road impassable, which we act on differently. Any other string up to 64 characters is stored but is not classified.`]})]}),_jsx(ParamField,{body:`source`,type:`string`,id:`param-source`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Required for partner API keys`}),`, ignored for user session tokens. The source identifier agreed when your key was issued (e.g. `,_jsx(_components.code,{children:`dft`}),`, `,_jsx(_components.code,{children:`forest`}),`): a 2–32 character slug of `,_jsx(_components.code,{children:`a-z`}),`, `,_jsx(_components.code,{children:`0-9`}),`, `,_jsx(_components.code,{children:`_`}),`, `,_jsx(_components.code,{children:`-`}),`. It attributes the submission and scopes which reports your key can read back.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`response-body`,children:`Response body`}),`\n`,_jsx(ResponseField,{name:`id`,type:`string`,id:`param-id`,children:_jsxs(_components.p,{children:[`The report ID, a UUID string. Use it with `,_jsx(_components.a,{href:`/api-reference/reports/get-report`,children:_jsx(_components.code,{children:`GET /reports/{id}`})}),` to poll processing status.`]})}),`\n`,_jsx(ResponseField,{name:`status`,type:`string`,id:`param-status`,children:_jsxs(_components.p,{children:[`Always `,_jsx(_components.code,{children:`received`}),` on creation.`]})}),`\n`,_jsx(ResponseField,{name:`created_at`,type:`string`,id:`param-created-at`,children:_jsx(_components.p,{children:`ISO 8601 timestamp of receipt.`})}),`\n`,`\n`,`\n`,_jsx(Heading,{level:`2`,id:`variants`,children:`Variants`}),`\n`,_jsx(Heading,{level:`3`,id:`partner-submission`,children:`Partner submission`}),`\n`,_jsxs(_components.p,{children:[`A partner API key must send its agreed `,_jsx(_components.code,{children:`source`}),` slug on every report. Submissions are attributed to that slug, and the key can read back any report submitted through the API.`]}),`\n`,_jsx(Heading,{level:`3`,id:`user-session-submission`,children:`User session submission`}),`\n`,_jsxs(_components.p,{children:[`A signed-in user token submits without `,_jsx(_components.code,{children:`source`}),` (any value sent is ignored). The report is attributed to the user’s account, and the token can read back only that user’s reports.`]}),`\n`,_jsx(Heading,{level:`2`,id:`error-responses`,children:`Error responses`}),`\n`,_jsx(Heading,{level:`3`,id:`400-bad-request`,children:`400 Bad request`}),`\n`,_jsxs(_components.p,{children:[`Invalid body: an unknown `,_jsx(_components.code,{children:`issue_type`}),`, an out-of-range `,_jsx(_components.code,{children:`location`}),`, or a missing `,_jsx(_components.code,{children:`source`}),` on a partner key. The `,_jsx(_components.code,{children:`error`}),` field names the problem.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"issue_type must be one of: road_unsafe, road_closed, bad_routing, unclear_instructions, unpleasant, other\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`401-unauthorized`,children:`401 Unauthorized`}),`\n`,_jsx(_components.p,{children:`Missing or invalid credentials, or an anonymous caller.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Endpoint requires one of: user, service\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`405-method-not-allowed`,children:`405 Method not allowed`}),`\n`,_jsxs(_components.p,{children:[`Method other than `,_jsx(_components.code,{children:`POST`}),` on the collection.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Method not allowed\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`429-too-many-requests`,children:`429 Too many requests`}),`\n`,_jsxs(_components.p,{children:[`Rate limit exceeded, see `,_jsx(_components.a,{href:`#rate-limits`,children:`Rate limits`}),`. Includes a `,_jsx(_components.code,{children:`Retry-After`}),` header.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Rate limit exceeded\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"retry_after_seconds\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`45`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`500-internal-server-error`,children:`500 Internal server error`}),`\n`,_jsx(_components.p,{children:`Unexpected server failure.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Internal server error\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Submit a report","api":"POST /reports/","description":"Send a road or infrastructure report and receive a report ID","href":"/api-reference/reports/submit-report"}}},"mdxSourceWithNoJs":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Accordion,CodeBlock,Heading,ParamField,RequestExample,ResponseExample,ResponseField,Table}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!RequestExample)_missingMdxReference(`RequestExample`,true);if(!ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Accepts a single report and returns a report ID immediately. A report is a categorised observation about a road at a coordinate. The report enters the processing pipeline (AI analysis plus human review). Poll `,_jsx(_components.a,{href:`/api-reference/reports/get-report`,children:_jsx(_components.code,{children:`GET /reports/{id}`})}),` for the outcome, typically available within 15 minutes.`]}),`\n`,_jsx(Heading,{level:`3`,id:`authentication`,children:`Authentication`}),`\n`,_jsxs(_components.p,{children:[`This endpoint requires an API key. Include it in the `,_jsx(_components.code,{children:`apikey`}),` header:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`apikey: YOUR_API_KEY`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`A signed-in user session token is also accepted. Our apps submit rider reports this way. So is a `,_jsx(_components.a,{href:`/api-reference/oauth`,children:`Login with Cyclemate`}),` access token, as a bearer token: the report is filed in the rider’s name and attributed to your app, and `,_jsx(_components.code,{children:`source`}),` is ignored. Anonymous callers are rejected: every report must be attributable to a submitter.`]}),`\n`,_jsx(Heading,{level:`3`,id:`rate-limits`,children:`Rate limits`}),`\n`,_jsxs(_components.p,{children:[`User session tokens are limited to `,_jsx(_components.strong,{children:`60 reports per hour`}),`. Exceeding the limit returns `,_jsx(_components.code,{children:`429`}),` with a `,_jsx(_components.code,{children:`Retry-After`}),` header and a `,_jsx(_components.code,{children:`retry_after_seconds`}),` field in the body. Partner API keys carry limits agreed at issuance. `,_jsx(_components.a,{href:`https://cyclemate.club/for-developers`,children:`Contact us`}),` about expected volumes.`]}),`\n`,_jsx(Heading,{level:`2`,id:`request-body`,children:`Request body`}),`\n`,_jsxs(ParamField,{body:`issue_type`,type:`string`,required:true,id:`param-issue-type`,children:[_jsx(_components.p,{children:`The report category. One of:`}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Value`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`road_closed`})}),_jsx(_components.td,{children:`The road is impassable: closure, street works, blockage.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`road_unsafe`})}),_jsx(_components.td,{children:`A safety hazard: dangerous junction, surface hazard, conflict with motor traffic.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`bad_routing`})}),_jsx(_components.td,{children:`We routed through here when a better route exists.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unclear_instructions`})}),_jsx(_components.td,{children:`A navigation instruction at this location was confusing or wrong.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unpleasant`})}),_jsx(_components.td,{children:`Rideable but unpleasant: rough surface, crowding, steep gradient.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`other`})}),_jsxs(_components.td,{children:[`Anything else. Describe it in `,_jsx(_components.code,{children:`description`}),`.`]})]})]})]})]}),`\n`,_jsx(ParamField,{body:`location`,type:`[number, number]`,required:true,id:`param-location`,children:_jsxs(_components.p,{children:[`The report coordinate as `,_jsx(_components.code,{children:`[longitude, latitude]`}),` (GeoJSON order, see `,_jsx(_components.a,{href:`/api-reference/introduction#coordinate-format`,children:`Coordinate format`}),`).`]})}),`\n`,_jsxs(Accordion,{title:`Optional parameters`,id:`optional-parameters`,children:[_jsx(ParamField,{body:`description`,type:`string`,id:`param-description`,children:_jsx(_components.p,{children:`Free-text description of the issue, up to 2,000 characters. The more specific, the faster the analysis. Include what is blocked, since when, and until when if known.`})}),_jsx(ParamField,{body:`road_name`,type:`string`,id:`param-road-name`,children:_jsx(_components.p,{children:`Name of the affected road or place, up to 200 characters.`})}),_jsxs(ParamField,{body:`issue_subtype`,type:`string`,id:`param-issue-subtype`,children:[_jsxs(_components.p,{children:[`The sub-category, which says what kind of problem it is within the `,_jsx(_components.code,{children:`issue_type`}),`. Sending one classifies the report without waiting for a human to read the description, so it is the single most useful optional field. Each category recognises its own values:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:_jsx(_components.code,{children:`issue_type`})}),_jsxs(_components.th,{children:[`Recognised `,_jsx(_components.code,{children:`issue_subtype`})]})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`road_closed`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`private_locked`}),`, `,_jsx(_components.code,{children:`barrier_gate`}),`, `,_jsx(_components.code,{children:`no_cycling_zone`}),`, `,_jsx(_components.code,{children:`temporary_closure`}),`, `,_jsx(_components.code,{children:`permanent_closure`}),`, `,_jsx(_components.code,{children:`one_way`}),`, `,_jsx(_components.code,{children:`road_missing`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`road_unsafe`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`poor_bike_lane`}),`, `,_jsx(_components.code,{children:`too_many_peds`}),`, `,_jsx(_components.code,{children:`too_many_vehicles`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`bad_routing`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`faster_route`}),`, `,_jsx(_components.code,{children:`quieter_route`}),`, `,_jsx(_components.code,{children:`fewer_turns`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unclear_instructions`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`wrong_direction`}),`, `,_jsx(_components.code,{children:`unclear_instruction`}),`, `,_jsx(_components.code,{children:`missing_instruction`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`unpleasant`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`cobbles_rough`}),`, `,_jsx(_components.code,{children:`too_hilly`}),`, `,_jsx(_components.code,{children:`too_many_peds`})]})]})]})]}),_jsxs(_components.p,{children:[_jsx(_components.code,{children:`other`}),` is accepted under every category. Under `,_jsx(_components.code,{children:`road_closed`}),`, the first five values mean the road is physically blocked and the last two mean the manoeuvre is illegal rather than the road impassable, which we act on differently. Any other string up to 64 characters is stored but is not classified.`]})]}),_jsx(ParamField,{body:`source`,type:`string`,id:`param-source`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Required for partner API keys`}),`, ignored for user session tokens. The source identifier agreed when your key was issued (e.g. `,_jsx(_components.code,{children:`dft`}),`, `,_jsx(_components.code,{children:`forest`}),`): a 2–32 character slug of `,_jsx(_components.code,{children:`a-z`}),`, `,_jsx(_components.code,{children:`0-9`}),`, `,_jsx(_components.code,{children:`_`}),`, `,_jsx(_components.code,{children:`-`}),`. It attributes the submission and scopes which reports your key can read back.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`response-body`,children:`Response body`}),`\n`,_jsx(ResponseField,{name:`id`,type:`string`,id:`param-id`,children:_jsxs(_components.p,{children:[`The report ID, a UUID string. Use it with `,_jsx(_components.a,{href:`/api-reference/reports/get-report`,children:_jsx(_components.code,{children:`GET /reports/{id}`})}),` to poll processing status.`]})}),`\n`,_jsx(ResponseField,{name:`status`,type:`string`,id:`param-status`,children:_jsxs(_components.p,{children:[`Always `,_jsx(_components.code,{children:`received`}),` on creation.`]})}),`\n`,_jsx(ResponseField,{name:`created_at`,type:`string`,id:`param-created-at`,children:_jsx(_components.p,{children:`ISO 8601 timestamp of receipt.`})}),`\n`,_jsx(RequestExample,{children:_jsx(CodeBlock,{filename:`cURL`,numberOfLines:`10`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.cyclemate.club/reports/'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'apikey: YOUR_API_KEY'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Content-Type: application/json'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"issue_type\": \"road_closed\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"location\": [-0.0766, 51.5323],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"description\": \"Carriageway closed for gas works, both directions\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"road_name\": \"Kingsland Road\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"source\": \"dft\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})})}),`\n`,_jsx(ResponseExample,{children:_jsx(CodeBlock,{filename:`Response`,numberOfLines:`5`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6dd58bda-4c2e-4e6d-9b8b-2a41cf6f0e5a\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"received\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"created_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-08-05T10:12:31.201Z\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),`\n`,_jsx(Heading,{level:`2`,id:`variants`,children:`Variants`}),`\n`,_jsx(Heading,{level:`3`,id:`partner-submission`,children:`Partner submission`}),`\n`,_jsxs(_components.p,{children:[`A partner API key must send its agreed `,_jsx(_components.code,{children:`source`}),` slug on every report. Submissions are attributed to that slug, and the key can read back any report submitted through the API.`]}),`\n`,_jsx(Heading,{level:`3`,id:`user-session-submission`,children:`User session submission`}),`\n`,_jsxs(_components.p,{children:[`A signed-in user token submits without `,_jsx(_components.code,{children:`source`}),` (any value sent is ignored). The report is attributed to the user’s account, and the token can read back only that user’s reports.`]}),`\n`,_jsx(Heading,{level:`2`,id:`error-responses`,children:`Error responses`}),`\n`,_jsx(Heading,{level:`3`,id:`400-bad-request`,children:`400 Bad request`}),`\n`,_jsxs(_components.p,{children:[`Invalid body: an unknown `,_jsx(_components.code,{children:`issue_type`}),`, an out-of-range `,_jsx(_components.code,{children:`location`}),`, or a missing `,_jsx(_components.code,{children:`source`}),` on a partner key. The `,_jsx(_components.code,{children:`error`}),` field names the problem.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"issue_type must be one of: road_unsafe, road_closed, bad_routing, unclear_instructions, unpleasant, other\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`401-unauthorized`,children:`401 Unauthorized`}),`\n`,_jsx(_components.p,{children:`Missing or invalid credentials, or an anonymous caller.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Endpoint requires one of: user, service\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`405-method-not-allowed`,children:`405 Method not allowed`}),`\n`,_jsxs(_components.p,{children:[`Method other than `,_jsx(_components.code,{children:`POST`}),` on the collection.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Method not allowed\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`429-too-many-requests`,children:`429 Too many requests`}),`\n`,_jsxs(_components.p,{children:[`Rate limit exceeded, see `,_jsx(_components.a,{href:`#rate-limits`,children:`Rate limits`}),`. Includes a `,_jsx(_components.code,{children:`Retry-After`}),` header.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Rate limit exceeded\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"retry_after_seconds\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`45`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`500-internal-server-error`,children:`500 Internal server error`}),`\n`,_jsx(_components.p,{children:`Unexpected server failure.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Internal server error\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Submit a report","api":"POST /reports/","description":"Send a road or infrastructure report and receive a report ID","href":"/api-reference/reports/submit-report"}}}},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[{"title":"Authentication","slug":"authentication","depth":3,"children":[]},{"title":"Rate limits","slug":"rate-limits","depth":3,"children":[]}]},{"title":"Request body","slug":"request-body","depth":2,"children":[]},{"title":"Response body","slug":"response-body","depth":2,"children":[]},{"title":"Variants","slug":"variants","depth":2,"children":[{"title":"Partner submission","slug":"partner-submission","depth":3,"children":[]},{"title":"User session submission","slug":"user-session-submission","depth":3,"children":[]}]},{"title":"Error responses","slug":"error-responses","depth":2,"children":[{"title":"400 Bad request","slug":"400-bad-request","depth":3,"children":[]},{"title":"401 Unauthorized","slug":"401-unauthorized","depth":3,"children":[]},{"title":"405 Method not allowed","slug":"405-method-not-allowed","depth":3,"children":[]},{"title":"429 Too many requests","slug":"429-too-many-requests","depth":3,"children":[]},{"title":"500 Internal server error","slug":"500-internal-server-error","depth":3,"children":[]}]}],"codeExamples":{"request":{"type":"RequestExample","children":[{"filename":"cURL","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"shellscript\">\u003ccode language=\"shellscript\" numberOfLines=\"10\">\u003cspan class=\"line\">\u003cspan style=\"color:#953800;--shiki-dark:#DCDCAA\">curl\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -X\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> POST\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> 'https://api.cyclemate.club/reports/'\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> 'apikey: YOUR_API_KEY'\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> 'Content-Type: application/json'\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -d\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> '{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"issue_type\": \"road_closed\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"location\": [-0.0766, 51.5323],\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"description\": \"Carriageway closed for gas works, both directions\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"road_name\": \"Kingsland Road\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"source\": \"dft\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> }'\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]},"response":{"type":"ResponseExample","children":[{"filename":"Response","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"5\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"6dd58bda-4c2e-4e6d-9b8b-2a41cf6f0e5a\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"status\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"received\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"created_at\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-08-05T10:12:31.201Z\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]}},"endpoint":{"title":"Submit a report","path":"/reports/","method":"post","request":{"security":[],"parameters":{"query":{},"header":{},"cookie":{},"path":{}},"body":{"application/json":{"schemaArray":[{"type":"object","properties":{"issue_type":[{"type":"string","description":"The report category. One of: Value Meaning `road_closed` The road is impassable: closure, street works, blockage. `road_unsafe` A safety hazard: dangerous junction, surface hazard, conflict with motor traffic. `bad_routing` We routed through here when a better route exists. `unclear_instructions` A navigation instruction at this location was confusing or wrong. `unpleasant` Rideable but unpleasant: rough surface, crowding, steep gradient. `other` Anything else. Describe it in `description` .","required":true}],"location":[{"type":"object","properties":{},"description":"The report coordinate as `[longitude, latitude]` (GeoJSON order, see Coordinate format ).","required":true}]}}],"examples":{"example":{"value":{"issue_type":"\u003cstring>","location":{}}}}}}},"response":{"200":{"application/json":{"schemaArray":[{"type":"object","properties":{"id":[{"type":"string","description":"The report ID, a UUID string. Use it with `GET /reports/{id}` to poll processing status."}],"status":[{"type":"string","description":"Always `received` on creation."}],"created_at":[{"type":"string","description":"ISO 8601 timestamp of receipt."}]}}],"examples":{"example":{"value":{"id":"\u003cstring>","status":"\u003cstring>","created_at":"\u003cstring>"}}}}}},"deprecated":false}},"jsLinks":[],"subdomain":"cyclemate","siteName":"Cyclemate","title":"Submit a report - Cyclemate","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-15T00:17:39.037Z","originalFileLocation":"api-reference/reports/submit-report.mdx"},"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=\"Send a road or infrastructure report and receive a report ID\">\u003cmeta data-mint-head name=\"keywords\" content=\"bike navigation, bike directions, gbfs api, custom routes, group rides, bike routing api\">\u003cmeta data-mint-head name=\"application-name\" content=\"Cyclemate\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/cyclemate/vUWyMovfjsDjW2Ce/_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/cyclemate/vUWyMovfjsDjW2Ce/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/cyclemate/vUWyMovfjsDjW2Ce/_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/cyclemate/vUWyMovfjsDjW2Ce/_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/cyclemate/vUWyMovfjsDjW2Ce/_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/cyclemate/vUWyMovfjsDjW2Ce/_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/cyclemate/vUWyMovfjsDjW2Ce/_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/cyclemate/vUWyMovfjsDjW2Ce/_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/cyclemate/vUWyMovfjsDjW2Ce/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Submit a report - Cyclemate\">\u003cmeta data-mint-head property=\"og:description\" content=\"Send a road or infrastructure report and receive a report ID\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Cyclemate\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.cyclemate.club/api-reference/reports/submit-report\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://cyclemate.mintlify.app/_mintlify/api/og/v2?division=Contributions\u0026amp;title=Submit+a+report\u0026amp;description=Send+a+road+or+infrastructure+report+and+receive+a+report+ID\u0026amp;theme=a4f32318662735c779c2d71d\u0026amp;signature=775f06b1c548ef8aaf36b5aebb226fd7c18a774d197cfd52fc41a3f255f99a5e\">\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=\"Submit a report - Cyclemate\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Send a road or infrastructure report and receive a report ID\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://cyclemate.mintlify.app/_mintlify/api/og/v2?division=Contributions\u0026amp;title=Submit+a+report\u0026amp;description=Send+a+road+or+infrastructure+report+and+receive+a+report+ID\u0026amp;theme=a4f32318662735c779c2d71d\u0026amp;signature=775f06b1c548ef8aaf36b5aebb226fd7c18a774d197cfd52fc41a3f255f99a5e\">\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/cyclemate/vUWyMovfjsDjW2Ce/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Cyclemate\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#537AEF\">\u003cmeta data-mint-head name=\"charset\" content=\"UTF-8\">\u003cmeta data-mint-head name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\u003cmeta data-mint-head name=\"author\" content=\"Cyclemate\">\u003cmeta data-mint-head name=\"googlebot\" content=\"index, follow\">\u003cmeta data-mint-head name=\"referrer\" content=\"origin\">\u003cmeta data-mint-head name=\"rating\" content=\"general\">\u003cmeta data-mint-head name=\"language\" content=\"en\">\u003cmeta data-mint-head name=\"copyright\" content=\"Copyright 2026\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.cyclemate.club/api-reference/reports/submit-report\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/reports/submit-report.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.cyclemate.club/#organization\",\"name\":\"Cyclemate\",\"url\":\"https://docs.cyclemate.club\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/cyclemate/0-MogKEn8FZNgFLp/logo/light.svg?fit=max\u0026auto=format\u0026n=0-MogKEn8FZNgFLp\u0026q=85\u0026s=11a7d1f41156617a1354abcf0b08ab6d\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.cyclemate.club#website\",\"name\":\"Cyclemate\",\"url\":\"https://docs.cyclemate.club\",\"publisher\":{\"@id\":\"https://docs.cyclemate.club/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.cyclemate.club/api-reference/reports/submit-report#webpage\",\"url\":\"https://docs.cyclemate.club/api-reference/reports/submit-report\",\"name\":\"Submit a report\",\"description\":\"Send a road or infrastructure report and receive a report ID\",\"dateModified\":\"2026-10-15T00:17:39.037Z\",\"isPartOf\":{\"@id\":\"https://docs.cyclemate.club#website\"},\"breadcrumb\":{\"@id\":\"https://docs.cyclemate.club/api-reference/reports/submit-report#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.cyclemate.club/api-reference/reports/submit-report#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Contributions\",\"item\":\"https://docs.cyclemate.club/api-reference/reports/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Submit a report\",\"item\":\"https://docs.cyclemate.club/api-reference/reports/submit-report\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.cyclemate.club/api-reference/reports/submit-report#apireference\",\"headline\":\"Submit a report\",\"name\":\"Submit a report\",\"description\":\"Send a road or infrastructure report and receive a report ID\",\"url\":\"https://docs.cyclemate.club/api-reference/reports/submit-report\",\"mainEntityOfPage\":{\"@id\":\"https://docs.cyclemate.club/api-reference/reports/submit-report#webpage\"},\"dateModified\":\"2026-10-15T00:17:39.037Z\",\"publisher\":{\"@id\":\"https://docs.cyclemate.club/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.cyclemate.club#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Cyclemate\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Cyclemate","nav":{"global":null,"tabs":[{"tab":"API reference","groups":[{"group":"Getting started","pages":[{"title":"Cyclemate for Developers","href":"/api-reference/introduction"},{"title":"Login with Cyclemate","href":"/api-reference/oauth"},{"title":"API versioning","href":"/api-reference/versioning"}]},{"group":"Routing","pages":[{"title":"Safe cycling directions","sidebarTitle":"Introduction","href":"/api-reference/routing/overview"},{"title":"Get multiple directions","api":"POST /multi-modal/v2/","href":"/api-reference/routing/multimodal"},{"title":"Get directions","api":"POST /directions/v2/","href":"/api-reference/routing/directions"},{"title":"Explain a route","api":"POST /explain-supersafe/","href":"/api-reference/routing/explain-supersafe"},{"title":"Embeds","href":"/api-reference/routing/embed"},{"title":"Deep link to routing","href":"/api-reference/routing/deep-links"}]},{"group":"Custom routes","pages":[{"title":"Custom routes","sidebarTitle":"Introduction","href":"/api-reference/custom-routes/overview"},{"title":"Create a route","api":"POST /custom-routes/","href":"/api-reference/custom-routes/create-route"},{"title":"Get a route","api":"GET /custom-routes/{id}/","href":"/api-reference/custom-routes/get-route"},{"title":"List your routes","api":"GET /custom-routes/","href":"/api-reference/custom-routes/list-routes"},{"title":"Update a route","api":"PATCH /custom-routes/{id}/","href":"/api-reference/custom-routes/update-route"},{"title":"Delete a route","api":"DELETE /custom-routes/{id}/","href":"/api-reference/custom-routes/delete-route"},{"title":"Upload an image","api":"POST /custom-routes/{id}/images/","href":"/api-reference/custom-routes/upload-image"},{"title":"Delete an image","api":"DELETE /custom-routes/{id}/images/{image_id}/","href":"/api-reference/custom-routes/delete-image"}]},{"group":"AI assistants","pages":[{"title":"Connect Cyclemate to an AI assistant","href":"/api-reference/assistants/connect"}]},{"group":"Contributions","pages":[{"title":"Contribute road data to Cyclemate","sidebarTitle":"Introduction","description":"Send road and infrastructure data that feeds our routing algorithm and safe cycling maps","href":"/api-reference/reports/overview"},{"title":"Submit a report","api":"POST /reports/","href":"/api-reference/reports/submit-report"},{"title":"Get report status","api":"GET /reports/{id}/","description":"Poll a submitted report for its processing status and outcome summary","href":"/api-reference/reports/get-report"},{"title":"Submit data feed","href":"/api-reference/reports/submit-data-feed"}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Submit a report - Cyclemate","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff"],"chunks":["OpenApiReferenceProvider-C8RPHPxo.js","utils-0BK-9q6z.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DfjzsUJT.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B4v9psJ4.js","snippetPresets-CpTQv-Ez.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-BNP-Fvr0.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BSgu6h1D.js","shallow-Biv1i9Gs.js","getApiPlaygroundDisplay-BoGOXhtF.js","CodeSnippet-DvQoT18_.js","CodeSnippets-Dnpa15xT.js","Page-Buji1S4J.js","getPastedJson-xAIyhUFE.js","icon-S6FBih11.js","MethodPill-SaYeUZyk.js","DuplicateIcon-Cs-p3v2Q.js","createIcon-DjCFEoHq.js","DynamicMarkdown-BcnBltEQ.js","SectionHeading-BUBl0eEF.js","axios-vUo_bRtp.js"]}