Skip to content

Latest commit

 

History

History
1068 lines (911 loc) · 38.6 KB

File metadata and controls

1068 lines (911 loc) · 38.6 KB

NAME

libmtdac_mtd.h - Core types / macros

SYNOPSIS

#include <libmtdac/mtd.h>

DESCRIPTION

This header file contains the public interface to the library.

Library version

#define LIBMTDAC_MAJOR_VERSION
#define LIBMTDAC_MINOR_VERSION
#define LIBMTDAC_MICRO_VERSION

These are integers that contain the library version.

Log level

#define MTD_OPT_LOG_ERR
#define MTD_OPT_LOG_INFO
#define MTD_OPT_LOG_DEBUG_DATA
#define MTD_OPT_LOG_DEBUG_ALL

These set the desired log level. Defaults to MTD_OPT_LOG_ERR

There is a MTD_OPT_LOG_DEBUG compatibility macro that is an alias for MTD_OPT_LOG_DEBUG_ALL

Connection type options

#define MTD_OPT_ACT_MOBILE_APP_DIRECT
#define MTD_OPT_ACT_DESKTOP_APP_DIRECT
#define MTD_OPT_ACT_MOBILE_APP_VIA_SERVER
#define MTD_OPT_ACT_DESKTOP_APP_VIA_SERVER
#define MTD_OPT_ACT_WEB_APP_VIA_SERVER
#define MTD_OPT_ACT_BATCH_PROCESS_DIRECT
#define MTD_OPT_ACT_OTHER_DIRECT
#define MTD_OPT_ACT_OTHER_VIA_SERVER

These set the application connection method. One of these should be set.

Header options

#define MTD_OPT_NO_ANTI_FRAUD_HDRS
#define MTD_OPT_SND_EMPTY_HDRS

Don't sent anti-fraud headers and send headers that have no value rather than skipping them respectively.

Misc. options

#define MTD_OPT_GLOBAL_INIT

Can be passed to mtd_init(3) in single threaded applications instead of calling mtd_global_init(3).

#define MTD_OPT_PRODUCTION_API

Use the production rather than sandbox API.

Format validation

enum mtd_vldt_fmt {
        MTD_VLDT_FMT_ACCOUNT_NAME,
        MTD_VLDT_FMT_BUSINESS_ID,
        MTD_VLDT_FMT_CALCULATION_ID,
        MTD_VLDT_FMT_CHARITY_NAME,
        MTD_VLDT_FMT_COMPANY_NAME,
        MTD_VLDT_FMT_COMPANY_NUMBER,
        MTD_VLDT_FMT_EMPLOYER_NAME,
        MTD_VLDT_FMT_EMPLOYER_REF,
        MTD_VLDT_FMT_EMPLOYMENT_ID,
        MTD_VLDT_FMT_ID_15,
        MTD_VLDT_FMT_I_F_NAME,
        MTD_VLDT_FMT_ISO_8601_DATE,
        MTD_VLDT_FMT_LOSS_ID,
        MTD_VLDT_FMT_NINO,
        MTD_VLDT_FMT_PAYROLL_ID,
        MTD_VLDT_FMT_PERIOD_ID,
        MTD_VLDT_FMT_REF,
        MTD_VLDT_FMT_SCHEME_REF,
        MTD_VLDT_FMT_SCHEME_REF_TAS,
        MTD_VLDT_FMT_TAX_YEAR,
        MTD_VLDT_FMT_UUID,
        MTD_VLDT_FMT_UUID_89AB,
};

Aliases for some of the above

#define MTD_VLDT_FMT_ASSET_DESC                MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_BENEFIT_ID                MTD_VLDT_FMT_UUID_89AB
#define MTD_VLDT_FMT_BUILDING_NAME             MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_BUILDING_NUMBER           MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_CORRELATION_ID            MTD_VLDT_FMT_UUID
#define MTD_VLDT_FMT_CUSTOMER_REF              MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_EMPLOYMENT_ID             MTD_VLDT_FMT_UUID_89AB
#define MTD_VLDT_FMT_EVENT                     MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_HOLDING_COMPANY_NAME      MTD_VLDT_FMT_I_F_NAME
#define MTD_VLDT_FMT_POSTCODE                  MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_QOPS_REF                  MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_REPORT_ID                 MTD_VLDT_FMT_UUID
#define MTD_VLDT_FMT_SAVINGS_ACCOUNT_NAME      MTD_VLDT_FMT_ACCOUNT_NAME
#define MTD_VLDT_FMT_SAVINGS_ACCOUNT_ID        MTD_VLDT_FMT_ID_15
#define MTD_VLDT_FMT_SF74_REF                  MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_SUBMISSION_ID             MTD_VLDT_FMT_UUID_89AB
#define MTD_VLDT_FMT_TAXATION_REF              MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_TAXATION_TREATY           MTD_VLDT_FMT_REF
#define MTD_VLDT_FMT_UNIQUE_INVESTMENT_REF     MTD_VLDT_FMT_REF

Errors (libmtdac)

enum mtd_error {
        MTD_ERR_NONE = 0,
        MTD_ERR_OS,
        MTD_ERR_REQUEST,
        MTD_ERR_CURL,
        MTD_ERR_NEEDS_AUTHORISATION,
        MTD_ERR_UNKNOWN_FLAGS,
        MTD_ERR_UNKNOWN_SCOPES,
        MTD_ERR_LIB_TOO_OLD,
        MTD_ERR_CONFIG_DIR_UNSPEC,
        MTD_ERR_CONFIG_DIR_INVALID,
        MTD_ERR_NO_CONFIG,
        MTD_ERR_INVALID_SCOPE,

        MTD_ERR_INVALID_ERROR
};

Errors (HMRC)

enum mtd_hmrc_error {
        MTD_HMRC_ERR_MULTIPLE = 0,

        MTD_HMRC_ERR_CHARGE_REFERENCE_INVALID,

        MTD_HMRC_ERR_CLIENT_OR_AGENT_NOT_AUTHORISED,

        MTD_HMRC_ERR_DATE_FROM_INVALID,
        MTD_HMRC_ERR_DATE_RANGE_INVALID,
        MTD_HMRC_ERR_DATE_RANGE_TOO_LARGE,
        MTD_HMRC_ERR_DATE_TO_INVALID,

        MTD_HMRC_ERR_DUPLICATE_SUBMISSION,
        MTD_HMRC_ERR_DUPLICATE_SUBMITTED_ON,

        MTD_HMRC_ERR_FORMAT_ACCOUNT_NAME,
        MTD_HMRC_ERR_FORMAT_ASSET_DESCRIPTION,
        MTD_HMRC_ERR_FORMAT_ASSET_TYPE,
        MTD_HMRC_ERR_FORMAT_BENEFIT_ID,
        MTD_HMRC_ERR_FORMAT_BENEFIT_TYPE,
        MTD_HMRC_ERR_FORMAT_BUSINESS_ID,
        MTD_HMRC_ERR_FORMAT_BUSINESS_INCOME_2_YEARS_PRIOR,
        MTD_HMRC_ERR_FORMAT_CALC_ID,
        MTD_HMRC_ERR_FORMAT_CALCULATE_ACCRUED_INTEREST.
        MTD_HMRC_ERR_FORMAT_CALCULATION_ID,
        MTD_HMRC_ERR_FORMAT_CALCULATION_TYPE,
        MTD_HMRC_ERR_FORMAT_CESSATION_DATE,
        MTD_HMRC_ERR_FORMAT_CHARGE_REFERENCE,
        MTD_HMRC_ERR_FORMAT_CHECKPOINT_ID,
        MTD_HMRC_ERR_FORMAT_CLAIM_OR_ELECTION_CODES,
        MTD_HMRC_ERR_FORMAT_CLASS_4_EXEMPTION_REASON,
        MTD_HMRC_ERR_FORMAT_CLASS_OF_SHARES_ACQUIRED,
        MTD_HMRC_ERR_FORMAT_CLASS_OF_SHARES_AWARDED,
        MTD_HMRC_ERR_FORMAT_COMPANY_NAME,
        MTD_HMRC_ERR_FORMAT_COMPANY_NUMBER,
        MTD_HMRC_ERR_FORMAT_COUNTRY_CODE,
        MTD_HMRC_ERR_FORMAT_CUSTOMER_PAYMENT_INFORMATION,
        MTD_HMRC_ERR_FORMAT_CUSTOMER_REF,
        MTD_HMRC_ERR_FORMAT_CUSTOMER_REFERENCE,
        MTD_HMRC_ERR_FORMAT_DATE,
        MTD_HMRC_ERR_FORMAT_DATE_OF_INVESTMENT,
        MTD_HMRC_ERR_FORMAT_DEDUCTIONS_FROM_DATE,
        MTD_HMRC_ERR_FORMAT_DEDUCTIONS_TO_DATE,
        MTD_HMRC_ERR_FORMAT_DIRECTORSHIP_CEASED_DATE,
        MTD_HMRC_ERR_FORMAT_DOC_NUMBER,
        MTD_HMRC_ERR_FORMAT_DOUBLE_TAXATION_ARTICLE,
        MTD_HMRC_ERR_FORMAT_DOUBLE_TAXATION_TREATY,
        MTD_HMRC_ERR_FORMAT_EMPLOYER_NAME,
        MTD_HMRC_ERR_FORMAT_EMPLOYER_REF,
        MTD_HMRC_ERR_FORMAT_EMPLOYER_REFERENCE,
        MTD_HMRC_ERR_FORMAT_EMPLOYMENT_ID,
        MTD_HMRC_ERR_FORMAT_END_DATE,
        MTD_HMRC_ERR_FORMAT_EVENT,
        MTD_HMRC_ERR_FORMAT_FINAL_DECLARATION,
        MTD_HMRC_ERR_FORMAT_FROM_DATE,
        MTD_HMRC_ERR_FORMAT_FUTURE_YEARS,
        MTD_HMRC_ERR_FORMAT_HISTORY,
        MTD_HMRC_ERR_FORMAT_ID,
        MTD_HMRC_ERR_FORMAT_INCLUDE_ESTIMATED_CHARGES,
        MTD_HMRC_ERR_FORMAT_INCLUDE_LOCKS,
        MTD_HMRC_ERR_FORMAT_INCOME_SOURCE,
        MTD_HMRC_ERR_FORMAT_LENDER_NAME,
        MTD_HMRC_ERR_FORMAT_LOSS_ID,
        MTD_HMRC_ERR_FORMAT_NAME,
        MTD_HMRC_ERR_FORMAT_NAME_BUSINESS,
        MTD_HMRC_ERR_FORMAT_NAME_EX_SPOUSE,
        MTD_HMRC_ERR_FORMAT_NAME_OF_SHIP,
        MTD_HMRC_ERR_FORMAT_NATURE_OF_TRADE,
        MTD_HMRC_ERR_FORMAT_NINO,
        MTD_HMRC_ERR_FORMAT_PAYROLL_ID,
        MTD_HMRC_ERR_FORMAT_PENSION_SCHEME_TAX_REFERENCE,
        MTD_HMRC_ERR_FORMAT_PERIOD_ID,
        MTD_HMRC_ERR_FORMAT_PPD_SUBMISSION_ID,
        MTD_HMRC_ERR_FORMAT_PROVIDER_NAME,
        MTD_HMRC_ERR_FORMAT_PROVIDERS_ADDRESS,
        MTD_HMRC_ERR_FORMAT_QOPS_REF,
        MTD_HMRC_ERR_FORMAT_REMOVE_PAYMENT_ON_ACCOUNT,
        MTD_HMRC_ERR_FORMAT_REPORT_ID,
        MTD_HMRC_ERR_FORMAT_SAVINGS_ACCOUNT_ID,
        MTD_HMRC_ERR_FORMAT_SCHEME_PLAN_TYPE,
        MTD_HMRC_ERR_FORMAT_SF74_REF,
        MTD_HMRC_ERR_FORMAT_SOURCE,
        MTD_HMRC_ERR_FORMAT_SPOUSE_OR_CIVIL_PARTNERS_DATE_OF_BIRTH,
        MTD_HMRC_ERR_FORMAT_SPOUSE_OR_CIVIL_PARTNERS_FIRST_NAME,
        MTD_HMRC_ERR_FORMAT_SPOUSE_OR_CIVIL_PARTNERS_NINO,
        MTD_HMRC_ERR_FORMAT_SPOUSE_OR_CIVIL_PARTNERS_SURNAME,
        MTD_HMRC_ERR_FORMAT_SRN_INVALID,
        MTD_HMRC_ERR_FORMAT_START_DATE,
        MTD_HMRC_ERR_FORMAT_STATUS,
        MTD_HMRC_ERR_FORMAT_STATUS_REASON,
        MTD_HMRC_ERR_FORMAT_STRING,
        MTD_HMRC_ERR_FORMAT_SUBMISSION_ID,
        MTD_HMRC_ERR_FORMAT_SUBMITTED_ON,
        MTD_HMRC_ERR_FORMAT_TAX_SOURCE,
        MTD_HMRC_ERR_FORMAT_TAX_YEAR,
        MTD_HMRC_ERR_FORMAT_TO_DATE,
        MTD_HMRC_ERR_FORMAT_TRANSACTION_ID,
        MTD_HMRC_ERR_FORMAT_TYPE_OF_BUSINESS,
        MTD_HMRC_ERR_FORMAT_TYPE_OF_LOSS,
        MTD_HMRC_ERR_FORMAT_UNIQUE_INVESTMENT_REFERENCE,
        MTD_HMRC_ERR_FORMAT_VALUE,

        MTD_HMRC_ERR_INVALID_CREDENTIALS,
        MTD_HMRC_ERR_INVALID_DATE_FROM,
        MTD_HMRC_ERR_INVALID_DATE_RANGE,
        MTD_HMRC_ERR_INVALID_DATE_TO,
        MTD_HMRC_ERR_INVALID_MONETARY_AMOUNT,
        MTD_HMRC_ERR_INVALID_NUMERIC_VALUE,
        MTD_HMRC_ERR_INVALID_STATUS,
        MTD_HMRC_ERR_INVALID_TAX_YEAR_PARAMETER,

        MTD_HMRC_ERR_MATCHING_CALCULATION_ID_NOT_FOUND,
        MTD_HMRC_ERR_MATCHING_RESOURCE_NOT_FOUND,

        MTD_HMRC_ERR_MISSING_FROM_DATE,
        MTD_HMRC_ERR_MISSING_OFF_PAYROLL_WORKER,
        MTD_HMRC_ERR_MISSING_PAYMENT_LOT,
        MTD_HMRC_ERR_MISSING_PAYMENT_LOT_ITEM,
        MTD_HMRC_ERR_MISSING_TO_DATE,
        MTD_HMRC_ERR_MISSING_TYPE_OF_BUSINESS,

        MTD_HMRC_ERR_NOT_ALLOWED_OFF_PAYROLL_WORKER,
        MTD_HMRC_ERR_NOT_FINALISED,
        MTD_HMRC_ERR_NOT_FOUND,

        MTD_HMRC_ERR_PERIOD_KEY_INVALID,

        MTD_HMRC_ERR_RANGE_TO_DATE_BEFORE_FROM_DATE,

        MTD_HMRC_ERR_RULE_ACCOUNTING_PERIOD_NOT_ENDED,
        MTD_HMRC_ERR_RULE_ACCOUNTING_PERIOD_NOT_SUPPORTED,
        MTD_HMRC_ERR_RULE_ACQUISITION_DATE,
        MTD_HMRC_ERR_RULE_ACQUISITION_DATE_AFTER_DISPOSAL_DATE,
        MTD_HMRC_ERR_RULE_ACTIVE_MARRIAGE_ALLOWANCE_CLAIM,
        MTD_HMRC_ERR_RULE_ADVANCE_SUBMISSION_REQUIRES_PERIOD_END_DATE,
        MTD_HMRC_ERR_RULE_ALLOWANCE_NOT_SUPPORTED,
        MTD_HMRC_ERR_RULE_ALREADY_ADJUSTED,
        MTD_HMRC_ERR_RULE_ALREADY_OPTED_IN,
        MTD_HMRC_ERR_RULE_ALREADY_OPTED_OUT,
        MTD_HMRC_ERR_RULE_AMOUNT_GAIN_LOSS,
        MTD_HMRC_ERR_RULE_BENEFIT_TYPE_EXISTS,
        MTD_HMRC_ERR_RULE_BFL_NOT_SUPPORTED_FOR_FHL_PROPERTIES,
        MTD_HMRC_ERR_RULE_BOTH_ALLOWANCES_SUPPLIED,
        MTD_HMRC_ERR_RULE_BOTH_EXPENSES_SUPPLIED,
        MTD_HMRC_ERR_RULE_BOTH_PROPERTIES_SUPPLIED,
        MTD_HMRC_ERR_RULE_BUILDING_NAME_NUMBER,
        MTD_HMRC_ERR_RULE_BUSINESS_ID_NOT_FOUND,
        MTD_HMRC_ERR_RULE_BUSINESS_ID_STATE_CONFLICT,
        MTD_HMRC_ERR_RULE_BUSINESS_INCOME_PERIOD_RESTRICTION,
        MTD_HMRC_ERR_RULE_BUSINESS_PARTNER_NOT_EXIST,
        MTD_HMRC_ERR_RULE_BUSINESS_VALIDATION_FAILURE,
        MTD_HMRC_ERR_RULE_CALCULATION_IN_PROGRESS,
        MTD_HMRC_ERR_RULE_CALCULATION_TYPE_NOT_ALLOWED,
        MTD_HMRC_ERR_RULE_CESSATION_DATE,
        MTD_HMRC_ERR_RULE_CESSATION_DATE_BEFORE_START_DATE,
        MTD_HMRC_ERR_RULE_CESSATION_DATE_BEFORE_TAX_YEAR_START,
        MTD_HMRC_ERR_RULE_COMPLETION_DATE,
        MTD_HMRC_ERR_RULE_COST_OF_MATERIALS,
        MTD_HMRC_ERR_RULE_COUNTRY_CODE,
        MTD_HMRC_ERR_RULE_CUSTOM_EMPLOYMENT,
        MTD_HMRC_ERR_RULE_DATE_CEASED,
        MTD_HMRC_ERR_RULE_DATE_RANGE_INVALID,
        MTD_HMRC_ERR_RULE_DECEASED_RECIPIENT,
        MTD_HMRC_ERR_RULE_DECLARATION_NOT_RECEIVED,
        MTD_HMRC_ERR_RULE_DEDUCTIONS_AMOUNT,
        MTD_HMRC_ERR_RULE_DEDUCTIONS_DATE_RANGE_INVALID,
        MTD_HMRC_ERR_RULE_DELETE_AFTER_FINAL_DECLARATION,
        MTD_HMRC_ERR_RULE_DELETE_FORBIDDEN,
        MTD_HMRC_ERR_RULE_DIRECTORSHIP_CEASED_DATE,
        MTD_HMRC_ERR_RULE_DISPOSAL_DATE,
        MTD_HMRC_ERR_RULE_DISPOSAL_DATE_FUTURE,
        MTD_HMRC_ERR_RULE_DUPLICATE_COUNTRY_CODE,
        MTD_HMRC_ERR_RULE_DUPLICATE_ID_NOT_ALLOWED,
        MTD_HMRC_ERR_RULE_DUPLICATE_PERIOD,
        MTD_HMRC_ERR_RULE_DUPLICATE_SUBMISSION,
        MTD_HMRC_ERR_RULE_DUPLICATED_PPD_SUBMISSION_ID,
        MTD_HMRC_ERR_RULE_EARLY_DATA_SUBMISSION_NOT_ACCEPTED,
        MTD_HMRC_ERR_RULE_ELECTION_PERIOD_NOT_EXPIRED,
        MTD_HMRC_ERR_RULE_END_DATE,
        MTD_HMRC_ERR_RULE_END_DATE_BEFORE_START_DATE,
        MTD_HMRC_ERR_RULE_END_DATE_BEFORE_TAX_YEAR_START,
        MTD_HMRC_ERR_RULE_END_DATE_NOT_ALIGNED_WITH_REPORTING_TYPE,
        MTD_HMRC_ERR_RULE_FINAL_DECLARATION_IN_PROGRESS,
        MTD_HMRC_ERR_RULE_FINAL_DECLARATION_RECEIVED,
        MTD_HMRC_ERR_RULE_FINAL_DECLARATION_TAX_YEAR,
        MTD_HMRC_ERR_RULE_FROM_DATE_NOT_SUPPORTED,
        MTD_HMRC_ERR_RULE_GAIN_AFTER_RELIEF_LOSS_AFTER_RELIEF,
        MTD_HMRC_ERR_RULE_GAIN_LOSS,
        MTD_HMRC_ERR_RULE_GIFT_AID_NON_UK_AMOUNT_WITHOUT_NAMES,
        MTD_HMRC_ERR_RULE_GIFTS_NON_UK_AMOUNT_WITHOUT_NAMES,
        MTD_HMRC_ERR_RULE_GROSS_AMOUNT_PAID,
        MTD_HMRC_ERR_RULE_IGNORE_FORBIDDEN,
        MTD_HMRC_ERR_RULE_INCOME_SOURCES_CHANGED,
        MTD_HMRC_ERR_RULE_INCOME_SOURCES_INVALID,
        MTD_HMRC_ERR_RULE_INCONSISTENT_QUERY_PARAMS,
        MTD_HMRC_ERR_RULE_INCORRECT_DISPOSAL_TYPE,
        MTD_HMRC_ERR_RULE_INCORRECT_GOV_TEST_SCENARIO,
        MTD_HMRC_ERR_RULE_INCORRECT_NON_STANDARD_GAINS,
        MTD_HMRC_ERR_RULE_INCORRECT_OR_EMPTY_BODY_SUBMITTED,
        MTD_HMRC_ERR_RULE_INSOLVENT_TRADER,
        MTD_HMRC_ERR_RULE_INVALID_DATE_RANGE,
        MTD_HMRC_ERR_RULE_INVALID_REQUEST,
        MTD_HMRC_ERR_RULE_INVALID_SUBMISSION_PENSION_SCHEME,
        MTD_HMRC_ERR_RULE_IS_ANNUAL_ALLOWANCE_REDUCED,
        MTD_HMRC_ERR_RULE_ITSA_CONTRACT_OBJECT_NOT_EXIST,
        MTD_HMRC_ERR_RULE_LUMP_SUMS,
        MTD_HMRC_ERR_RULE_MISALIGNED_PERIOD,
        MTD_HMRC_ERR_RULE_MISSING_CLOSE_COMPANY,
        MTD_HMRC_ERR_RULE_MISSING_CLOSE_COMPANY_DETAILS,
        MTD_HMRC_ERR_RULE_MISSING_SUBMISSION_DATES,
        MTD_HMRC_ERR_RULE_NO_ACCOUNTING_DATE_FOUND,
        MTD_HMRC_ERR_RULE_NO_ACCOUNTING_PERIOD,
        MTD_HMRC_ERR_RULE_NO_CHANGE,
        MTD_HMRC_ERR_RULE_NO_INCOME_SUBMISSIONS_EXIST,
        MTD_HMRC_ERR_RULE_NOT_ALLOWED_CONSOLIDATED_EXPENSES,
        MTD_HMRC_ERR_RULE_NOT_CONTIGUOUS_PERIOD,
        MTD_HMRC_ERR_RULE_OBLIGATIONS_NOT_MET,
        MTD_HMRC_ERR_RULE_OUTSIDE_AMENDMENT_WINDOW,
        MTD_HMRC_ERR_RULE_OVER_CONSOLIDATED_EXPENSES_THRESHOLD,
        MTD_HMRC_ERR_RULE_OVERLAPPING_PERIOD,
        MTD_HMRC_ERR_RULE_PERIODS_OF_ACCOUNT,
        MTD_HMRC_ERR_RULE_PREMATURE_FINALISATION,
        MTD_HMRC_ERR_RULE_PROPERTY_INCOME_ALLOWANCE,
        MTD_HMRC_ERR_RULE_PROPERTY_INCOME_ALLOWANCE_CLAIMED,
        MTD_HMRC_ERR_RULE_QUARTERLY_PERIOD_UPDATING,
        MTD_HMRC_ERR_RULE_RECENT_SUBMISSIONS_EXIST,
        MTD_HMRC_ERR_RULE_REQUEST_CANNOT_BE_FULFILLED,
        MTD_HMRC_ERR_RULE_RESIDENCY_CHANGED,
        MTD_HMRC_ERR_RULE_RESULTING_VALUE_NOT_PERMITTED,
        MTD_HMRC_ERR_RULE_START_DATE,
        MTD_HMRC_ERR_RULE_START_AND_END_DATE_NOT_ALLOWED,
        MTD_HMRC_ERR_RULE_START_DATE_AFTER_TAX_YEAR_END,
        MTD_HMRC_ERR_RULE_START_DATE_NOT_ALIGNED_TO_COMMENCEMENT_DATE,
        MTD_HMRC_ERR_RULE_START_DATE_NOT_ALIGNED_WITH_REPORTING_TYPE,
        MTD_HMRC_ERR_RULE_SOURCE_INVALID,
        MTD_HMRC_ERR_RULE_SUBMISSION_END_DATE_CANNOT_MOVE_BACKWARDS,
        MTD_HMRC_ERR_RULE_SUBMISSION_FAILED,
        MTD_HMRC_ERR_RULE_SUMMARY_STATUS_INVALID,
        MTD_HMRC_ERR_RULE_SUMMARY_STATUS_SUPERSEDED,
        MTD_HMRC_ERR_RULE_TAX_YEAR_FOR_VERSION_NOT_SUPPORTED,
        MTD_HMRC_ERR_RULE_TAX_YEAR_NOT_ENDED,
        MTD_HMRC_ERR_RULE_TAX_YEAR_NOT_SUPPORTED,
        MTD_HMRC_ERR_RULE_TAX_YEAR_RANGE_EXCEEDED,
        MTD_HMRC_ERR_RULE_TAX_YEAR_RANGE_INVALID,
        MTD_HMRC_ERR_RULE_TO_DATE_BEFORE_FROM_DATE,
        MTD_HMRC_ERR_RULE_TRADING_INCOME_ALLOWANCE_CLAIMED,
        MTD_HMRC_ERR_RULE_TYPE_OF_BUSINESS_INCORRECT,
        MTD_HMRC_ERR_RULE_UNALIGNED_CESSATION_TAX_YEAR,
        MTD_HMRC_ERR_RULE_UNALIGNED_DEDUCTIONS_PERIOD,
        MTD_HMRC_ERR_RULE_UNIGNORE_FORBIDDEN,
        MTD_HMRC_ERR_RULE_UPDATE_FORBIDDEN,
        MTD_HMRC_ERR_RULE_VOLUNTARY_CLASS2_CANNOT_BE_CHANGED,
        MTD_HMRC_ERR_RULE_VOLUNTARY_CLASS2_VALUE_INVALID,
        MTD_HMRC_ERR_RULE_WRONG_TPA_AMOUNT_SUBMITTED,

        MTD_HMRC_ERR_TAX_PERIOD_NOT_ENDED,

        MTD_HMRC_ERR_VAT_NET_VALUE,
        MTD_HMRC_ERR_VAT_TOTAL_VALUE,

        MTD_HMRC_ERR_VRN_INVALID,

        /* Generic top-level errors */
        MTD_HMRC_ERR_BUSINESS_ERROR,
        MTD_HMRC_ERR_INVALID_REQUEST,

        MTD_HMRC_ERR_UNKNOWN
};

struct mtd_hmrc_err {
        enum mtd_hmrc_error error;
        const char *code;
        const char *msg;
        struct mtd_hmrc_err *next;
};

Structure as returned by mtd_hmrc_get_error(3). Actually it's a linked list of structures with the next member pointing to the next structure or NULL. See mtd_hmrc_err(3type).

Should be freed with mtd_hmrc_free_error(3).

HTTP status codes (relevant to the MTD API)

enum mtd_http_status_code {
        MTD_HTTP_OK                             = 200,
        MTD_HTTP_CREATED                        = 201,
        MTD_HTTP_ACCEPTED                       = 202,
        MTD_HTTP_NO_CONTENT                     = 204,
        MTD_HTTP_SEE_OTHER                      = 303,
        MTD_HTTP_BAD_REQUEST                    = 400,
        MTD_HTTP_UNAUTHORIZED                   = 401,
        MTD_HTTP_FORBIDDEN                      = 403,
        MTD_HTTP_NOT_FOUND                      = 404,
        MTD_HTTP_METHOD_NOT_ALLOWED             = 405,
        MTD_HTTP_NOT_ACCEPTABLE                 = 406,
        MTD_HTTP_GONE                           = 410,
        MTD_HTTP_REQUEST_ENTITY_TOO_LARGE       = 413,
        MTD_HTTP_UNSUPPORTED_MEDIA_TYPE         = 415,
        MTD_HTTP_UNPROCESSABLE_CONTENT          = 422,
        MTD_HTTP_TOO_MANY_REQUESTS              = 429,
        MTD_HTTP_INTERNAL_SERVER_ERROR          = 500,
        MTD_HTTP_NOT_IMPLEMENTED                = 501,
        MTD_HTTP_SERVICE_UNAVAILABLE            = 503,
        MTD_HTTP_GATEWAY_TIMEOUT                = 504,
};

OAuth Scopes

enum mtd_scope {
        MTD_SCOPE_RD_SA         = 0x1,
        MTD_SCOPE_WR_SA         = 0x2,
        MTD_SCOPE_RD_SAASS      = 0x4,
        MTD_SCOPE_WR_SAASS      = 0x8,
        MTD_SCOPE_RD_VAT        = 0x10,
        MTD_SCOPE_WR_VAT        = 0x20,
};

RD = Read, WR = write, SA = Self-Assessment (ITSA). SAASS Self-Assessment Assist (ITSA). They can be OR'd together.

They represent the various OAuth scopes that an application can be authorised for.

enum mtd_api_scope {
        MTD_API_SCOPE_UNSET             = 0x0,

        MTD_API_SCOPE_SA                = 0x1,
        MTD_API_SCOPE_SAASS             = 0x2,
        MTD_API_SCOPE_VAT               = 0x4,

        /*
         * Special value to tell we are adding more API
         * OAuths and _not_ to reset the oauth.json file.
         *
         * This can be bitwise OR'd with any of the above.
         */
        MTD_API_SCOPE_ADD               = (1 << 29),
};
#define MTD_API_SCOPE_ITSA MTD_API_SCOPE_SA

What API the above scopes belong to. They can be OR'd together. MTD_API_SCOPE_ADD can be used to avoid resetting the oauth.json file when writing to it. Say you added SA but then later want to also add SAASS...

MTD API Endpoints

enum mtd_ep_api {
        MTD_EP_API_NULL = 0,

        MTD_EP_API_BD,          /* Business Details */
        MTD_EP_API_BISS,        /* Business Income Source Summary */
        MTD_EP_API_BSAS,        /* Business Source Adjustable Summary */
        MTD_EP_API_CISD,        /* CIS Deductions */
        MTD_EP_API_IC,          /* Individuals Charges */
        MTD_EP_API_ICAL,        /* Individual Calculations */
        MTD_EP_API_ICGI,        /* Individuals Capital Gains Income */
        MTD_EP_API_ID,          /* Individuals Disclosures */
        MTD_EP_API_IDI,         /* Individuals Dividends Income */
        MTD_EP_API_IE,          /* Individuals Expenses */
        MTD_EP_API_IEI,         /* Individuals Employments Income */
        MTD_EP_API_IFI,         /* Individuals Foreign Income */
        MTD_EP_API_IIPI,        /* Individuals Insurance Policies Income */
        MTD_EP_API_ILOS,        /* Individual Losses */
        MTD_EP_API_IOI,         /* Individuals Other Income */
        MTD_EP_API_IPI,         /* Individuals Pensions Income */
        MTD_EP_API_IR,          /* Individuals Reliefs */
        MTD_EP_API_ISB,         /* Individuals Savings Income */
        MTD_EP_API_ISI,         /* Individuals State Benefits */
        MTD_EP_API_OB,          /* Obligations */
        MTD_EP_API_OD,          /* Other Deductions */
        MTD_EP_API_PB,          /* Property Business */
        MTD_EP_API_SAA,         /* Self Assessment Accounts */
        MTD_EP_API_SAASS,       /* Self Assessment Assist */
        MTD_EP_API_SAID,        /* Self Assessment Individual Details */
        MTD_EP_API_SEB,         /* Self Employment Business */

        MTD_EP_API_VAT,         /* VAT */

        MTD_EP_API_TEST_CU,     /* Create Test User */
        MTD_EP_API_TEST_FPH,    /* Test Fraud Prevention Headers */
        MTD_EP_API_TEST_SATS,   /* Self Assessment Test Support */
};
enum mtd_api_endpoint {
        /* Business Details - Support */
        MTD_API_EP_BD_LIST = 0,
        MTD_API_EP_BD_GET,
        MTD_API_EP_BD_AMEND_QPT,
        /* Accounting Type */
        MTD_API_EP_BD_AT_GET,
        MTD_API_EP_BD_AT_AMEND,
        /* Periods of Account */
        MTD_API_EP_BD_POA_GET,
        MTD_API_EP_BD_POA_AMEND,
        /* Late Accounting Date Rule */
        MTD_API_EP_BD_LADR_GET,
        MTD_API_EP_BD_LADR_DISAPPLY,
        MTD_API_EP_BD_LADR_WITHDRAW,

        /* Business Income Source Summary */
        MTD_API_EP_BISS_GET,

        /* Business Source Adjustable Summary */
        MTD_API_EP_BSAS_LIST,
        MTD_API_EP_BSAS_TRIGGER,
        /* Self-Employment */
        MTD_API_EP_BSAS_SE_GET,
        MTD_API_EP_BSAS_SE_SUBMIT,
        /* UK Property */
        MTD_API_EP_BSAS_PB_GET,
        MTD_API_EP_BSAS_PB_SUBMIT,
        /* Foreign Property */
        MTD_API_EP_BSAS_FP_GET,
        MTD_API_EP_BSAS_FP_SUBMIT,

        /* CIS Deductions */
        MTD_API_EP_CISD_GET,
        MTD_API_EP_CISD_CREATE,
        MTD_API_EP_CISD_AMEND,
        MTD_API_EP_CISD_DELETE,

        /* Individuals Charges - Pension Charges */
        MTD_API_EP_IC_PC_GET,
        MTD_API_EP_IC_PC_AMEND,
        MTD_API_EP_IC_PC_DELETE,
        /* High Income Child Benefit Charge Submission */
        MTD_API_EP_IC_HICBCS_GET,
        MTD_API_EP_IC_HICBCS_AMEND,
        MTD_API_EP_IC_HICBCS_DELETE,

        /* Individual Calculations - Tax Calculations */
        MTD_API_EP_ICAL_TRIGGER,
        MTD_API_EP_ICAL_LIST,
        MTD_API_EP_ICAL_GET,
        /* Final Declaration */
        MTD_API_EP_ICAL_FINAL_DECLARATION,

        /* Individuals Capital Gains Income - Residential Property Disposals */
        MTD_API_EP_ICGI_RPD_GET,
        MTD_API_EP_ICGI_RPD_N_PPD_AMEND,
        MTD_API_EP_ICGI_RPD_N_PPD_DELETE,
        MTD_API_EP_ICGI_RPD_PPD_AMEND,
        MTD_API_EP_ICGI_RPD_PPD_DELETE,
        /* Other Capital Gains and Disposals */
        MTD_API_EP_ICGI_O_GET,
        MTD_API_EP_ICGI_O_AMEND,
        MTD_API_EP_ICGI_O_DELETE,

        /* Individuals Disclosures - Marriage Allowance */
        MTD_API_EP_ID_MA_CREATE,
        /* Disclosures */
        MTD_API_EP_ID_D_GET,
        MTD_API_EP_ID_D_AMEND,
        MTD_API_EP_ID_D_DELETE,

        /* Individuals Dividends Income - Dividends Income */
        MTD_API_EP_IDI_DI_GET,
        MTD_API_EP_IDI_DI_AMEND,
        MTD_API_EP_IDI_DI_DELETE,
        /* UK Dividends Income */
        MTD_API_EP_IDI_UKDI_GET,
        MTD_API_EP_IDI_UKDI_AMEND,
        MTD_API_EP_IDI_UKDI_DELETE,
        /* Additional Directorship and Dividend Information */
        MTD_API_EP_IDI_ADDI_GET,
        MTD_API_EP_IDI_ADDI_AMEND,
        MTD_API_EP_IDI_ADDI_DELETE,

        /* Individuals Employments Income - Employments */
        MTD_API_EP_IEI_E_LIST,
        MTD_API_EP_IEI_E_ADD,
        MTD_API_EP_IEI_E_GET,
        MTD_API_EP_IEI_E_AMEND,
        MTD_API_EP_IEI_E_DELETE,
        MTD_API_EP_IEI_E_IGNORE,
        MTD_API_EP_IEI_E_UNIGNORE,
        MTD_API_EP_IEI_E_EFD_GET,
        MTD_API_EP_IEI_E_EFD_AMEND,
        MTD_API_EP_IEI_E_EFD_DELETE,
        /* Non-PAYE Employment Income */
        MTD_API_EP_IEI_NPE_GET,
        MTD_API_EP_IEI_NPE_AMEND,
        MTD_API_EP_IEI_NPE_DELETE,
        /* Other Employment Income */
        MTD_API_EP_IEI_OE_GET,
        MTD_API_EP_IEI_OE_AMEND,
        MTD_API_EP_IEI_OE_DELETE,
        /* Student Loan Benefits in Kind */
        MTD_API_EP_IEI_SLB_GET,
        MTD_API_EP_IEI_SLB_AMEND,
        MTD_API_EP_IEI_SLB_DELETE,

        /* Individuals Expenses - Employment Expenses */
        MTD_API_EP_IE_EE_AMEND,
        MTD_API_EP_IE_EE_GET,
        MTD_API_EP_IE_EE_DELETE,
        MTD_API_EP_IE_EE_IGNORE,
        /* Other Expenses */
        MTD_API_EP_IE_OE_AMEND,
        MTD_API_EP_IE_OE_GET,
        MTD_API_EP_IE_OE_DELETE,

        /* Individuals Foreign Income */
        MTD_API_EP_IFI_AMEND,
        MTD_API_EP_IFI_GET,
        MTD_API_EP_IFI_DELETE,

        /* Individuals Insurance Policies Income */
        MTD_API_EP_IIPI_GET,
        MTD_API_EP_IIPI_AMEND,
        MTD_API_EP_IIPI_DELETE,

        /* Individual Losses - Brought Forward */
        MTD_API_EP_ILOS_BF_CREATE,
        MTD_API_EP_ILOS_BF_AMEND_AMNT,
        MTD_API_EP_ILOS_BF_LIST,
        MTD_API_EP_ILOS_BF_GET,
        MTD_API_EP_ILOS_BF_DELETE,
        /* Loss Claims */
        MTD_API_EP_ILOS_LC_CREATE,
        MTD_API_EP_ILOS_LC_LIST,
        MTD_API_EP_ILOS_LC_GET,
        MTD_API_EP_ILOS_LC_DELETE,
        MTD_API_EP_ILOS_LC_AMEND_TYPE,
        MTD_API_EP_ILOS_LC_AMEND_ORDER,

        /* Individuals Other Income */
        MTD_API_EP_IOI_GET,
        MTD_API_EP_IOI_AMEND,
        MTD_API_EP_IOI_DELETE,

        /* Individuals Pensions Income */
        MTD_API_EP_IPI_GET,
        MTD_API_EP_IPI_AMEND,
        MTD_API_EP_IPI_DELETE,

        /* Individuals Reliefs - Relief Investments */
        MTD_API_EP_IR_RI_GET,
        MTD_API_EP_IR_RI_AMEND,
        MTD_API_EP_IR_RI_DELETE,
        /* Other Reliefs */
        MTD_API_EP_IR_OR_GET,
        MTD_API_EP_IR_OR_AMEND,
        MTD_API_EP_IR_OR_DELETE,
        /* Foreign Reliefs */
        MTD_API_EP_IR_FR_GET,
        MTD_API_EP_IR_FR_AMEND,
        MTD_API_EP_IR_FR_DELETE,
        /* Pensions Reliefs */
        MTD_API_EP_IR_PR_GET,
        MTD_API_EP_IR_PR_AMEND,
        MTD_API_EP_IR_PR_DELETE,
        /* Charitable Givings */
        MTD_API_EP_IR_CG_GET,
        MTD_API_EP_IR_CG_AMEND,
        MTD_API_EP_IR_CG_DELETE,

        /* Individuals State Benefits */
        MTD_API_EP_ISB_CREATE,
        MTD_API_EP_ISB_LIST,
        MTD_API_EP_ISB_AMEND,
        MTD_API_EP_ISB_DELETE,
        MTD_API_EP_ISB_AMEND_AMNTS,
        MTD_API_EP_ISB_DELETE_AMNTS,
        MTD_API_EP_ISB_IGNORE,
        MTD_API_EP_ISB_UNIGNORE,

        /* Individuals Savings Income - UK Savings Account */
        MTD_API_EP_ISI_SI_UK_LIST,
        MTD_API_EP_ISI_SI_UK_ADD,
        MTD_API_EP_ISI_SI_UK_UPDATE_SA_NAME,
        MTD_API_EP_ISI_SI_UK_GET_AS,
        MTD_API_EP_ISI_SI_UK_UPDATE_AS,
        /* Savings Income */
        MTD_API_EP_ISI_SI_O_GET,
        MTD_API_EP_ISI_SI_O_UPDATE,
        MTD_API_EP_ISI_SI_O_DELETE,

        /* Obligations */
        MTD_API_EP_OB_GET_IEO,
        MTD_API_EP_OB_GET_FDO,

        /* Other Deductions */
        MTD_API_EP_OD_AMEND,
        MTD_API_EP_OD_GET,
        MTD_API_EP_OD_DELETE,

        /* Property Business - UK Property Business Annual Submission */
        MTD_API_EP_PB_UKPBAS_GET,
        MTD_API_EP_PB_UKPBAS_CREATE,
        /* UK Property Income & Expenses Period Summary */
        MTD_API_EP_PB_UKPIEPS_CREATE,
        MTD_API_EP_PB_UKPIEPS_GET,
        MTD_API_EP_PB_UKPIEPS_AMEND,
        /* UK Property Cumulative Period Summary */
        MTD_API_EP_PB_UKPCPS_GET,
        MTD_API_EP_PB_UKPCPS_CREATE,
        /* Historic FHL UK Property Business Annual Submission */
        MTD_API_EP_PB_HFHL_UKPBAS_CREATE,
        MTD_API_EP_PB_HFHL_UKPBAS_GET,
        MTD_API_EP_PB_HFHL_UKPBAS_DELETE,
        /* Historic non-FHL UK Property Business Annual Submission */
        MTD_API_EP_PB_HNFHL_UKPBAS_CREATE,
        MTD_API_EP_PB_HNFHL_UKPBAS_GET,
        MTD_API_EP_PB_HNFHL_UKPBAS_DELETE,
        /* Historic FHL UK Property Income & Expenses Period Summary */
        MTD_API_EP_PB_HFHL_UKPIEPS_LIST,
        MTD_API_EP_PB_HFHL_UKPIEPS_CREATE,
        MTD_API_EP_PB_HFHL_UKPIEPS_AMEND,
        MTD_API_EP_PB_HFHL_UKPIEPS_GET,
        /* Historic non-FHL UK Property Income & Expenses Period Summary */
        MTD_API_EP_PB_HNFHL_UKPIEPS_LIST,
        MTD_API_EP_PB_HNFHL_UKPIEPS_CREATE,
        MTD_API_EP_PB_HNFHL_UKPIEPS_GET,
        MTD_API_EP_PB_HNFHL_UKPIEPS_AMEND,
        /* Foreign Property Income & Expenses Period Summary */
        MTD_API_EP_PB_FPIEPS_CREATE,
        MTD_API_EP_PB_FPIEPS_GET,
        MTD_API_EP_PB_FPIEPS_AMEND,
        /* Foreign Property Cumulative Period Summary */
        MTD_API_EP_PB_FPCPS_GET,
        MTD_API_EP_PB_FPCPS_AMEND,
        /* Foreign Property Annual Submission */
        MTD_API_EP_PB_FPAS_GET,
        MTD_API_EP_PB_FPAS_AMEND,
        /* UK or Foreign Property Annual Submission Deletion */
        MTD_API_EP_PB_AS_DELETE,
        /* UK or Foreign Property Income and Expenses Period Summaries List */
        MTD_API_EP_PB_PIEPS_LIST,

        /* Self Assessment Accounts - Payments and Liabilities */
        MTD_API_EP_SAA_PL_HIST,
        MTD_API_EP_SAA_PL_GET_BY_TID,
        MTD_API_EP_SAA_PL_GET_BY_CR,
        MTD_API_EP_SAA_PL_GET_BAL_TRANS,
        MTD_API_EP_SAA_PL_PA_LIST,
        /* Coding Out Underpayments and Debts */
        MTD_API_EP_SAA_COUD_GET,
        MTD_API_EP_SAA_COUD_AMEND,
        MTD_API_EP_SAA_COUD_DELETE,
        /* Coding Out Status */
        MTD_API_EP_SAA_COS_OPT_OUT,
        MTD_API_EP_SAA_COS_OPT_STATUS,
        MTD_API_EP_SAA_COS_OPT_IN,

        /* Self Assessment Assist */
        MTD_API_EP_SAASS_REPORT_GEN,
        MTD_API_EP_SAASS_REPORT_ACK,

        /* Self Assessment Individual Details */
        MTD_API_EP_SAID_STATUS,

        /* Self Employment Business - Self-Employment Annual Submission */
        MTD_API_EP_SEB_SEAS_AMEND,
        MTD_API_EP_SEB_SEAS_GET,
        MTD_API_EP_SEB_SEAS_DELETE,
        /* Self-Employment Period Summaries */
        MTD_API_EP_SEB_SEPS_CREATE,
        MTD_API_EP_SEB_SEPS_LIST,
        MTD_API_EP_SEB_SEPS_AMEND,
        MTD_API_EP_SEB_SEPS_GET,
        /* Self-Employment Cumulative Period Summary */
        MTD_API_EP_SEB_SECPS_AMEND,
        MTD_API_EP_SEB_SECPS_GET,

        /* VAT */
        MTD_API_EP_VAT_LIST_OBLIGATIONS,
        MTD_API_EP_VAT_SUBMIT,
        MTD_API_EP_VAT_VIEW_RETURN,
        MTD_API_EP_VAT_GET_LIABILITIES,
        MTD_API_EP_VAT_GET_PAYMENTS,
        MTD_API_EP_VAT_GET_PENALTIES,
        MTD_API_EP_VAT_GET_FINANCIAL_DETAILS,

        /* Create Test User */
        MTD_API_EP_TEST_CU_CREATE_INDIVIDUAL,
        MTD_API_EP_TEST_CU_CREATE_ORGANISATION,
        MTD_API_EP_TEST_CU_CREATE_AGENT,
        MTD_API_EP_TEST_CU_LIST_SERVICES,

        /* Test Fraud Prevention Headers */
        MTD_API_EP_TEST_FPH_VALIDATE,
        MTD_API_EP_TEST_FPH_FEEDBACK,

        /* Self Assessment Test Support */
        MTD_API_EP_TEST_SATS_DELETE,
        /* Self Assessment Test Support Checkpoint for Vendor Data */
        MTD_API_EP_TEST_SATS_CHKPT_LIST,
        MTD_API_EP_TEST_SATS_CHKPT_CREATE,
        MTD_API_EP_TEST_SATS_CHKPT_DELETE,
        MTD_API_EP_TEST_SATS_CHKPT_RESTORE,
        /* Self Assessment Test Support Business Income Source */
        MTD_API_EP_TEST_SATS_BIS_CREATE,
        MTD_API_EP_TEST_SATS_BIS_DELETE,
        /* Self Assessment Test Support ITSA Status */
        MTD_API_EP_TEST_SATS_IS_AMEND,

        /* OAuth */
        MTD_API_EP_OA_REFRESH_TOKEN,
        MTD_API_EP_OA_EXCHANGE_AUTH_CODE,
        MTD_API_EP_OA_APPLICATION_TOKEN,
};

Used to tell mtd_ep(3) which API endpoint to query.

struct mtd_ep_api_info {
        enum mtd_ep_api api;
        const char *version;
        const char *name;
};

Structure as returned by mtd_ep_api_get_info(3) containing information about a particular MTD API.

Data Source

enum mtd_data_src_type {
        MTD_DATA_SRC_FILE = 0,
        MTD_DATA_SRC_BUF,
        MTD_DATA_SRC_FP,
        MTD_DATA_SRC_FD,
};

typedef union mtd_data_src {
        const void *buf;
        const char *file;
        FILE *fp;
        int fd;
} mtd_data_src_t;

struct mtd_dsrc_ctx {
        mtd_data_src_t data_src;
        size_t data_len;

        enum mtd_data_src_type src_type;
};

These define the source of POST/PUT data for an endpoint.

You define a struct mtd_dsrc_ctx and set data_src to either a buffer that contains the data, a filename of a file containing the data, a stdio FILE pointer or a file descriptor of an already opened file containing the data to send.

You then set src_type to the appropriate enum mtd_data_src_type value.

In the case of using a buffer you also need to set the length in bytes of the data in the buffer via data_len. The length should not include any terminating nul byte.

Fraud Prevention Headers

#define MTD_FPH_SET_FUNC(s, m, f)          (s.m = f)
#define MTD_FPH_CLI_PUBLIC_IP              fph_srcip
#define MTD_FPH_CLI_PUBLIC_PORT            fph_srcport
#define MTD_FPH_CLI_DEV_ID                 fph_device_id
#define MTD_FPH_CLI_USER_ID                fph_user
#define MTD_FPH_CLI_TZ                     fph_tz
#define MTD_FPH_CLI_LOCAL_IPS              fph_ipaddrs
#define MTD_FPH_CLI_MAC_ADDRS              fph_macaddrs
#define MTD_FPH_CLI_UA                     fph_ua
#define MTD_FPH_CLI_MULTI_FACTOR           fph_multi_factor
#define MTD_FPH_CLI_SCREENS                fph_screens
#define MTD_FPH_CLI_WINDOW_SZ              fph_window_sz
#define MTD_FPH_CLI_BROWSER_PLUGINS        fph_browser_plugins
#define MTD_FPH_CLI_BROWSER_JS_UA          fph_browser_js_ua
#define MTD_FPH_CLI_BROWSER_DNT            fph_browser_dnt
#define MTD_FPH_CLI_LOCAL_IPS_TS           fph_ipaddrs_ts
#define MTD_FPH_CLI_PUBLIC_IP_TS           fph_srcip_ts
#define MTD_FPH_VEN_VERSION                fph_version
#define MTD_FPH_VEN_VERSION_CLI            fph_version_cli
#define MTD_FPH_VEN_LICENSE_ID             fph_license_id
#define MTD_FPH_VEN_PUBLIC_IP              fph_vendor_ip
#define MTD_FPH_VEN_FWD                    fph_vendor_fwd
#define MTD_FPH_VEN_PROD_NAME              fph_prod_name
struct mtd_fph_ops {
        char *(*fph_device_id)(void *user_data);
        char *(*fph_user)(void *user_data);
        char *(*fph_tz)(void *user_data);
        char *(*fph_ipaddrs)(void *user_data);
        char *(*fph_ipaddrs_ts)(void *user_data);
        char *(*fph_macaddrs)(void *user_data);
        char *(*fph_srcip)(void *user_data);
        char *(*fph_srcip_ts)(void *user_data);
        char *(*fph_srcport)(void *user_data);
        char *(*fph_screens)(void *user_data);
        char *(*fph_window_sz)(void *user_data);
        char *(*fph_browser_plugins)(void *user_data);
        char *(*fph_browser_js_ua)(void *user_data);
        char *(*fph_browser_dnt)(void *user_data);
        char *(*fph_vendor_ip)(void *user_data);
        char *(*fph_vendor_fwd)(void *user_data);
        char *(*fph_ua)(void *user_data);
        char *(*fph_multi_factor)(void *user_data);
        char *(*fph_license_id)(void *user_data);
        char *(*fph_version)(void *user_data);
        char *(*fph_version_cli)(void *user_data);
        char *(*fph_prod_name)(void *user_data);

        void *user_data;
};

This can be used to override the in built functions that generate the various fraud prevention header values. You can set any or all of them, any that are set to NULL will use the appropriate inbuilt function.

These functions should return a pointer to a dynamically allocated buffer that will be free(3)'d by libmtdac.

You should probably take a quick look at the [Fraud Prevention Headers](/README.md#fraud-prevention-headers) section of the [README.md](/README.md) to understand the possible privacy implications.

Config

struct mtd_cfg {
        const struct mtd_fph_ops *fph_ops;
        const char * const *extra_hdrs;

        const char *config_dir;

        const FILE *log_fp;
};

This is a structure that can be passed into mtd_init(3) to provide/override configuration data.

Firstly, it can be used for overriding the fraud prevention headers. A user could declare a struct mtd_fph_ops and set various members to their own functions then set mtd_cfg.fph_ops to this structure and pass it into mtd_init(3) e.g.

const struct mtd_fph_ops fph_ops = {
        .fph_user    = my_user,
        .fph_version = my_ver
};

You also need to specify the directory that libmtdac will use for its config data.

const struct mtd_cfg cfg = {
        .fph_ops    = &fph_ops,
        .config_dir = "/home/foo/.config/my-app"
};

err = mtd_init(flags, &cfg);

You can also use the MTD_FPH_SET_FUNC() macro, e.g.

struct mtd_fph_ops fph_ops = {};
const struct mtd_cfg cfg = {
        .fph_ops    = &fph_ops,
        .config_dir = "/home/foo/.config/my-app"
};

MTD_FPH_SET_FUNC(fph_ops, MTD_FPH_CLI_USER_ID, my_user);
MTD_FPH_SET_FUNC(fph_ops, MTD_FPH_VEN_VERSION, my_ver);

Finally you can optionally specify an open file-pointer (FILE *) to have logs sent to rather than stderr/stdout. MTD_LOG_ERROR logs are not affected by this and still go to stderr.