UN Security Council Vetoes Dataset: Codebook
Version 1, 6 November 2026. Magnus Lundgren, University of Gothenburg. Please report errors to magnus.lundgren@gu.se.
Scope and unit
The dataset covers every veto cast in the UN Security Council from the first, on 16 February 1946, to 30 October 2026: 274 vetoed items.
A draft counts as vetoed when it received the affirmative votes needed for adoption (seven before 1966, nine since) and failed because one or more permanent members voted against it (Charter Article 27(3)). Abstention or non-participation by a permanent member is not a veto. The dataset follows the veto list of the UN Department of Political and Peacebuilding Affairs (DPPA), which includes vetoes cast in private meetings on the appointment of the Secretary-General.
The unit of analysis is the vetoed item, called a draft throughout. Most are draft resolutions. In the early years the Council also voted on parts of drafts, on amendments, on membership applications without a draft, and on whether a question was procedural (the "double veto"); the DPPA list counts a veto in each such vote, and so does this dataset. The variable vetoed_item identifies the type.
A draft vetoed by two or three members is one row, as in the UN count. To count vetoes by member, sum veto_china to veto_uk, which gives 332 member vetoes on 274 drafts. Of these drafts, 229 were vetoed by one member, 32 by two and 13 by three.
Files
| File | Unit | Rows |
|---|---|---|
data/vetoes.csv |
vetoed draft | 274 |
data/veto_votes.csv |
Council member × vetoed draft (roll call) | 3,637 |
data/veto_countries.csv |
country concerned × vetoed draft | 472 |
data/vetoes.json |
vetoed draft, all fields, roll call nested | 274 |
The same three tables ship in the R package unscvetoes as vetoes, veto_votes and veto_countries.
Missing values are empty cells in the CSV files and NA in R. Lists inside a cell are separated by "; ".
vetoes (one row per vetoed draft)
| Variable | Description | Source |
|---|---|---|
veto_id |
Identifier, 1–274, in date order. Fixed once assigned; new vetoes get the next number. Use it to cite a veto. | Constructed |
un_id |
Row identifier in the DPPA veto list. | DPPA |
date |
Date of the vote (YYYY-MM-DD). For the three written votes of 2020, the date the result was announced. Where the meeting record shows a different date from the DPPA list, the record's date is used and notes says so. |
Meeting record; DPPA |
year, month |
Year and month of date. |
Constructed |
draft_symbol |
UN document symbol of the vetoed draft, e.g. S/2024/302. For a part of a draft or an amendment, the symbol of the document voted on. Missing for 29 items that had no symbol: 28 from 1946–53, such as votes on membership applications, and an oral amendment in 2023 (veto_id 260). |
Draft text; meeting record |
draft_note |
Description of the item where the symbol alone does not identify it, e.g. "S/3502 (separate vote on the word "Spain")". | Draft text; meeting record |
meeting_record |
Symbol of the meeting record, e.g. S/PV.9616. For the 2020 written votes, the letter that records the result. |
Meeting record |
meeting_number |
Number of the Security Council meeting. Missing for written votes. | Constructed |
vetoed_item |
draft (a draft resolution or the whole of one); part of draft (a paragraph or words voted on separately); amendment; application (a vote on a membership application with no draft); procedural question (a vote on whether a draft was procedural); oral proposal. |
Coded from the meeting record |
agenda, short_agenda |
Agenda item, as worded in the DPPA list. | DPPA |
topic |
Short label in the form "situation: subject", e.g. "Syria: cross-border humanitarian aid". | Coded |
region |
Region of the situation the draft concerns: Africa (sub-Saharan Africa, Sudan and the Maghreb west of Libya, including Western Sahara); Americas; Asia (South, East, South-East and Central Asia); Europe (including Cyprus, the Caucasus, Russia and Ukraine); Middle East (Egypt, Libya, Iran, Iraq, Israel, Palestine, the Levant, the Gulf and Yemen); Global (drafts not tied to a country, e.g. the Secretary-General or arms control). | Coded |
issue_area |
Main type of decision the draft sought, one per draft. Where several apply, the first in this order is used: (1) UN membership and appointments; (2) Peace operations (create, renew, change or end a UN mission or authorized force); (3) Decolonization and self-determination (Southern Rhodesia, Namibia, Portuguese colonies, other dependent territories); (4) Non-proliferation and disarmament (including sanctions aimed at nuclear or missile programmes); (5) Sanctions (impose, renew or change sanctions or a sanctions panel; includes apartheid South Africa); (6) Accountability and investigations (tribunals, ICC referral, commissions of inquiry, attribution mechanisms, recognition of atrocity crimes); (7) Use of force and ceasefires (ceasefires, truces, halts to military operations, withdrawal of forces); (8) Humanitarian access and protection (aid access, humanitarian pauses, protection of civilians or UN staff); (9) Occupation, territory and settlements; (10) Political crises and human rights; (11) Other thematic. | Coded |
situation |
The country or dispute the draft concerns, used to group related vetoes (e.g. "Syria", "Israel and Palestine", "Namibia"). Missing where no single country is concerned. | Constructed from countries_iso3c |
vetoed_by |
Permanent member(s) that cast the veto, e.g. "China; Russia". | DPPA |
n_vetoing |
Number of vetoing members (1–3). | DPPA |
veto_china, veto_russia, veto_france, veto_us, veto_uk |
1 if that member vetoed, else 0. veto_russia covers the USSR before 1992; veto_china covers the Republic of China until 25 October 1971 and the People's Republic after. |
DPPA |
council_size |
Number of Council members: 11 before 1966, 15 since. | Charter |
vote_yes, vote_no, vote_abstain, vote_not_participating |
Votes in favour, against, abstentions, and members that did not participate (present but not voting, or absent, e.g. the Soviet boycott of 1950). They sum to council_size. |
Meeting record |
sponsors |
Sponsoring states as ISO3 codes, as printed on the draft or listed in the UN Digital Library. Sponsors added orally at the meeting may be missing. | Draft text; UN Digital Library |
n_sponsors |
Number of sponsors. | Constructed |
penholder |
Council member(s) that drafted and negotiated the text, as ISO3 codes, where a source names them or the meeting record makes it clear. Mostly missing before the 2000s, when the penholder system took shape. | Meeting record |
countries_iso3c |
Countries the draft concerns, as ISO3 codes: the state or territory where the situation is located, and any state the operative paragraphs address by name as a party, target or applicant. Empty for thematic drafts. See veto_countries for COW and Gleditsch–Ward codes. |
Coded from the draft |
ucdp_conflict_id |
UCDP conflict identifier of the armed conflict the draft concerns (UCDP/PRIO Armed Conflict Dataset v26.1). | Coded; UCDP |
ucdp_dyad_id |
UCDP dyad identifier, filled only when the matched conflict has exactly one active dyad in the veto year. | UCDP Dyadic Dataset v26.1 |
ucdp_active |
TRUE if the matched conflict is active (25 or more battle-related deaths) in the veto year. Missing where there is no conflict match and for vetoes after 2025, which v26.1 does not cover. | UCDP |
ucdp_match |
direct: the draft is about this conflict. past: the draft concerns a mission or settlement arising from a conflict that had ended. none: no armed conflict concerned or no clear match. |
Coded |
ucdp_match_note |
One-line note on each match decision. | Coded |
cow_war_num |
Correlates of War war number, for drafts about wars with no UCDP match. No draft in this version needed one. | COW |
followup_resolution |
A later Council resolution on the same matter, where one was adopted. It may be a revised version of the vetoed text or a different text; aftermath says which. |
Resolutions |
ga_type, ga_meeting, ga_date |
General Assembly follow-up for vetoes from 26 April 2022: a veto initiative debate under GA resolution 76/262, or an emergency special session on the same matter, which 76/262 accepts in its place. Symbol and date of the first plenary meeting. Earlier Assembly action is described in aftermath and not coded here. |
GA records |
draft_purpose |
One sentence on what the draft would have done. | Draft text |
stated_reason |
One sentence paraphrasing the reason the vetoing member gave in its explanation of vote. It does not assess the member's motives. For joint vetoes, each member's reason is given where stated. | Meeting record |
aftermath |
One or two sentences on what followed in the Council and, where relevant, the General Assembly. | Meeting records; resolutions |
context |
Two to four sentences combining the above, as shown on the web page. | Written from the fields above |
sources |
URLs of the sources used, separated by "; ". The full list, with what each source supports, is in research/vetoes_research.json. |
|
notes |
Facts not confirmed from a primary source, departures from the DPPA list, and coding decisions a user should know about. Read this before relying on a row. | |
detail |
TRUE for drafts with researched fields. All rows in this version. |
veto_votes (one row per Council member per vetoed draft)
Each draft has 11 or 15 rows, matching council_size. Drafts decided by secret ballot in a private meeting (the Secretary-General appointments of 1953 and 1996, veto_id 61 and 206) have no roll call; for 206 only the negative vote attributed in the DPPA list is recorded.
| Variable | Description |
|---|---|
veto_id, un_id, date, year, draft_symbol |
As in vetoes. |
member |
Council member, by its name at the time (e.g. USSR, Ceylon, United Arab Republic, Zaire). |
member_iso3c |
ISO3 code. Historical members: RUS for the USSR, UKR and BLR for the Ukrainian and Byelorussian SSRs, CHN for the Republic of China before 25 October 1971, YUG Yugoslavia, CSK Czechoslovakia, DDR East Germany, YMD Democratic Yemen. |
member_cown |
Correlates of War state code at the date of the vote (e.g. 713 for the Republic of China seat from 8 December 1949, when COW and Gleditsch–Ward begin Taiwan, to 24 October 1971; missing for the Ukrainian and Byelorussian SSRs). |
permanent |
TRUE for the five permanent members. |
vote |
yes, no, abstain or not_participating. |
veto |
TRUE for a vetoing member's negative vote. |
Source: the roll call in the meeting record (S/PV), read from the English verbatim record, by OCR where the record is a scan. For the 2020 written votes, the letters recording the result. Where a record gives only totals (a few votes in 1946), the member lists are inferred from members' statements and notes says so.
veto_countries (one row per country concerned per vetoed draft)
| Variable | Description |
|---|---|
veto_id, un_id, date, year, month, draft_symbol, region, issue_area, vetoed_by, veto_china … veto_uk, ucdp_conflict_id |
As in vetoes. |
country |
Country name at the date of the vote. |
iso3c |
ISO3 code. Non-standard codes: PSE Palestine, ESH Western Sahara, VDR North Vietnam; VNM is South Vietnam before May 1975. As a country concerned, CHN means the People's Republic of China from October 1949. |
cown |
Correlates of War state code at the date of the vote. Missing for entities that were not COW system members: Palestine, Western Sahara, Namibia before 1990, Southern Rhodesia before November 1965, occupied Germany (1948), the Ukrainian SSR (1946) and the Republic of South Viet-Nam (1975). |
gwno |
Gleditsch–Ward state code at the date of the vote, with the same gaps, using the microstates list where needed (Grenada is 55). Serbia/Yugoslavia is 345 until 2006 and 340 after; Yemen is 678. |
Codes were assigned from a table of historical exceptions in build/build_dataset.R, with the R package countrycode for all other states.
Merge keys
| To join with | Key | Notes |
|---|---|---|
| Country-year panels (COW, V-Dem, Polity, World Bank) | veto_countries: cown, gwno or iso3c, plus year |
veto_country_year() in the R package collapses to country-years. Set non-matches to 0 after the join. |
| Country-month panels | veto_countries: country code plus year and month |
|
| UCDP conflict-year | vetoes: ucdp_conflict_id plus year |
past matches will not join an active conflict-year. |
| UCDP dyad-year | vetoes: ucdp_dyad_id plus year |
Filled only where the dyad is unambiguous. |
| UN voting and document data | draft_symbol, meeting_record, meeting_number |
Symbols follow UN style (S/2023/970, S/PV.9499). draft_symbol holds only the symbol, so it can be used as a key directly. Written votes in 2020 have no meeting number. |
| The DPPA veto list | un_id |
The package vignette (unscvetoes.html on the web page) shows a country-year and a UCDP conflict-year join.
Coding and conventions
Region, issue area, topic, vetoed item, countries concerned and the conflict match were coded from the draft text and meeting record, one code per draft per variable, following the rules above.
To test the rules, three AI coders recoded vetoed_item, region and issue_area for all 274 drafts, each seeing only the rules and the entry text, not the original codes. Agreement with the original codes:
| Variable | Agreement (three coders) | Cohen's kappa | Krippendorff's alpha |
|---|---|---|---|
| Vetoed item | 99.6–100% | 0.99–1.00 | 0.99 |
| Region | 99.6–100% | 0.99–1.00 | 1.00 |
| Issue area | 87.6–91.6% | 0.86–0.90 | 0.89 |
Alpha is computed over all four codings per draft, before adjudication. Where all three coders agreed on a different issue area (8 drafts), the case was reviewed against the precedence rule and seven codes were changed. The codings, statistics and adjudication are in validation/. The test coders come from the same model family as the original coding, so the figures may overstate the agreement that independent human coders would reach. A human second coding of a sample would be a stronger test.
The prose fields use short English country names (Russia, Syria, North Korea, Vietnam), with historical names where the period requires (the Soviet Union, the Republic of China, Zaire); Oxford spelling; and the vote form "A in favour, B against and C abstentions". They describe what a vetoed draft "would have" done and attribute every reason to the member that gave it.
Sources
- UN Department of Political and Peacebuilding Affairs, Security Council vetoes list, downloaded 4 November 2026 (https://api.psdata.un.org/public/data/DPPA-SCVETOES/csv).
- Security Council meeting records (S/PV) and draft texts, via https://undocs.org, https://documents.un.org and the UN Digital Library (https://digitallibrary.un.org).
- Dag Hammarskjöld Library, Security Council: Veto List (https://research.un.org/en/docs/sc/quick/veto), and the Repertoire of the Practice of the Security Council.
- General Assembly plenary records and resolutions.
- UCDP/PRIO Armed Conflict Dataset v26.1 and UCDP Dyadic Dataset v26.1 (Gleditsch et al. 2002, Journal of Peace Research 39(5), plus the UCDP annual article that UCDP asks users to cite for v26.1).
This version does not use UN press releases or Security Council Report.
Method note
The entries were compiled by AI research assistants (Claude, Anthropic). They located and read the cited UN documents, by OCR where a record is a scan, and drafted each entry. Separate AI review passes then checked roll calls, dates, resolution numbers and attributions against the same documents, and a further pass checked prose and coding for consistency. The validation of the coding is described above. Each entry lists the sources used; facts that could not be confirmed from them are flagged in notes.
Known limits
- Departures from the DPPA list. Where the meeting record shows that the vetoed item differs from the DPPA entry (e.g. an amendment or a paragraph vote, where the list gives the main draft), the dataset describes the item actually vetoed and says so in
notes. The vetoing members and the count of vetoes always follow the DPPA list. Two dates differ, where the vote fell on a different day from the one the list gives: veto_id 117 (South Asia, after midnight on 5 December 1971) and 151 (Afghanistan, 7 January 1980). - Assignment of same-day vetoes. Where the DPPA list has several rows for one meeting without naming the item (e.g. the 16 membership vetoes of 13 December 1955), rows are assigned in the order the votes were taken, keeping the vetoing member the list gives each row.
- Secret ballots. veto_id 61 (1953, Pearson) and 206 (1996, Boutros-Ghali) were decided by secret ballot. The communiqués give totals and say only that "a permanent member" voted against; the dataset follows the DPPA list in naming the USSR and the United States.
- Countries before independence. Fourteen rows in
veto_countriesconcern a territory before it entered the COW state system, and so give the code of the later state: Syria and Lebanon (February 1946), Austria (1947, 1949), Indonesia (1947–49), South Korea (April 1949), Cambodia, Laos and South Vietnam (1952) and Bangladesh (December 1971). The rows for Cambodia, Laos, South Vietnam and Bangladesh are also outside the Gleditsch–Ward list on those dates. An inner join to a COW or G–W country-year panel drops these rows. - Penholder is missing for most drafts before the 2000s and for some after.
- Sponsors added orally at the meeting may be missing.
- GA follow-up for veto_id 274 (30 October 2026) had not taken place by 6 November 2026. The GA meeting symbols for 272 and 273 come from UN University and UN audiovisual records.
- Conflict matches for 2026 rely on the UCDP conflict identifier only; v26.1 does not yet code 2026.
Citation
Lundgren, Magnus. 2026. UN Security Council Vetoes Dataset. Version 1. University of Gothenburg.
The data are released under a CC BY 4.0 licence. The R package is version 1.0.0.
Updating
- Download the latest DPPA list into
data-raw/:curl -L -o data-raw/vetoes_UN_<date>.csv https://api.psdata.un.org/public/data/DPPA-SCVETOES/csv - Add researched entries for new vetoes to
research/vetoes_research.jsonand a line toresearch/coding.csv.research/veto_ids.csvassigns the nextveto_idautomatically. - Run
Rscript build/build_dataset.Rfrom the project folder. This rebuildsdata/, the package data and the web page inweb/.
Version history
- 1 (6 November 2026). First release: all 274 vetoed drafts, 1946–2026, with full records.