> For the complete documentation index, see [llms.txt](https://docs.moderncollections.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.moderncollections.io/rest-api-explorer/payments.md).

# Payments

Record payments received and inspect payment commitments and installment plans.

## Record a payment

> Record a payment received against a placement. Use this for \*\*out-of-band\*\* payments — wire transfers, ACH credits, paper checks. Stripe-processed payments are recorded automatically.<br>

```json
{"openapi":"3.1.0","info":{"title":"Modern Collections API","version":"1.0.0"},"tags":[{"name":"payments","description":"Record payments received and inspect payment commitments and installment plans."}],"servers":[{"url":"https://api.moderncollections.io/v1","description":"Production"},{"url":"https://sandbox.api.moderncollections.io/v1","description":"Sandbox"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Pass your API key as a Bearer token in the `Authorization` header."}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"description":"A stable client-supplied key. Retries with the same key are deduplicated server-side for at least 24 hours.","schema":{"type":"string"}}},"schemas":{"NewPayment":{"type":"object","required":["placement_id","amount","currency","method","received_at"],"properties":{"placement_id":{"type":"string","format":"uuid"},"amount":{"type":"number","format":"float"},"currency":{"type":"string"},"method":{"type":"string","enum":["ach_credit","wire","check","card","other"]},"received_at":{"type":"string","format":"date-time"},"external_reference":{"type":"string","description":"Your AR-side reference (e.g. wire confirmation number)."}}},"Payment":{"allOf":[{"$ref":"#/components/schemas/NewPayment"},{"type":"object","properties":{"payment_id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["pending","applied","reversed"]},"created_at":{"type":"string","format":"date-time"}}}]},"ErrorEnvelope":{"type":"object","properties":{"error":{"$ref":"#/components/schemas/Error"}}},"Error":{"type":"object","required":["code","category","message"],"properties":{"code":{"type":"string"},"category":{"type":"string","enum":["invalid_request","authentication","authorization","not_found","conflict","compliance_refusal","rate_limit","server_error"]},"message":{"type":"string"},"request_id":{"type":"string"}}}},"responses":{"BadRequest":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Unauthorized":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"paths":{"/payments":{"post":{"summary":"Record a payment","description":"Record a payment received against a placement. Use this for **out-of-band** payments — wire transfers, ACH credits, paper checks. Stripe-processed payments are recorded automatically.\n","tags":["payments"],"operationId":"createPayment","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewPayment"}}}},"responses":{"201":{"description":"Payment recorded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payment"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"}}}}}}
```

## GET /placements/{placement\_id}/payments

> List payments on a placement

```json
{"openapi":"3.1.0","info":{"title":"Modern Collections API","version":"1.0.0"},"tags":[{"name":"payments","description":"Record payments received and inspect payment commitments and installment plans."}],"servers":[{"url":"https://api.moderncollections.io/v1","description":"Production"},{"url":"https://sandbox.api.moderncollections.io/v1","description":"Sandbox"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Pass your API key as a Bearer token in the `Authorization` header."}},"schemas":{"Payment":{"allOf":[{"$ref":"#/components/schemas/NewPayment"},{"type":"object","properties":{"payment_id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["pending","applied","reversed"]},"created_at":{"type":"string","format":"date-time"}}}]},"NewPayment":{"type":"object","required":["placement_id","amount","currency","method","received_at"],"properties":{"placement_id":{"type":"string","format":"uuid"},"amount":{"type":"number","format":"float"},"currency":{"type":"string"},"method":{"type":"string","enum":["ach_credit","wire","check","card","other"]},"received_at":{"type":"string","format":"date-time"},"external_reference":{"type":"string","description":"Your AR-side reference (e.g. wire confirmation number)."}}},"ErrorEnvelope":{"type":"object","properties":{"error":{"$ref":"#/components/schemas/Error"}}},"Error":{"type":"object","required":["code","category","message"],"properties":{"code":{"type":"string"},"category":{"type":"string","enum":["invalid_request","authentication","authorization","not_found","conflict","compliance_refusal","rate_limit","server_error"]},"message":{"type":"string"},"request_id":{"type":"string"}}}},"responses":{"Unauthorized":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"NotFound":{"description":"The requested resource could not be found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"paths":{"/placements/{placement_id}/payments":{"get":{"summary":"List payments on a placement","tags":["payments"],"operationId":"listPlacementPayments","responses":{"200":{"description":"An array of payments.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Payment"}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}}}}
```

## Create a payment plan

> Set up a multi-installment payment plan on a placement. The debtor's installment schedule, total amount, and cadence are recorded. Outreach pauses while the plan is in good standing.<br>

```json
{"openapi":"3.1.0","info":{"title":"Modern Collections API","version":"1.0.0"},"tags":[{"name":"payments","description":"Record payments received and inspect payment commitments and installment plans."}],"servers":[{"url":"https://api.moderncollections.io/v1","description":"Production"},{"url":"https://sandbox.api.moderncollections.io/v1","description":"Sandbox"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Pass your API key as a Bearer token in the `Authorization` header."}},"schemas":{"NewPaymentPlan":{"type":"object","required":["placement_id","installments","cadence"],"properties":{"placement_id":{"type":"string","format":"uuid"},"installments":{"type":"array","items":{"type":"object","required":["amount","due_date"],"properties":{"amount":{"type":"number","format":"float"},"due_date":{"type":"string","format":"date"}}}},"cadence":{"type":"string","enum":["weekly","biweekly","monthly"]}}},"PaymentPlan":{"allOf":[{"$ref":"#/components/schemas/NewPaymentPlan"},{"type":"object","properties":{"plan_id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["active","completed","defaulted"]},"created_at":{"type":"string","format":"date-time"}}}]},"ErrorEnvelope":{"type":"object","properties":{"error":{"$ref":"#/components/schemas/Error"}}},"Error":{"type":"object","required":["code","category","message"],"properties":{"code":{"type":"string"},"category":{"type":"string","enum":["invalid_request","authentication","authorization","not_found","conflict","compliance_refusal","rate_limit","server_error"]},"message":{"type":"string"},"request_id":{"type":"string"}}}},"responses":{"BadRequest":{"description":"The request was malformed or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Unauthorized":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"paths":{"/payment_plans":{"post":{"summary":"Create a payment plan","description":"Set up a multi-installment payment plan on a placement. The debtor's installment schedule, total amount, and cadence are recorded. Outreach pauses while the plan is in good standing.\n","tags":["payments"],"operationId":"createPaymentPlan","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewPaymentPlan"}}}},"responses":{"201":{"description":"Payment plan created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentPlan"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.moderncollections.io/rest-api-explorer/payments.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
