top of page

Update an Application

PATCH /applications/{application}

Environment and operation

Use this endpoint contract with the account and environment assigned to your integration. Values in angle brackets are placeholders. This reference does not execute requests. Documented server https://sandbox.signup.nmi.com/api/v1 https://secure.nmi.com/api/v5/signup Schema reference: field definitions do not include every behavioral rule. Follow the workflow guidance and account prerequisites for this operation before submitting requests.

Request route

Partially update an application. An application can be updated only when it is in `draft` status. **Required scope:** `applications:write` PATCH /applications/{application} Security scheme Type Credential location Scopes oauth oauth2 applications:write

Request language templates

Original transport templates derived from this endpoint’s documented method, server, authentication and media type. Replace path/query/credential placeholders with authorized sandbox values. These examples print the raw status and response; they do not infer business success or retry a request. Save one valid request variant from the fields/examples below as request.json. Do not combine mutually exclusive variants. The payload is deliberately not fabricated from schema defaults. Node requires a runtime with fetch; PHP requires cURL. Generated source-based examples have not been executed against provider accounts. curl --request PATCH \ --url 'https://sandbox.signup.nmi.com/api/v1/applications/{application}' \ --header 'Authorization: Bearer <access-token>' \ --header 'Content-Type: application/json' \ --data-binary '@request.json' import { readFile } from 'node:fs/promises'; const body = await readFile('request.json', 'utf8'); const response = await fetch("https://sandbox.signup.nmi.com/api/v1/applications/{application}", { method: 'PATCH', headers: { "Authorization": "Bearer <access-token>", "Content-Type": "application/json" }, body }); console.log(response.status, await response.text()); from urllib.request import Request, urlopen from urllib.error import HTTPError from pathlib import Path request = Request('https://sandbox.signup.nmi.com/api/v1/applications/{application}', method='PATCH', headers={'Authorization': 'Bearer <access-token>', 'Content-Type': 'application/json'}, data=Path('request.json').read_bytes()) try: with urlopen(request, timeout=30) as response: print(response.status, response.read().decode()) except HTTPError as error: print(error.code, error.read().decode()) require 'net/http' require 'uri' uri = URI("https://sandbox.signup.nmi.com/api/v1/applications/{application}") request = Net::HTTP::Patch.new(uri) request["Authorization"] = "Bearer <access-token>" request["Content-Type"] = "application/json" request.body = File.binread('request.json') response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https', read_timeout: 30) { |http| http.request(request) } puts response.code puts response.body <?php $curl = curl_init('https://sandbox.signup.nmi.com/api/v1/applications/{application}'); curl_setopt_array($curl, [ CURLOPT_CUSTOMREQUEST => 'PATCH', CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, CURLOPT_HTTPHEADER => ['Authorization: Bearer <access-token>', 'Content-Type: application/json'], CURLOPT_POSTFIELDS => file_get_contents('request.json') ]); $response = curl_exec($curl); if ($response === false) { throw new RuntimeException(curl_error($curl)); } echo curl_getinfo($curl, CURLINFO_HTTP_CODE), PHP_EOL, $response; curl_close($curl);

Path and query parameters

Required flags apply to the parameter itself. Additional limits and enum values appear in the contract below. Parameter Location Required Type Description Idempotency-Key header false string Provide a random key (for example, UUID) to make the request idempotent application path true See schema The ID of the application to update [ { "name": "Idempotency-Key", "in": "header", "description": "Provide a random key (for example, UUID) to make the request idempotent", "schema": { "type": "string", "minLength": 10, "maxLength": 100 }, "required": false }, { "name": "application", "in": "path", "description": "The ID of the application to update", "required": true, "schema": { "$ref": "#/components/schemas/application-id" } } ] true

Request body

Use the declared media type: application/json. Required flags below apply within the selected object or variant. Read the workflow notes before choosing a variant. Field Type Required Description Constraints fields array no Application fields fields[].id string yes The unique identifier of the field. minLength: 7; maxLength: 50; pattern: "^fld_[a-z0-9_]{3,46}$" fields[].value ['string', 'integer', 'number', 'boolean', 'array', 'null'] yes Field value type depends on the field definition. collections array no This field is used to store collections. collections[].id string no The unique identifier of the collection. minLength: 7; maxLength: 50; pattern: "^col_[a-z0-9_]{3,46}$" collections[].records array no This field is used to store all records of the same collection. collections[].records[].id string yes The unique identifier of the record. minLength: 1; maxLength: 100 collections[].records[].fields array yes Application fields collections[].records[].fields[].id string yes The unique identifier of the field. minLength: 7; maxLength: 50; pattern: "^fld_[a-z0-9_]{3,46}$" collections[].records[].fields[].value ['string', 'integer', 'number', 'boolean', 'array', 'null'] yes Field value type depends on the field definition. { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/update-application" }, "examples": { "success": { "summary": "Success", "description": "Partially update application fields", "value": { "fields": [ { "id": "fld_monthly_volume", "value": "20" } ], "collections": [ { "id": "col_bank_info", "records": [ { "id": "bank1", "fields": [ { "id": "fld_dda_account_number", "value": "123456789" }, { "id": "fld_dda_account_routing_number", "value": "021000021" } ] } ] }, { "id": "col_owners", "records": [ { "id": "owner1", "fields": [ { "id": "fld_owner_name", "value": "John Doe" }, { "id": "fld_owner_first_name", "value": "John" }, { "id": "fld_owner_last_name", "value": "Doe" }, { "id": "fld_owner_address", "value": "789 main st" }, { "id": "fld_owner_city", "value": "New York" }, { "id": "fld_owner_country", "value": "US" }, { "id": "fld_owner_postal_code", "value": "10001" }, { "id": "fld_owner_state", "value": "NY" }, { "id": "fld_owner_dob", "value": "1970-12-31" }, { "id": "fld_owner_ssn", "value": "003456789" } ] } ] } ] } }, "invalid-field-value": { "summary": "Invalid Field Value", "description": "Invalid field value example", "value": { "fields": [ { "id": "fld_dba_name", "value": 1234 } ] } }, "invalid-field-name": { "summary": "Invalid Field Name", "description": "Invalid field name example", "value": { "fields": [ { "id": "fld_dba_name2", "value": "Network Merchant Inc" } ] } } } } }, "description": "Update application payload", "required": true } true

Responses

Match the HTTP status to its response schema below. For financial operations, also inspect the payment outcome before updating your order or retrying. HTTP status Media type Meaning 200 application/json Application updated successfully 404 application/json Error response for resource not found 422 application/json Invalid Update { "200": { "description": "Application updated successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/full-application" }, "examples": { "sample-app": { "$ref": "#/components/examples/sample-application" } } } } }, "404": { "description": "Error response for resource not found", "content": { "application/json": { "schema": { "type": "object", "properties": { "code": { "type": "string", "description": "Error code", "maxLength": 100 }, "message": { "type": "string", "description": "Error message", "maxLength": 10000 } } }, "examples": { "not-found": { "summary": "Resource Not Found", "description": "The resource cannot be found", "value": { "code": "NOT_FOUND", "message": "Resource not found" } } } } } }, "422": { "description": "Invalid Update", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/validation-error" }, "examples": { "invalid-field-value": { "summary": "Invalid Field Value", "description": "Invalid field value example", "value": { "code": "VALIDATION_ERROR", "message": "Field 'fld_dba_name' value must be an string.", "errors": [ "Field 'fld_dba_name' value must be an string." ] } }, "invalid-field-name": { "summary": "Invalid Field Name", "description": "Invalid field name example", "value": { "code": "VALIDATION_ERROR", "message": "This field 'fld_dba1' does not exist in the package.", "errors": [ "This field 'fld_dba1' does not exist in the package." ] } }, "other-validation-errors": { "summary": "Other Validation Errors", "description": "Multiple application validation errors", "value": { "code": "VALIDATION_ERROR", "message": "Field 'fld_legal_phone_number' value must be a valid phone number, '212-000-0000' given", "errors": [ "Field 'fld_legal_phone_number' value must be a valid phone number, '212-000-0000' given", "Field 'fld_legal_postal_code' value must be a valid postal code, '100010' given", "Field 'fld_date_opened' must be a date in the past", "Field 'fld_business_nature' value must be one of the following: [Retail, Internet, Mail Order/Telephone Order]", "Field 'fld_monthly_volume' must be greater or equal to 1", "Field 'fld_percent_key_entered' must be less than or equal 100", "The field 'fld_contact_name' must match the regular expression '^[A-Za-z0-9'\\-\\.\\,\\(\\)]+\\s+[A-Za-z0-9'\\-\\.\\,\\(\\)]+(\\s+[A-Za-z0-9'\\-\\.\\,\\(\\)]+)*$'", "Field 'fld_annual_fee' must be greater or equal to 0", "Field 'fld_qual_rate' is required when 'Flat Rate' pricing type is selected", "The total percentage of the 'fld_percent_of_swiped', 'fld_percent_key_entered', 'fld_percent_of_ecommerce' and 'fld_percent_of_moto' fields must be 100%" ] } } } } } } } true

Response fields · 200 · application/json

Field Type Required Description Constraints id string yes The unique identifier of the application. minLength: 20; maxLength: 20; pattern: "^app_[a-f0-9]{16}$" package_id string yes The unique identifier of the package. minLength: 7; maxLength: 20; pattern: "^pkg_[a-z0-9_]{3,16}$" status string yes enum: ["draft", "submitted", "approved", "rejected", "underwriter_requested_information", "requested_information_sent", "boarded"] fields array yes Application fields fields[].id string yes The unique identifier of the field. minLength: 7; maxLength: 50; pattern: "^fld_[a-z0-9_]{3,46}$" fields[].value ['string', 'integer', 'number', 'boolean', 'array', 'null'] yes Field value type depends on the field definition. collections array yes This field is used to store collections. collections[].id string no The unique identifier of the collection. minLength: 7; maxLength: 50; pattern: "^col_[a-z0-9_]{3,46}$" collections[].records array no This field is used to store all records of the same collection. collections[].records[].id string yes The unique identifier of the record. minLength: 1; maxLength: 100 collections[].records[].fields array yes Application fields collections[].records[].fields[].id string yes The unique identifier of the field. minLength: 7; maxLength: 50; pattern: "^fld_[a-z0-9_]{3,46}$" collections[].records[].fields[].value ['string', 'integer', 'number', 'boolean', 'array', 'null'] yes Field value type depends on the field definition. created_at string yes The date and time when the application was created. maxLength: 32; format: "date-time" updated_at string yes The date and time when the application was last updated. maxLength: 32; format: "date-time"

Response fields · 404 · application/json

Field Type Required Description Constraints code string no Error code maxLength: 100 message string no Error message maxLength: 10000

Response fields · 422 · application/json

Field Type Required Description Constraints code string no Error code maxLength: 1000 message string no Error message maxLength: 1000 errors array no

Referenced schema definitions

References beginning with #/components resolve to these definitions. These are field contracts, not example payment values. Use the applicable variant, required fields and constraints. { "securitySchemes": { "oauth": { "type": "oauth2", "flows": { "clientCredentials": { "tokenUrl": "/oauth/token", "scopes": { "*": "Full access", "packages:read": "Read packages information", "applications:read": "Read access to applications", "applications:write": "Write access to applications", "subscriptions:read": "Read access to subscriptions", "subscriptions:write": "Write access to subscriptions (subscribe/updated/delete)" } } } } }, "schemas": { "package-id": { "type": "string", "description": "The unique identifier of the package.", "pattern": "^pkg_[a-z0-9_]{3,16}$", "minLength": 7, "maxLength": 20, "example": "pkg_merrick_tsys" }, "field-id": { "type": "string", "description": "The unique identifier of the field.", "pattern": "^fld_[a-z0-9_]{3,46}$", "minLength": 7, "maxLength": 50 }, "collection-id": { "type": "string", "description": "The unique identifier of the collection.", "pattern": "^col_[a-z0-9_]{3,46}$", "minLength": 7, "maxLength": 50 }, "application-status": { "type": "string", "enum": [ "draft", "submitted", "approved", "rejected", "underwriter_requested_information", "requested_information_sent", "boarded" ] }, "application-id": { "type": "string", "description": "The unique identifier of the application.", "pattern": "^app_[a-f0-9]{16}$", "minLength": 20, "maxLength": 20 }, "application-created-at": { "type": "string", "description": "The date and time when the application was created.\n", "format": "date-time", "maxLength": 32, "example": "2025-01-01T00:00:00Z" }, "application-updated-at": { "type": "string", "description": "The date and time when the application was last updated.\n", "format": "date-time", "maxLength": 32, "example": "2025-01-01T00:00:00Z" }, "field-value-mixed": { "type": [ "string", "integer", "number", "boolean", "array", "null" ], "description": "Field value type depends on the field definition.\n" }, "application-fields": { "type": "array", "description": "Application fields", "maxItems": 1000, "items": { "type": "object", "required": [ "id", "value" ], "properties": { "id": { "$ref": "#/components/schemas/field-id" }, "value": { "$ref": "#/components/schemas/field-value-mixed" } } } }, "application-collections": { "type": "array", "description": "This field is used to store collections.\n", "maxItems": 1000, "items": { "type": "object", "properties": { "id": { "$ref": "#/components/schemas/collection-id" }, "records": { "type": "array", "description": "This field is used to store all records of the same collection.\n", "maxItems": 1000, "items": { "type": "object", "required": [ "id", "fields" ], "properties": { "id": { "type": "string", "description": "The unique identifier of the record.\n", "minLength": 1, "maxLength": 100 }, "fields": { "$ref": "#/components/schemas/application-fields" } } } } } } }, "full-application": { "type": "object", "description": "Full application object.\n", "required": [ "id", "package_id", "status", "fields", "collections", "created_at", "updated_at" ], "properties": { "id": { "$ref": "#/components/schemas/application-id" }, "package_id": { "$ref": "#/components/schemas/package-id" }, "status": { "$ref": "#/components/schemas/application-status" }, "fields": { "$ref": "#/components/schemas/application-fields" }, "collections": { "$ref": "#/components/schemas/application-collections" }, "created_at": { "$ref": "#/components/schemas/application-created-at" }, "updated_at": { "$ref": "#/components/schemas/application-updated-at" } } }, "validation-error": { "type": "object", "properties": { "code": { "type": "string", "description": "Error code", "maxLength": 1000 }, "message": { "type": "string", "description": "Error message", "maxLength": 1000 }, "errors": { "type": "array", "maxItems": 10, "items": { "type": "string", "description": "The error message", "maxLength": 1000 } } } }, "update-application": { "type": "object", "description": "Update an application.", "properties": { "fields": { "$ref": "#/components/schemas/application-fields" }, "collections": { "$ref": "#/components/schemas/application-collections" } } }, "event-types": { "type": "string", "enum": [ "application.updated.data.requested", "application.approved", "application.declined", "application.cancelled", "application.merchant.closed", "application.merchant.boarded", "merchant.chargeback.added", "merchant.deposit.new", "merchant.first-batch", "merchant.processing.start", "merchant.processing.stop", "merchant.residuals.published", "merchant.retrieval.added", "merchant.statement.new" ], "example": "application.merchant.boarded" } }, "responses": { "error-not-found": { "description": "Error response for resource not found", "content": { "application/json": { "schema": { "type": "object", "properties": { "code": { "type": "string", "description": "Error code", "maxLength": 100 }, "message": { "type": "string", "description": "Error message", "maxLength": 10000 } } }, "examples": { "not-found": { "summary": "Resource Not Found", "description": "The resource cannot be found", "value": { "code": "NOT_FOUND", "message": "Resource not found" } } } } } } }, "examples": { "sample-application": { "summary": "Application", "description": "A sample application", "value": { "id": "app_6e9361041666a79e", "package_id": "pkg_merrick_tsys", "status": "draft", "fields": [ { "id": "fld_dba_name", "value": "Network Merchant Inc" }, { "id": "fld_dba_address", "value": "1450 American Ln #1200" }, { "id": "fld_dba_city", "value": "Schaumburg" }, { "id": "fld_dba_country", "value": "US" }, { "id": "fld_dba_email", "value": "john@doe.com" }, { "id": "fld_dba_phone_number", "value": 8473524850 }, { "id": "fld_dba_postal_code", "value": 60173 }, { "id": "fld_dba_state", "value": "IL" }, { "id": "fld_legal_name", "value": "Network Merchant Inc" }, { "id": "fld_state_incorporated", "value": "DE" }, { "id": "fld_legal_phone_number", "value": "847-352-4850" }, { "id": "fld_legal_address", "value": "1450 American Ln #1200" }, { "id": "fld_legal_city", "value": "Schaumburg" }, { "id": "fld_legal_country", "value": "US" }, { "id": "fld_legal_postal_code", "value": 60173 }, { "id": "fld_legal_state", "value": "IL" }, { "id": "fld_contact_name", "value": "Jane Doe" }, { "id": "fld_business_website", "value": "https://www.nmi.com/" }, { "id": "fld_mcc", "value": 5812 }, { "id": "fld_date_opened", "value": "2022-01-01" }, { "id": "fld_federal_tax_id", "value": 223456789 }, { "id": "fld_business_nature", "value": "Internet" }, { "id": "fld_monthly_volume", "value": 6000 }, { "id": "fld_average_ticket", "value": 50 }, { "id": "fld_individual_with_control_address", "value": "1450 American Ln #1200" }, { "id": "fld_individual_with_control_city", "value": "Schaumburg" }, { "id": "fld_individual_with_control_postal_code", "value": 60173 }, { "id": "fld_individual_with_control_ssn", "value": "003456789" }, { "id": "fld_individual_with_control_state", "value": "IL" }, { "id": "fld_individual_with_control_country", "value": "US" }, { "id": "fld_individual_with_control_dob", "value": "1990-01-01" }, { "id": "fld_individual_with_control_first_name", "value": "John" }, { "id": "fld_individual_with_control_last_name", "value": "Doe" }, { "id": "fld_individual_with_control_title", "value": "Owner" }, { "id": "fld_individual_with_control_ownership_percentage", "value": 100 }, { "id": "fld_individual_with_control_phone", "value": "847-352-4850" }, { "id": "fld_individual_with_control_email", "value": "aaa@aa.com" }, { "id": "fld_high_ticket", "value": 100 }, { "id": "fld_percent_key_entered", "value": 20 }, { "id": "fld_percent_of_ecommerce", "value": 0 }, { "id": "fld_percent_of_moto", "value": 0 }, { "id": "fld_percent_of_swiped", "value": 80 }, { "id": "fld_type_business", "value": "LLC" }, { "id": "fld_type_of_goods_sold", "value": "FinTech" }, { "id": "fld_years_in_business", "value": 2 }, { "id": "fld_pricing_type", "value": "Flat Rate" }, { "id": "fld_qual_rate", "value": 0.1 }, { "id": "fld_qual_rate_per_auth", "value": 0.1 }, { "id": "fld_amex_processor_fees", "value": "4.25" }, { "id": "fld_amex_processor_per_auth", "value": "0.25" }, { "id": "fld_downgrade_surcharge", "value": "0.00" }, { "id": "fld_downgrade_per_auth", "value": "0.00" }, { "id": "fld_international_rate", "value": "0.00" }, { "id": "fld_international_per_auth", "value": "0.00" }, { "id": "fld_monthly_fee", "value": "10.00" }, { "id": "fld_chargeback_fee", "value": "25.00" }, { "id": "fld_retrieval_request_fee", "value": "10.00" }, { "id": "fld_voice_auth_fee", "value": "0.95" }, { "id": "fld_ach_return_fee", "value": "25.00" }, { "id": "fld_batch_fee", "value": "0.25" }, { "id": "fld_avs_fee", "value": "0.07" }, { "id": "fld_1099_fee", "value": "6.95" }, { "id": "fld_monthly_minimum", "value": "10.00" }, { "id": "fld_annual_fee", "value": "99.00" }, { "id": "fld_breach_monitoring_protection", "value": "0.00" } ], "collections": [ { "id": "col_bank_info", "records": [ { "id": "bank1", "fields": [ { "id": "fld_dda_account_number", "value": "123456789" }, { "id": "fld_dda_account_routing_number", "value": "021000021" }, { "id": "fld_dda_name_on_account", "value": "John Doe" } ] } ] }, { "id": "col_owners", "records": [ { "id": "owner1", "fields": [ { "id": "fld_owner_first_name", "value": "John" }, { "id": "fld_owner_last_name", "value": "Doe" }, { "id": "fld_owner_address", "value": "789 main st" }, { "id": "fld_owner_city", "value": "New York" }, { "id": "fld_owner_country", "value": "US" }, { "id": "fld_owner_postal_code", "value": 10001 }, { "id": "fld_owner_state", "value": "NY" }, { "id": "fld_owner_dob", "value": "1970-12-31" }, { "id": "fld_owner_ssn", "value": "003456789" }, { "id": "fld_owner_ownership_percentage", "value": "20" }, { "id": "fld_owner_title", "value": "CEO" }, { "id": "fld_owner_email", "value": "abc@abc.com" }, { "id": "fld_owner_phone_num", "value": "847-352-4850" } ] } ] } ], "created_at": "2025-01-01T00:00:00Z", "updated_at": "2025-01-01T00:00:00Z" } } } } true

Integration checks

Validate the request against its selected schema before submission. Keep secrets outside browser code. Test permitted and denied account access, validation failures and interrupted responses in the sandbox. Account-management or messaging operations require the corresponding partner access and intended recipient context.

Join the community and get the latest biz news & tips

Thanks for submitting!

© 2025 Betterpay. All Rights Reserved.

bottom of page