MLA citation formatter
Toni Morrison's Beloved from 1987 becomes Morrison, Toni. *Beloved*. Alfred A. Knopf, 1987. Enter author, title, year and publisher, choose book, article, website, newspaper or magazine, and get one MLA 9 works-cited line to paste. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Author
- Toni Morrison
- Title
- Beloved
- Year
- 1,987
- Publisher
- Alfred A. Knopf
- Source type
- Book
- Citation
- Morrison, Toni. *Beloved*. Alfred A. Knopf, 1987.
- Style
- MLA 9
- Author
- Morrison, Toni
Students, teachers, editors, and content teams still need a clean MLA works-cited line when the rest of the paper is already done. This MLA citation formatter builds a single MLA 9th edition entry from author, title, optional year and publisher, and a source type such as book, article, website, newspaper, or magazine. It reorders personal names into Last, First when you pass First Last, places book titles in italics markers and short works in quotation marks, and joins publisher and year with the standard comma-and-period pattern.
What MLA 9 expects and how this formatter maps your fields
The Modern Language Association Handbook, ninth edition, describes a works-cited entry as a short list of core elements in a fixed order: author, title of source, title of container, other contributors, version, number, publisher, publication date, and location. Most everyday citations only need a subset of those elements. This tool focuses on the fields people type every day—author, title, year, publisher, and source type—and assembles them into one plain-text line you can paste into a Works Cited list or a CMS field.
*Title*. Publisher, Year. For articles, websites, newspapers, and magazines, the title of the short work appears in quotation marks and the publisher or site name is treated as the italicized container when you supply it: Author. "Title." *Publisher*, Year.
An optional URL is appended after the terminal period of the body so DOIs and web addresses sit at the end the way MLA prefers for electronic locations. Personal names given as First Last are inverted to Last, First; names that already contain a comma are left in author-inverted form; single-word or corporate authors pass through unchanged.
Who gets the most from MLA citations
Learning management systems and homework portals use an MLA citation formatter so students can check a works-cited line without guessing italics versus quotation marks. Editorial calendars and documentation sites store structured author and title fields in a CMS and need a reproducible MLA rendering for export, print PDF, or accessibility labels. Research assistants batch-convert spreadsheet rows of books and articles into MLA lines before pasting into a shared document, which is faster and less error-prone than typing each entry by hand.
Failed validation does not consume balance. With those habits you get stable MLA 9 strings for LMS plugins, edge workers, and editorial pipelines without standing up a full citation-management suite of your own.
What you can do with it
Student works-cited checks
Let learners enter author, title, year, and publisher and verify a single MLA 9 line before submitting an essay or lab report.
CMS and documentation export
Render structured bibliographic fields from a content database into consistent MLA strings for PDFs, footers, and resource pages.
Batch bibliography from spreadsheets
Map CSV columns to author, title, year, publisher, and source type and generate MLA entries for research assistants or librarians.
FAQ
What happens if author or title is missing?
Both author and title are required for a meaningful MLA entry; empty or whitespace-only values are rejected and are not billed.
Does the formatter invert First Last names?
Yes. Personal names without a comma are reordered to Last, First. Names that already include a comma, and single-word or corporate authors, are kept as provided.
How are books different from articles or websites?
Books use italicized titles (*Title*). Articles, websites, newspapers, and magazines put the title in quotation marks and italicize the publisher or site name when you supply it as the container.
Where does the URL or DOI go in an MLA citation?
At the very end, after the period that closes the rest of the entry, and without a period of its own. That is where MLA places web addresses and DOIs for electronic sources.
Can I leave out the year or the publisher?
Yes, both are optional. When you give both, the year follows the publisher after a comma; with no publisher, the year appears on its own. Author and title are the only parts you must enter.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/life/citation-mla-format \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"author":"Toni Morrison","title":"Beloved"}'const res = await fetch("https://api.kit.forhosting.com/life/citation-mla-format", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"author": "Toni Morrison",
"title": "Beloved"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/citation-mla-format",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"author": "Toni Morrison",
"title": "Beloved"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/citation-mla-format", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"author":"Toni Morrison","title":"Beloved"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"author":"Toni Morrison","title":"Beloved"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/citation-mla-format", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"author": "Toni Morrison",
"title": "Beloved"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.citation_mla_format",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Missing author or title fails fast with invalid_input so automations never store an empty citation. The same pure logic runs free in the browser and on the API path at $0.002 per successful call, with no model tokens and no outbound network.
What MLA 9 expects and how this formatter maps your fields
For books, the title is wrapped in asterisk italics markers and the publisher sits before the year: Author.
Input contract, source types, and error behaviour
Example: author Toni Morrison, title Beloved, year 1987, publisher Alfred A. *Beloved*. Alfred A. Knopf, 1987. "Notes on the Analytical Engine." *Scientific Memoirs*, 1843. POST a JSON body with two required strings: author and title. Optional fields are year (integer from 1 to 9999), publisher (string: book publisher, journal title, newspaper, magazine, or website name), source_type (book, article, website, newspaper, or magazine; default book), and url (string location for web or DOI). Aliases such as writer, work, journal, and link are accepted so form UIs and older clients can send natural field names. Empty or whitespace-only author or title raises invalid_input with a message that both are required—those failures are not billed. An out-of-range year, a non-integer year, or an unknown source_type also fails with invalid_input naming the problem. On success the response includes citation (the full MLA line), style set to MLA 9, the normalized source_type, author in MLA order, title as you provided it (trimmed), and any of year, publisher, and url that you sent. Optional fields that were omitted are omitted from the JSON rather than returned as null, which keeps client schemas simple. Knopf, source_type book yields Morrison, Toni. Example: author Ada Lovelace, title Notes on the Analytical Engine, publisher Scientific Memoirs, year 1843, source_type article yields Lovelace, Ada. Pair the citation string with your own hanging-indent CSS or Word style; this endpoint formats the bibliographic text only and does not emit RTF, BibTeX, or multi-entry lists.
Where an MLA citation API earns its keep
Browser extensions and teacher tools can call the free in-page path for single citations and the same module over the API for bulk jobs, guaranteeing that classroom demos match production automation byte-for-byte. Keep titles free of extra wrapping quotes unless they are part of the work’s official name, pass years as integers, and choose source_type deliberately when the work is not a book so containers italicize correctly.
Technical questions
How do I format an MLA 9 citation with this tool?
Send author and title (required), plus optional year, publisher, source_type (book, article, website, newspaper, magazine), and url. The API returns a single citation string in MLA 9 style.
What does the MLA citation formatter cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.