{ "openapi": "3.0.3", "info": { "title": "accounting:extf-files", "description": "This API uploads files of DATEV-Format (\"EXTF\" only) to the DATEV data center. For more information regarding this csv files, see the documentation of DATEV-Format in our Developer Portal (File Interfaces > DATEV-Format).\n\nThe individual API services are described both functionally and technically. Wherever possible, examples are used to illustrate the calls and responses. All services only support the JSON format. The order of the return values is not set and may deviate from the order specified in this document. Return values with a value of “null” will not be returned.\n", "termsOfService": "https://www.datev.de/web/de/m/ueber-datev/das-unternehmen/agb/?stat_Mparam=int_url_datev_agb", "contact": { "name": "DATEV Schnittstellenberatung", "email": "schnittstellenberatung@datev.de" }, "license": { "name": "DATEV eG", "url": "http://www.datev.de" }, "version": "3.0.1" }, "servers": [ { "url": "https://accounting-extf-files.api.datev.de/platform/v3" }, { "url": "https://accounting-extf-files.api.datev.de/platform-sandbox/v3" } ], "security": [ { "datev_openid": [ "datev:accounting:extf-files-import" ], "client_id": [] }, { "datev_openid_sandbox": [ "datev:accounting:extf-files-import" ], "client_id": [] }, { "datev_idp_next": [ "datev:accounting:extf-files-import" ], "client_id": [] } ], "tags": [ { "name": "extf-files", "description": "Transfer a file" }, { "name": "jobs", "description": "Check status" } ], "paths": { "/clients/{client-id}/extf-files/import": { "post": { "tags": [ "extf-files" ], "summary": "Transfer a file to DATEV data center", "description": "This endpoint accepts one file based on DATEV-Format type \"EXTF\".\n", "operationId": "importExtfFile", "parameters": [ { "name": "client-id", "in": "path", "description": "ID that identifies the client.", "required": true, "schema": { "type": "string" }, "example": "29098-100" }, { "name": "Filename", "in": "header", "description": "Name of the file. Unallowed chars will be replaced by an underscore (for more details http://www.datev.de/hilfe/1023095).", "required": true, "schema": { "pattern": "EXTF_.{0,51}\\.csv", "type": "string" }, "example": "EXTF_BS_20200101_1.csv" }, { "name": "Reference-Id", "in": "header", "description": "Unique reference from 3rd-party app for a transfered file (support reasons)\n", "schema": { "pattern": "[-0-9A-Za-z_äöüÄÖÜß_. +?;]{0,254}", "type": "string" }, "example": "Buchungsstapel_Verkäufe_2020_01_Nr_001" }, { "name": "Client-Application-Version", "in": "header", "description": "Optional: Version of the 3rd-party app (support reasons)\n", "schema": { "pattern": "[-0-9A-Za-z_äöüÄÖÜß_. +?;]{0,254}", "type": "string" }, "example": "2.0c" } ], "requestBody": { "description": "Content of the extf-file.\nMax allowed file size: 50 MB\nSupported File encodings are windows-1252, UTF-8, UTF-16LE, UTF-16BE. Encoding is determined based on the Byte Order Mark of the file. If no Byte Order Mark is present code page 1252 is assumed.\n", "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary", "example": "file as binary stream" } } }, "required": true }, "responses": { "202": { "description": "The file has been succesfully received and is now being processed.\nIf the file is infected by viruses or if the file contains malicious bytecode it will be deleted. You will be able to query the status of the job with the returned URL.\n", "headers": { "Retry-After": { "description": "Minimum period of time in seconds to wait before jobs should be checked.\n", "schema": { "type": "integer" }, "example": "5" }, "Location": { "description": "Redirect URL to check jobs, relative to the server URL.\n", "schema": { "type": "string" }, "example": "/clients/717488-20206/extf-files/jobs/8a772151-6c21-40fe-96ae-4d42cbeeda5a" } } }, "400": { "description": "A client error has occurred. Further information is contained in the response message.
Error Description Reason and solution
1008831 Invalid message-body Message body for request is missing
1008832 Invalid header fields Filename is empty
1008832 Invalid header fields Filename must conform to following pattern'EXTF_.{0,51}.csv
1008832 Invalid header fields Reference-Id must conform to following pattern'[-0-9A-Za-z_äöüÄÖÜß_. +\\\\?;]{0,254}
1008835 Invalid request URI path Request-URI contains one or more invalid path segments. Path segment client-id is invalid
" }, "401": { "description": "Unauthorized" }, "403": { "description": "This action is not allowed. This can be caused by missing security scopes or missing user permissions.
Error Description Reason and solution
1008829 Missing required scope Missing scope(s): datev:accounting:extf-files-import
", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" } } } }, "404": { "description": "The specified resource was not found." }, "405": { "description": "Method Not Allowed", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "title": "Method Not Allowed", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 405 } } } }, "406": { "description": "Not Acceptable", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "title": "Not Acceptable", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 406 } } } }, "413": { "description": "File import failed due to file size exceeds the maximum file size. Additional information about the affected part and the maximum size is provided as error message.
Error Description Reason and solution
1008833 Invalid file File size exceeds 50 MB
" }, "415": { "description": "Unsupported Media Type", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "title": "Unsupported Media Type", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 415 } } } }, "500": { "description": "Unexpected server error occured. Further retries may not yield different results and should be avoided. Should the problem persist, please contact support.", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "title": "Internal Server Error", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 500 } } } }, "503": { "description": "Service currently not available. Please try again later.
Error Description Reason and solution
1008837 Try again An internal error occurred. Job failed. Try again
" } }, "x-codegen-request-body-name": "extf-file" } }, "/clients/{client-id}/extf-files/jobs": { "get": { "tags": [ "jobs" ], "summary": "Retrieves states of all known jobs.", "operationId": "getJobs", "parameters": [ { "name": "client-id", "in": "path", "description": "ID that identifies the client.", "required": true, "schema": { "type": "string" } }, { "name": "skip", "in": "query", "description": "Number of items to skip when retrieving the list.\n", "schema": { "type": "integer" }, "example": 20 }, { "name": "top", "in": "query", "description": "Maximum number of items to return when querying the list. If no value or a value greater than 100 is entered, then only 100 entries will be returned.\n", "schema": { "type": "integer" }, "example": 10 } ], "responses": { "200": { "description": "List of jobs has been returned.\nThe following error-codes can appear in the validation_details:
Error Description Reason and solution
1008833 Invalid file No payload
1008833 Invalid file More than 99999 postings
1008833 Invalid file Only Windows-1252,UTF-8, UTF16LE, and UTF16BE are supported
1008834 EXTF-header Missing columns in EXTF-header
1008834 EXTF-header EXTF-header exceeds maximum length of 1000 characters
1008834 EXTF-header Invalid combination of data category, format name and format version
1008834 EXTF-header DateFrom must not be greater than DateTo
1008834 EXTF-header The consultant-number in the EXTF-header does not match with the upload request
1008834 EXTF-header The client-number in the EXTF-header does not match with the upload reques
1008834 EXTF-header Error in header field - DATEV Format Label - must be EXTF (1)
1008834 EXTF-header Error in header field - Version Number - is invalid (2)
1008834 EXTF-header Error in header field - Data Category - is invalid (3)
1008834 EXTF-header Error in header field - Format Name - is invalid (4)
1008834 EXTF-header Error in header field - Format Version - is invalid (5)
1008834 EXTF-header Error in header field - Created On - is invalid (6)
1008834 EXTF-header Error in header field - Imported - is invalid (7)
1008834 EXTF-header Error in header field - Consultant - is invalid (11)
1008834 EXTF-header Error in header field - Client - is invalid (12)
1008834 EXTF-header Error in header field - FY Begin - is invalid (13)
1008834 EXTF-header Error in header field - Length of Ledger Account - is invalid (14)
1008834 EXTF-header Error in header field - Date From - is invalid (15)
1008834 EXTF-header Error in header field - Date To - is invalid (16)
1008834 EXTF-header Error in header field - Reserved - must be empty (23)
1008834 EXTF-header Error in header field - Reserved - must be empty (24)
1008834 EXTF-header Error in header field - Reserved - must be empty (25)
1008834 EXTF-header Error in header field - Reserved - must be empty (26)
1008834 EXTF-header Error in header field - Reserved - must be empty (29)
1008834 EXTF-header Error in header field - Reserved - must be empty (30)
1008836 Virus found The transferred EXTF-file contains a virus
1008837 Try again An internal error occurred. Job failed. Try again.
1008838 Missing permission Permission to transfer data for this client-id is missing or has expired. Please contact your tax consultant.
", "headers": { "Total-Items": { "description": "Total count of jobs available", "schema": { "type": "string" }, "example": "Total-Items: 248" }, "Link": { "description": "Contains link to the previous/next page.\n", "schema": { "type": "string" }, "example": ";rel=\"prev\", ;rel=\"next\"" } }, "content": { "application/json;charset=utf-8": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Job" } } } } }, "400": { "description": "A client error has occurred. Further information is contained in the response message.
Error Description Reason and solution
1008828 Invalid query parameters Paging parameters are invalid - skip - must be a positive integer
1008828 Invalid query parameters Paging parameters are invalid - top - must be a positive integer
1008828 Invalid query parameters Filter syntax is invalid
1008828 Invalid query parameters Filter operators are invalid
1008835 Invalid query parameters Request-URI contains one or more invalid path segments
", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "type": "http://www.datev.de/hilfe/1008828", "title": "Invalid query parameters", "detail": "Paging parameters are invalid", "affected_elements": [ { "name": "skip", "reason": "Must be a positive integer" }, { "name": "top", "reason": "Must be a positive integer" } ], "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 400 } } } }, "401": { "description": "Unauthorized" }, "403": { "description": "This action is not allowed. This can be caused by missing security scopes or missing user permissions.
Error Description Reason and solution
1008829 Missing required scope Missing scope(s): datev:accounting:extf-files-import
", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "type": "http://www.datev.de/hilfe/1008829", "title": "Missing required scope", "detail": "Missing scope(s) are: {scope}", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 403 } } } }, "404": { "description": "The specified resource was not found." }, "405": { "description": "Method Not Allowed", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "title": "Method Not Allowed", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 405 } } } }, "406": { "description": "Not Acceptable", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "title": "Not Acceptable", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 406 } } } }, "500": { "description": "Unexpected server error occured. Further retries may not yield different results and should be avoided. Should the problem persist, please contact support.", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "title": "Internal Server Error", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 500 } } } }, "503": { "description": "Service currently not available. Please try again later.", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "title": "Service Unavailable", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 503 } } } } } } }, "/clients/{client-id}/extf-files/jobs/{job-id}": { "get": { "tags": [ "jobs" ], "summary": "Retrieves state of a designated job.", "operationId": "getJob", "parameters": [ { "name": "client-id", "in": "path", "description": "ID that identifies the client.", "required": true, "schema": { "type": "string" } }, { "name": "job-id", "in": "path", "description": "ID of the job", "required": true, "schema": { "type": "string" }, "example": "c9755451-57af-4811-8865-b0243ca5660d" } ], "responses": { "200": { "description": "The job object including the current status.The following error-codes can appear in the validation_details:
Error Description Reason and solution
1008833 Invalid file No payload
1008833 Invalid file More than 99999 postings
1008833 Invalid file Only Windows-1252, UTF-8, UTF16LE, and UTF16BE are supported
1008834 EXTF-header Missing columns in EXTF-header
1008834 EXTF-header EXTF-header exceeds maximum length of 1000 characters
1008834 EXTF-header Invalid combination of data category, format name and format version
1008834 EXTF-header DateFrom must not be greater than DateTo
1008834 EXTF-header The consultant-number in the EXTF-header does not match with the upload request
1008834 EXTF-header The client-number in the EXTF-header does not match with the upload request
1008834 EXTF-header Error in header field - DATEV Format Label - must be EXTF (1)
1008834 EXTF-header Error in header field - Version Number - is invalid (2)
1008834 EXTF-header Error in header field - Data Category - is invalid (3)
1008834 EXTF-header Error in header field - Format Name - is invalid (4)
1008834 EXTF-header Error in header field - Format Version - is invalid (5)
1008834 EXTF-header Error in header field - Created On - is invalid (6)
1008834 EXTF-header Error in header field - Imported - is invalid (7)
1008834 EXTF-header Error in header field - Consultant - is invalid (11)
1008834 EXTF-header Error in header field - Client - is invalid (12)
1008834 EXTF-header Error in header field - FY Begin - is invalid (13)
1008834 EXTF-header Error in header field - Length of Ledger Account - is invalid (14)
1008834 EXTF-header Error in header field - Date From - is invalid (15)
1008834 EXTF-header Error in header field - Date To - is invalid (16)
1008834 EXTF-header Error in header field - Reserved - must be empty (23)
1008834 EXTF-header Error in header field - Reserved - must be empty (24)
1008834 EXTF-header Error in header field - Reserved - must be empty (25)
1008834 EXTF-header Error in header field - Reserved - must be empty (26)
1008834 EXTF-header Error in header field - Reserved - must be empty (29)
1008834 EXTF-header Error in header field - Reserved - must be empty (30)
1008836 Virus found The transferred EXTF-file contains a virus
1008837 Try again An internal error occurred. Job failed. Try again.
1008838 Missing permission Permission to transfer data for this client-id is missing or has expired. Please contact your tax consultant.
", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/Job" } } } }, "400": { "description": "A client error has occurred. Further information is contained in the response message.
Error Description Reason and solution
1008835 Invalid request URI path Request-URI contains one or more invalid path segments
", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "type": "http://www.datev.de/hilfe/1008835", "title": "Invalid request URI path", "detail": "Request-URI contains one or more invalid path segments", "affected_elements": [ { "name": "client-id", "reason": "Path segment client-id is invalid" } ], "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 400 } } } }, "401": { "description": "Unauthorized" }, "403": { "description": "This action is not allowed. This can be caused by missing security scopes or missing user permissions.
Error Description Reason and solution
1008829 Missing required scope Missing scope(s): datev:accounting:extf-files-import
", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "type": "http://www.datev.de/hilfe/1008829", "title": "Missing required scope", "detail": "Missing scope(s) are: {scope}", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 403 } } } }, "404": { "description": "The specified resource was not found." }, "405": { "description": "Method Not Allowed", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "title": "Method Not Allowed", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 405 } } } }, "406": { "description": "Not Acceptable", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "title": "Not Acceptable", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 406 } } } }, "500": { "description": "Unexpected server error occured. Further retries may not yield different results and should be avoided. Should the problem persist, please contact support.", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "title": "Internal Server Error", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 500 } } } }, "503": { "description": "Service currently not available. Please try again later.", "content": { "application/json;charset=utf-8": { "schema": { "$ref": "#/components/schemas/ProblemDetails" }, "example": { "title": "Service Unavailable", "request_id": "f11381c7-ba0e-4a3a-b2eb-fe4a6cc092c9", "status": 503 } } } } } } } }, "components": { "schemas": { "ProblemDetails": { "type": "object", "properties": { "type": { "type": "string", "description": "A URI reference [RFC3986](https://tools.ietf.org/html/rfc3986) that identifies the\nproblem type. This specification encourages that, when\ndereferenced, a human-readable documentation for the\nproblem type (e.g., using HTML [W3C.REC-html5-20141028]) is provided. When\nthis member is not present, its value is assumed to be \"about:blank\".\n" }, "title": { "type": "string", "description": "A short, human-readable summary of the problem\ntype. It SHOULD NOT change from occurrence to occurrence of the\nproblem, except for purposes of localization (e.g., using\nproactive content negotiation; see [RFC7231](https://tools.ietf.org/html/rfc7231#section-3.4), Section 3.4).\n" }, "detail": { "type": "string", "description": "A human-readable explanation specific to this occurrence of the problem.\n" }, "affected_elements": { "type": "array", "items": { "$ref": "#/components/schemas/AffectedElement" } }, "request_id": { "type": "string", "description": "ID of the request" }, "status": { "type": "integer", "description": "The HTTP status code ([RFC7231](https://tools.ietf.org/html/rfc7231#section-6), Section 6)\ngenerated by the origin server for this occurrence of the problem.\n", "format": "int32", "example": 400 } } }, "ValidationDetails": { "type": "object", "properties": { "type": { "type": "string", "description": "A URI reference [RFC3986](https://tools.ietf.org/html/rfc3986) that identifies the\nproblem type. This specification encourages that, when\ndereferenced, a human-readable documentation for the\nproblem type (e.g., using HTML [W3C.REC-html5-20141028]) is provided. When\nthis member is not present, its value is assumed to be \"about:blank\".\n", "example": "http://www.datev.de/hilfe/1008834" }, "title": { "type": "string", "description": "A short, human-readable summary of the problem\ntype. It SHOULD NOT change from occurrence to occurrence of the\nproblem, except for purposes of localization (e.g., using\nproactive content negotiation; see [RFC7231](https://tools.ietf.org/html/rfc7231#section-3.4), Section 3.4).\n", "example": "Invalid EXTF-header" }, "detail": { "type": "string", "description": "A human-readable explanation specific to this occurrence of the problem.\n", "example": "Fields with error" }, "affected_elements": { "type": "array", "items": { "$ref": "#/components/schemas/AffectedElement" } } } }, "AffectedElement": { "type": "object", "properties": { "name": { "type": "string", "description": "Name of the affected element.", "example": "DATEV Format Identifier" }, "reason": { "type": "string", "description": "Reason for the error.", "example": "must be 'EXTF'" } } }, "Job": { "type": "object", "properties": { "id": { "type": "string", "description": "Identifies the job", "example": "5656-zyxv-trew-ijkl" }, "filename": { "type": "string", "description": "Name of the file", "example": "EXTF_AusgangsrechnungenMaerz.CSV" }, "fiscal_year_begin": { "type": "string", "description": "First day of fiscal year", "format": "date" }, "client_application_display_name": { "type": "string", "description": "Name of the system uploading the file", "example": "Test_Office" }, "client_application_vendor": { "type": "string", "description": "Vendor of the system uploading the file", "example": "Test_StartUp" }, "client_application_version": { "type": "string", "description": "Version of the system uploading the file", "example": "T_1.23" }, "data_category_id": { "type": "integer", "description": "Data category ID. As an example, data_category_id 21 means \"accounting records\"", "example": 21 }, "date_from": { "type": "string", "description": "Accounting sequence date from", "format": "date" }, "date_to": { "type": "string", "description": "Accounting sequence date to", "format": "date" }, "label": { "type": "string", "description": "Description of accounting sequence. Labels that exceed a lenght of 250 characters are truncated to 250 characters followed by three dots.", "example": "AR 2020/03" }, "number_of_accounting_records": { "type": "integer", "description": "Number of accounting records", "example": 127 }, "reference_id": { "type": "string", "description": "User defined ID", "example": "TO_2020_4713" }, "result": { "type": "string", "description": "Status of the job", "example": "failed", "enum": [ "pending", "succeeded", "failed" ] }, "timestamp": { "type": "string", "description": "Timestamp when the service received the file (automatically created)", "format": "date-time", "example": "2020-04-13T17:55:42Z" }, "validation_details": { "$ref": "#/components/schemas/ValidationDetails" } } } }, "parameters": { "client-id": { "name": "client-id", "in": "path", "description": "ID that identifies the client.", "required": true, "schema": { "type": "string" }, "example": "29098-100" } }, "securitySchemes": { "client_secret": { "type": "apiKey", "name": "X-DATEV-Client-Secret", "in": "header", "x-key-type": "client_secret" }, "client_id": { "type": "apiKey", "name": "X-DATEV-Client-Id", "in": "header", "x-key-type": "client_id" }, "datev_openid": { "type": "oauth2", "flows": { "authorizationCode": { "authorizationUrl": "https://login.datev.de/openid/authorize", "tokenUrl": "https://api.datev.de/token", "scopes": { "datev:accounting:extf-files-import": "allows upload for DATEV-Format files and to check status" } } } }, "datev_openid_sandbox": { "type": "oauth2", "flows": { "authorizationCode": { "authorizationUrl": "https://login.datev.de/openidsandbox/authorize", "tokenUrl": "https://sandbox-api.datev.de/token", "scopes": { "datev:accounting:extf-files-import": "allows upload for DATEV-Format files and to check status" } } } }, "datev_idp_next": { "type": "oauth2", "flows": { "authorizationCode": { "authorizationUrl": "https://signin.datev.de/datevam/oauth2/realms/root/realms/user/authorize", "tokenUrl": "https://signin.datev.de/datevam/oauth2/realms/root/realms/user/access_token", "scopes": { "datev:accounting:extf-files-import": "allows upload for DATEV-Format files and to check status" } } } } } } }